private void ExtractFileData(FileTransfer.FileStreamAssembler assembler, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, NetworkHost sourceHost, ushort sourcePort, NetworkHost destinationHost, ushort destinationPort, Packets.TftpPacket tftpPacket) { if (tftpPacket.OpCode == Packets.TftpPacket.OpCodes.Data) { if (!assembler.IsActive) { //create a new active assembler if ports need to be changed! if (assembler.SourcePort != sourcePort || assembler.DestinationPort != destinationPort) { fileStreamAssemblerList.Remove(assembler, true); //now change the port number in the AssemblerPool FiveTuple tmpFiveTuple = new FiveTuple(sourceHost, sourcePort, destinationHost, destinationPort, FiveTuple.TransportProtocol.UDP); assembler = new FileTransfer.FileStreamAssembler(fileStreamAssemblerList, tmpFiveTuple, true, FileTransfer.FileStreamTypes.TFTP, assembler.Filename, assembler.FileLocation, assembler.Details, tftpPacket.ParentFrame.FrameNumber, tftpPacket.ParentFrame.Timestamp); fileStreamAssemblerList.Add(assembler); } //activate the assembler assembler.TryActivate(); } if (assembler.SourceHost == sourceHost && assembler.SourcePort == sourcePort && assembler.DestinationHost == destinationHost && assembler.DestinationPort == destinationPort) { assembler.AddData(tftpPacket.DataBlock, tftpPacket.DataBlockNumber); if (tftpPacket.DataBlockIsLast) { assembler.FinishAssembling();//we now have the complete file } } } }
private FileSegmentAssembler(string fileOutputDirectory, string filePath, string uniqueFileId, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, PopularityList <string, PacketParser.FileTransfer.FileSegmentAssembler> parentAssemblerList, FileStreamTypes fileStreamType, string details, string serverHostname) { this.fileOutputDirectory = fileOutputDirectory; //this.fileTransferIsServerToClient = fileTransferIsServerToClient; this.filePath = filePath; this.uniqueFileId = uniqueFileId; this.parentAssemblerList = parentAssemblerList; this.fileStreamAssemblerList = fileStreamAssemblerList; this.fileStreamType = fileStreamType; this.details = details; this.serverHostname = serverHostname; }
private bool TryGetTftpFileStreamAssembler(out FileTransfer.FileStreamAssembler assembler, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, NetworkHost sourceHost, ushort sourcePort, NetworkHost destinationHost, ushort destinationPort) { FiveTuple tmpFiveTuple = new FiveTuple(sourceHost, sourcePort, destinationHost, destinationPort, FiveTuple.TransportProtocol.UDP); if (fileStreamAssemblerList.ContainsAssembler(tmpFiveTuple, true)) { //already activated read or write request data assembler = fileStreamAssemblerList.GetAssembler(tmpFiveTuple, true); if (assembler.FileStreamType == FileTransfer.FileStreamTypes.TFTP) { return(true); } else { assembler = null; } } tmpFiveTuple = new FiveTuple(sourceHost, Packets.TftpPacket.DefaultUdpPortNumber, destinationHost, destinationPort, FiveTuple.TransportProtocol.UDP); if (fileStreamAssemblerList.ContainsAssembler(tmpFiveTuple, true)) { //first read request data assembler = fileStreamAssemblerList.GetAssembler(tmpFiveTuple, true); if (assembler.FileStreamType == FileTransfer.FileStreamTypes.TFTP) { return(true); } else { assembler = null; } } tmpFiveTuple = new FiveTuple(sourceHost, sourcePort, destinationHost, Packets.TftpPacket.DefaultUdpPortNumber, FiveTuple.TransportProtocol.UDP); if (fileStreamAssemblerList.ContainsAssembler(tmpFiveTuple, true)) { //check for write request data assembler = fileStreamAssemblerList.GetAssembler(tmpFiveTuple, true); if (assembler.FileStreamType == FileTransfer.FileStreamTypes.TFTP) { return(true); } else { assembler = null; } } assembler = null; return(false);//no assembler found... }
private bool TryCreateNewAssembler(out FileTransfer.FileStreamAssembler assembler, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, Packets.TftpPacket tftpPacket, NetworkHost sourceHost, ushort sourcePort, NetworkHost destinationHost) //destinationPort is not needed { assembler = null; //create new assembler if it is a RRQ or WRQ if (tftpPacket.OpCode == Packets.TftpPacket.OpCodes.ReadRequest) { try { FiveTuple tmpFiveTuple = new FiveTuple(destinationHost, Packets.TftpPacket.DefaultUdpPortNumber, sourceHost, sourcePort, FiveTuple.TransportProtocol.UDP); assembler = new FileTransfer.FileStreamAssembler(fileStreamAssemblerList, tmpFiveTuple, true, FileTransfer.FileStreamTypes.TFTP, tftpPacket.Filename, "", tftpPacket.OpCode.ToString() + " " + tftpPacket.Mode.ToString() + " " + tftpPacket.Filename, tftpPacket.ParentFrame.FrameNumber, tftpPacket.ParentFrame.Timestamp); fileStreamAssemblerList.Add(assembler); } catch (Exception e) { //throw new Exception("Error creating assembler for TFTP file transfer", e); //this.parentForm.ShowError("Error creating assembler for TFTP file transfer: "+e.Message); if (assembler != null) { assembler.Clear(); assembler = null; } return(false); } return(true); } else if (tftpPacket.OpCode == Packets.TftpPacket.OpCodes.WriteRequest) { try { FiveTuple tmpFiveTuple = new FiveTuple(sourceHost, sourcePort, destinationHost, Packets.TftpPacket.DefaultUdpPortNumber, FiveTuple.TransportProtocol.UDP); assembler = new FileTransfer.FileStreamAssembler(fileStreamAssemblerList, tmpFiveTuple, true, FileTransfer.FileStreamTypes.TFTP, tftpPacket.Filename, "", tftpPacket.OpCode.ToString() + " " + tftpPacket.Mode.ToString() + " " + tftpPacket.Filename, tftpPacket.ParentFrame.FrameNumber, tftpPacket.ParentFrame.Timestamp); fileStreamAssemblerList.Add(assembler); } catch (Exception e) { //throw new Exception("Error creating assembler for TFTP file transfer", e); //this.parentForm.ShowError("Error creating assembler for TFTP file transfer: "+e.Message); if (assembler != null) { assembler.Clear(); assembler = null; } return(false); } return(true); } else { assembler = null; return(false); } }
internal FileSegmentAssembler(string fileOutputDirectory, NetworkTcpSession networkTcpSession, bool transferIsClientToServer, string filePath, string uniqueFileId, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, PopularityList <string, PacketParser.FileTransfer.FileSegmentAssembler> parentAssemblerList, FileStreamTypes fileStreamType, string details, string serverHostname) : this(fileOutputDirectory, filePath, uniqueFileId, fileStreamAssemblerList, parentAssemblerList, fileStreamType, details, serverHostname) { //this.fileOutputDirectory = fileOutputDirectory; //this.networkTcpSession = networkTcpSession; this.fiveTuple = networkTcpSession.Flow.FiveTuple; this.transferIsClientToServer = transferIsClientToServer; /* * if (this.fileTransferIsServerToClient) { * this.sourceHost = networkTcpSession.ServerHost; * this.destinationHost = networkTcpSession.ClientHost; * this.sourcePort = networkTcpSession.ServerTcpPort; * this.destinationPort = networkTcpSession.ClientTcpPort; * } * else { * this.sourceHost = networkTcpSession.ClientHost; * this.destinationHost = networkTcpSession.ServerHost; * this.sourcePort = networkTcpSession.ClientTcpPort; * this.destinationPort = networkTcpSession.ServerTcpPort; * }*/ /* * this.filePath = filePath; * this.uniqueFileId = uniqueFileId; * this.parentAssemblerList = parentAssemblerList; * this.fileStreamAssemblerList = fileStreamAssemblerList; * this.fileStreamType = fileStreamType; * this.details = details; */ }
internal FileSegmentAssembler(string fileOutputDirectory, bool transferIsClientToServer, string filePath, string uniqueFileId, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, PopularityList <string, PacketParser.FileTransfer.FileSegmentAssembler> parentAssemblerList, FileStreamTypes fileStreamType, string details, FiveTuple fiveTuple, string serverHostname) : this(fileOutputDirectory, filePath, uniqueFileId, fileStreamAssemblerList, parentAssemblerList, fileStreamType, details, serverHostname) { this.fiveTuple = fiveTuple; this.transferIsClientToServer = transferIsClientToServer; /* * this.sourceHost = sourceHost; * this.destinationHost = destinationHost; * this.sourcePort = sourcePort; * this.destinationPort = destinationPort; */ }
FileSegmentAssemblerHandler(string fileOutputDirectory, FileStreamAssemblerList fileStreamAssemblerList) { this.fileOutputDirectory = fileOutputDirectory; this.fileStreamAssemblerList = fileStreamAssemblerList; this.assemblerList = new PopularityList<string, FileSegmentAssembler>(100);//100 simultaneous partial downloads allowed }
internal FileSegmentAssembler(string fileOutputDirectory, NetworkTcpSession networkTcpSession, bool transferIsClientToServer, string filePath, string uniqueFileId, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, PopularityList <string, PacketParser.FileTransfer.FileSegmentAssembler> parentAssemblerList, FileStreamTypes fileStreamType, string details, string serverHostname) : this(fileOutputDirectory, filePath, uniqueFileId, fileStreamAssemblerList, parentAssemblerList, fileStreamType, details, serverHostname) { //this.fileOutputDirectory = fileOutputDirectory; //this.networkTcpSession = networkTcpSession; this.fiveTuple = networkTcpSession.Flow.FiveTuple; this.transferIsClientToServer = transferIsClientToServer; }
private bool TryGetFileStreamAssembler(out FileTransfer.FileStreamAssembler assembler, FileTransfer.FileStreamAssemblerList fileStreamAssemblerList, NetworkHost sourceHost, ushort sourcePort, NetworkHost destinationHost, ushort destinationPort) { if (fileStreamAssemblerList.ContainsAssembler(sourceHost, sourcePort, destinationHost, destinationPort, false)) { //already activated read or write request data assembler = fileStreamAssemblerList.GetAssembler(sourceHost, sourcePort, destinationHost, destinationPort, false); return(true); } else if (fileStreamAssemblerList.ContainsAssembler(sourceHost, Packets.TftpPacket.DefaultUdpPortNumber, destinationHost, destinationPort, false)) { //first read request data assembler = fileStreamAssemblerList.GetAssembler(sourceHost, Packets.TftpPacket.DefaultUdpPortNumber, destinationHost, destinationPort, false); return(true); } else if (fileStreamAssemblerList.ContainsAssembler(sourceHost, sourcePort, destinationHost, Packets.TftpPacket.DefaultUdpPortNumber, false)) { //check for write request data assembler = fileStreamAssemblerList.GetAssembler(sourceHost, sourcePort, destinationHost, Packets.TftpPacket.DefaultUdpPortNumber, false); return(true); } else { assembler = null; return(false);//no assembler found... } }