public CSharedFiles(MemoryStream buffer, CFilesList fileList) { BinaryWriter writer = new BinaryWriter(buffer); DonkeyHeader header = new DonkeyHeader((byte)Protocol.ClientCommand.AskSharedFilesAnswer, writer); writer.Write((uint)fileList.Count); lock (fileList) { foreach (CElement Elemento in fileList.Values) { writer.Write(Elemento.File.FileHash); writer.Write((uint)0); writer.Write((ushort)0); writer.Write(Elemento.File.FileType); // file name new ParameterWriter((byte)Protocol.FileTag.Name, Elemento.File.FileName, writer); // file size new ParameterWriter((byte)Protocol.FileTag.Size, Elemento.File.FileSize, writer); } } header.Packetlength = (uint)writer.BaseStream.Length - header.Packetlength + 1; writer.Seek(0, SeekOrigin.Begin); header.Serialize(writer); }
//constructor to publish a list of files public CServerPublishFiles(MemoryStream buffer, CFilesList FilesList, uint startIndex) { DonkeyHeader header; LastFilePublished = startIndex; BinaryWriter writer = new BinaryWriter(buffer); header = new DonkeyHeader((byte)Protocol.ServerCommand.OfferFiles, writer); writer.Write((uint)FilesList.Count); uint nfiles = 0; int fileIndex = 0; foreach (CElement element in FilesList.Values) { fileIndex++; if (fileIndex < startIndex) continue; if (m_AddFileToPacket(writer, element)) nfiles++; LastFilePublished++; if (nfiles >= 200) break; //TODO: check server soft limits } header.Packetlength = (uint)writer.BaseStream.Length - header.Packetlength + 1; writer.Seek(0, SeekOrigin.Begin); header.Serialize(writer); writer.Write(nfiles); CLog.Log(Types.Constants.Log.Info, "FIL_PUBLISHED", nfiles); }