public void sendFileName(IOStream f, ArrayList fileList, string fileName, bool recursive, UInt32 baseFlags) { FileStruct file = makeFile(fileName, fileList, f == null && options.deleteExcluded ? Options.SERVER_EXCLUDES : Options.ALL_EXCLUDES); if (file == null) { return; } mayBeEmitFileListProgress(fileList); if (file.baseName != null && file.baseName.CompareTo("") != 0) { fileList.Add(file); sendFileEntry(file, f, baseFlags); if (recursive && Util.S_ISDIR(file.mode) && (file.flags & Options.FLAG_MOUNT_POINT) == 0) { options.localExcludeList.Clear(); sendDirectory(f, fileList, file.FNameTo()); } } }
public void SendFiles(ArrayList fileList, ClientInfo cInfo) { ShowMessage("Processing..."); try { IOStream f = cInfo.IoStream; string fileName = "", fileName2 = ""; SumStruct s = null; int phase = 0; bool saveMakeBackups = options.makeBackups; Match match = new Match(options); if (options.verbose > 2) { Log.WriteLine("SendFiles starting"); } while (true) { fileName = ""; int i = f.readInt(); if (i == -1) { if (phase == 0) { phase++; checkSum.cSumLength = CheckSum.SUM_LENGTH; f.writeInt(-1); if (options.verbose > 2) { Log.WriteLine("SendFiles phase=" + phase); } options.makeBackups = false; continue; } break; } if (i < 0 || i >= fileList.Count) { MainClass.Exit("Invalid file index " + i + " (count=" + fileList.Count + ")", cInfo); } FileStruct file = (FileStruct)fileList[i]; Options.stats.currentFileIndex = i; Options.stats.numTransferredFiles++; Options.stats.totalTransferredSize += file.length; if (file.baseDir != null && file.baseDir.CompareTo("") != 0) { fileName = file.baseDir; if (!fileName.EndsWith("/")) { fileName += "/"; } } fileName2 = file.FNameTo(); fileName += file.FNameTo(); ShowMessage("uploading " + fileName); if (options.verbose > 2) { Log.WriteLine("sendFiles(" + i + ", " + fileName + ")"); } if (options.dryRun) { if (!options.amServer && options.verbose != 0) { Log.WriteLine(fileName2); } f.writeInt(i); continue; } Stats initialStats = Options.stats; s = ReceiveSums(cInfo); Stream fd; try { fd = new FileStream(fileName, FileMode.Open, FileAccess.Read); } catch (FileNotFoundException) { Log.WriteLine("file has vanished: " + Util.fullFileName(fileName)); s = null; continue; } catch (Exception) { Log.WriteLine("SendFiles failed to open " + Util.fullFileName(fileName)); s = null; continue; } FStat st = new FStat(); FileSystem.FileInfo fi = new FileSystem.FileInfo(fileName); // TODO: path length st.mTime = fi.LastWriteTime; // TODO: path length st.size = fi.Length; MapFile mbuf = null; if (st.size != 0) { int mapSize = (int)Math.Max(s.bLength * 3, Options.MAX_MAP_SIZE); mbuf = new MapFile(fd, (int)st.size, mapSize, (int)s.bLength); } if (options.verbose > 2) { Log.WriteLine("SendFiles mapped " + fileName + " of size " + st.size); } f.writeInt(i); Generator gen = new Generator(options); gen.WriteSumHead(f, s); if (options.verbose > 2) { Log.WriteLine("calling MatchSums " + fileName); } if (!options.amServer && options.verbose != 0) { Log.WriteLine(fileName2); } Token token = new Token(options); token.SetCompression(fileName); match.MatchSums(f, s, mbuf, (int)st.size); Log.LogSend(file, initialStats); if (mbuf != null) { bool j = mbuf.UnMapFile(); if (j) { Log.WriteLine("read errors mapping " + Util.fullFileName(fileName)); } } fd.Close(); s.sums = null; if (options.verbose > 2) { Log.WriteLine("sender finished " + fileName); } } options.makeBackups = saveMakeBackups; if (options.verbose > 2) { Log.WriteLine("send files finished"); } match.MatchReport(f); f.writeInt(-1); } finally { HideMessage(); } }
private void listFileEntry(FileStruct fileEntry) { if(fileEntry.baseName == null || fileEntry.baseName.CompareTo("") == 0) return; string perms = ""; Log.WriteLine(perms + " " + fileEntry.length + " " + fileEntry.modTime.ToString() + " " + fileEntry.FNameTo()); }
public void sendFileEntry(FileStruct file, IOStream f, UInt32 baseflags) { UInt32 flags = baseflags; int l1 = 0,l2 = 0; if(f == null) return; if(file == null) { f.writeByte(0); lastName = ""; return; } string fileName = file.FNameTo().Replace(":",""); for (l1 = 0; lastName.Length >l1 && (fileName[l1] == lastName[l1]) && (l1 < 255); l1++) {} l2 = fileName.Substring(l1).Length; flags |= Options.XMIT_SAME_NAME; if (l2 > 255) flags |= Options.XMIT_LONG_NAME; if(options.protocolVersion >= 28) { if(flags == 0 && !Util.S_ISDIR(file.mode)) flags |= Options.XMIT_TOP_DIR; /*if ((flags & 0xFF00) > 0 || flags == 0) { flags |= Options.XMIT_EXTENDED_FLAGS; f.writeByte((byte)flags); f.writeByte((byte)(flags >> 8)); } else */ f.writeByte((byte)flags); } else { if ((flags & 0xFF) == 0 && !Util.S_ISDIR(file.mode)) flags |= Options.XMIT_TOP_DIR; if ((flags & 0xFF) == 0) flags |= Options.XMIT_LONG_NAME; f.writeByte((byte)flags); } if ((flags & Options.XMIT_SAME_NAME) != 0) f.writeByte((byte)l1); if ((flags & Options.XMIT_LONG_NAME) != 0) f.writeInt(l2); else f.writeByte((byte)l2); byte[] b =System.Text.ASCIIEncoding.ASCII.GetBytes(fileName); f.Write(b, l1, l2); f.WriteLongInt(file.length); if ((flags & Options.XMIT_SAME_TIME) == 0) f.writeInt(file.modTime.Second); if ((flags & Options.XMIT_SAME_MODE) == 0) f.writeInt((int)file.mode); if (options.preserveUID && (flags & Options.XMIT_SAME_UID) == 0) { f.writeInt(file.uid); } if (options.preserveGID && (flags & Options.XMIT_SAME_GID) == 0) { f.writeInt(file.gid); } if (options.alwaysChecksum ) { byte[] sum; if(!Util.S_ISDIR(file.mode)) sum = file.sum; else if(options.protocolVersion < 28) sum = new byte[16]; else sum = null; if (sum != null ) { f.Write(sum, 0, options.protocolVersion < 21 ? 2 : CheckSum.MD4_SUM_LENGTH); } } lastName = fileName; }
public static int fileCompare(FileStruct file1, FileStruct file2) { return uStringCompare(file1.FNameTo(),file2.FNameTo()); }
private void listFileEntry(FileStruct fileEntry) { if (fileEntry.baseName == null || fileEntry.baseName.CompareTo("") == 0) { return; } string perms = ""; Log.WriteLine(perms + " " + fileEntry.length + " " + fileEntry.modTime.ToString() + " " + fileEntry.FNameTo()); }
public void sendFileEntry(FileStruct file, IOStream f, UInt32 baseflags) { UInt32 flags = baseflags; int l1 = 0, l2 = 0; if (f == null) { return; } if (file == null) { f.writeByte(0); lastName = ""; return; } string fileName = file.FNameTo().Replace(":", ""); for (l1 = 0; lastName.Length > l1 && (fileName[l1] == lastName[l1]) && (l1 < 255); l1++) { } l2 = fileName.Substring(l1).Length; flags |= Options.XMIT_SAME_NAME; if (l2 > 255) { flags |= Options.XMIT_LONG_NAME; } if (options.protocolVersion >= 28) { if (flags == 0 && !Util.S_ISDIR(file.mode)) { flags |= Options.XMIT_TOP_DIR; } /*if ((flags & 0xFF00) > 0 || flags == 0) * { * flags |= Options.XMIT_EXTENDED_FLAGS; * f.writeByte((byte)flags); * f.writeByte((byte)(flags >> 8)); * } * else */ f.writeByte((byte)flags); } else { if ((flags & 0xFF) == 0 && !Util.S_ISDIR(file.mode)) { flags |= Options.XMIT_TOP_DIR; } if ((flags & 0xFF) == 0) { flags |= Options.XMIT_LONG_NAME; } f.writeByte((byte)flags); } if ((flags & Options.XMIT_SAME_NAME) != 0) { f.writeByte((byte)l1); } if ((flags & Options.XMIT_LONG_NAME) != 0) { f.writeInt(l2); } else { f.writeByte((byte)l2); } byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(fileName); f.Write(b, l1, l2); f.WriteLongInt(file.length); if ((flags & Options.XMIT_SAME_TIME) == 0) { f.writeInt(file.modTime.Second); } if ((flags & Options.XMIT_SAME_MODE) == 0) { f.writeInt((int)file.mode); } if (options.preserveUID && (flags & Options.XMIT_SAME_UID) == 0) { f.writeInt(file.uid); } if (options.preserveGID && (flags & Options.XMIT_SAME_GID) == 0) { f.writeInt(file.gid); } if (options.alwaysChecksum) { byte[] sum; if (!Util.S_ISDIR(file.mode)) { sum = file.sum; } else if (options.protocolVersion < 28) { sum = new byte[16]; } else { sum = null; } if (sum != null) { f.Write(sum, 0, options.protocolVersion < 21 ? 2 : CheckSum.MD4_SUM_LENGTH); } } lastName = fileName; }
public static int fileCompare(FileStruct file1, FileStruct file2) { return(uStringCompare(file1.FNameTo(), file2.FNameTo())); }
public void GenerateFiles(IOStream f, ArrayList fileList, string localName) { int i; int phase = 0; if (options.verbose > 2) { Log.WriteLine("generator starting count=" + fileList.Count); } for (i = 0; i < fileList.Count; i++) { FileStruct file = ((FileStruct)fileList[i]); if (file.baseName == null) { continue; } if (Util.S_ISDIR(file.mode)) { continue; } ReceiveGenerator(localName != null ? localName : file.FNameTo(), file, i, f); } phase++; checkSum.cSumLength = CheckSum.SUM_LENGTH; if (options.verbose > 2) { Log.WriteLine("GenerateFiles phase=" + phase); } f.writeInt(-1); phase++; if (options.verbose > 2) { Log.WriteLine("GenerateFiles phase=" + phase); } f.writeInt(-1); if (options.protocolVersion >= 29 && !options.delayUpdates) { f.writeInt(-1); } /* now we need to fix any directory permissions that were * modified during the transfer * */ for (i = 0; i < fileList.Count; i++) { FileStruct file = ((FileStruct)fileList[i]); if (file.baseName != null || Util.S_ISDIR(file.mode)) { continue; } ReceiveGenerator(localName != null ? localName : file.FNameTo(), file, i, null); } if (options.verbose > 2) { Log.WriteLine("GenerateFiles finished"); } }