public static void Report(ClientInfo cInfo) { IOStream f = cInfo.IoStream; Options options = cInfo.Options; Int64 totalWritten = Options.stats.totalWritten; Int64 totalRead = Options.stats.totalRead; if (options.amServer && f != null) { if (options.amSender) { f.WriteLongInt(totalRead); f.WriteLongInt(totalWritten); f.WriteLongInt(Options.stats.totalSize); } return; } if (!options.amSender && f != null) { /* Read the first two in opposite order because the meaning of * read/write swaps when switching from sender to receiver. */ totalWritten = f.ReadLongInt(); totalRead = f.ReadLongInt(); Options.stats.totalSize = f.ReadLongInt(); } if (options.doStats) { Log.WriteLine("Number of files: " + Options.stats.numFiles); Log.WriteLine("Number of files transferred: " + Options.stats.numTransferredFiles); Log.WriteLine("Total file size: " + Options.stats.totalSize); Log.WriteLine("Total transferred file size: " + Options.stats.totalTransferredSize); Log.WriteLine("Literal data: " + Options.stats.literalData); Log.WriteLine("Matched data: " + Options.stats.matchedData); Log.WriteLine("File list size: " + Options.stats.fileListSize); Log.WriteLine("Total bytes written: " + totalWritten); Log.WriteLine("Total bytes received: " + totalRead); } }
public FileStruct receiveFileEntry(UInt32 flags, ClientInfo clientInfo) { if (clientInfo == null) { lastName = String.Empty; return(null); } IOStream f = clientInfo.IoStream; int l1 = 0, l2 = 0; if ((flags & Options.XMIT_SAME_NAME) != 0) { l1 = f.readByte(); } if ((flags & Options.XMIT_LONG_NAME) != 0) { l2 = f.readInt(); } else { l2 = f.readByte(); } if (l2 >= Options.MAXPATHLEN - l1) { MainClass.Exit("overflow: lastname=" + lastName, clientInfo); } string thisName = lastName.Substring(0, l1); thisName += f.ReadStringFromBuffer(l2); lastName = thisName; thisName = Util.cleanFileName(thisName, false); if (options.sanitizePath) { thisName = Util.sanitizePath(thisName, String.Empty, 0); } string baseName = String.Empty; string dirName = String.Empty; if (thisName.LastIndexOf("/") != -1) { baseName = Path.GetFileName(thisName); dirName = Path.GetDirectoryName(thisName); } else { baseName = thisName; dirName = null; } Int64 fileLength = f.ReadLongInt(); if ((flags & Options.XMIT_SAME_TIME) == 0) { modTime = DateTime.FromFileTime(f.readInt()); } if ((flags & Options.XMIT_SAME_MODE) == 0) { mode = (UInt32)f.readInt(); } if (options.preserveUID && (flags & Options.XMIT_SAME_UID) == 0) { int uid = f.readInt(); } if (options.preserveGID && (flags & Options.XMIT_SAME_GID) == 0) { int gid = f.readInt(); } byte[] sum = new byte[0]; if (options.alwaysChecksum && !Util.S_ISDIR(mode)) { sum = new byte[CheckSum.MD4_SUM_LENGTH]; sum = f.ReadBuffer(options.protocolVersion < 21 ? 2 : CheckSum.MD4_SUM_LENGTH); } FileStruct fs = new FileStruct(); fs.length = (int)fileLength; fs.baseName = baseName; fs.dirName = dirName; fs.sum = sum; fs.mode = mode; fs.modTime = modTime; fs.flags = flags; return(fs); }