package org.krakenapps.pcap.decoder.tftp; import java.net.InetAddress; import java.net.InetSocketAddress; import org.krakenapps.pcap.util.Buffer; import org.krakenapps.pcap.util.ChainBuffer; public class TftpSession { private InetSocketAddress srcAddr; private InetAddress destIp; private TftpMethod method; private String fileName; private TftpMode mode; private int sendNum = 0; private int ackNum = 0; private Buffer data; public TftpSession(int opCode, InetSocketAddress srcAddr, InetAddress destIp, byte[] fileNameBytes, byte[] modeBytes) { if (opCode == 1) method = TftpMethod.GET; else method = TftpMethod.PUT; this.srcAddr = srcAddr; this.destIp = destIp; fileName = new String(fileNameBytes); setMode(modeBytes); data = new ChainBuffer(); } public InetSocketAddress getSrcAddress() { return srcAddr; } public InetAddress getDestIp() { return destIp; } public TftpMethod getMethod() { return method; } public String getFileName() { return fileName; } public TftpMode getMode() { return mode; } private void setMode(byte[] modeBytes) { String s = new String(modeBytes); if (s.equalsIgnoreCase("netascii")) { mode = TftpMode.NETASCII; } else if (s.equalsIgnoreCase("octet")) { mode = TftpMode.OCTET; } else if (s.equalsIgnoreCase("mail")) { mode = TftpMode.MAIL; } } public int getSendNum() { return sendNum; } public void incSendNum() { sendNum++; } public int getAckNum() { return ackNum; } public void incAckNum() { ackNum++; } public Buffer getData() { return data; } public void putData(byte[] b) { data.addLast(b); } public boolean equals(InetSocketAddress sockAddr, InetAddress addr) { if (srcAddr.equals(sockAddr) && destIp.equals(addr)) return true; return false; } @Override public String toString() { return "tftp " + destIp.toString() + " " + method.toString() + " " + fileName + "(" + mode + ")"; } }