@Test public void testDeserialize() throws PacketParsingException { IPacket packet = new IPv4(); packet.deserialize(pktSerialized, 0, pktSerialized.length); byte[] pktSerialized1 = packet.serialize(); assertTrue(Arrays.equals(pktSerialized, pktSerialized1)); }
@Override public IPacket deserialize(byte[] data, int offset, int length) throws PacketParsingException { ByteBuffer bb = ByteBuffer.wrap(data, offset, length); this.sourcePort = bb.getShort(); this.destinationPort = bb.getShort(); this.sequence = bb.getInt(); this.acknowledge = bb.getInt(); this.flags = bb.getShort(); this.dataOffset = (byte) ((this.flags >> 12) & 0xf); if (this.dataOffset < 5) { throw new PacketParsingException("Invalid tcp header length < 20"); } this.flags = (short) (this.flags & 0x1ff); this.windowSize = bb.getShort(); this.checksum = bb.getShort(); this.urgentPointer = bb.getShort(); if (this.dataOffset > 5) { int optLength = (dataOffset << 2) - 20; if (bb.limit() < bb.position()+optLength) { optLength = bb.limit() - bb.position(); } try { this.options = new byte[optLength]; bb.get(this.options, 0, optLength); } catch (IndexOutOfBoundsException e) { this.options = null; } } this.payload = new Data(); int remLength = bb.limit()-bb.position(); this.payload = payload.deserialize(data, bb.position(), remLength); this.payload.setParent(this); return this; }
TCP extends BasePacket { @Override public IPacket deserialize(byte[] data, int offset, int length) throws PacketParsingException { ByteBuffer bb = ByteBuffer.wrap(data, offset, length); this.sourcePort = bb.getShort(); this.destinationPort = bb.getShort(); this.sequence = bb.getInt(); this.acknowledge = bb.getInt(); this.flags = bb.getShort(); this.dataOffset = (byte) ((this.flags >> 12) & 0xf); if (this.dataOffset < 5) { throw new PacketParsingException("Invalid tcp header length < 20"); } this.flags = (short) (this.flags & 0x1ff); this.windowSize = bb.getShort(); this.checksum = bb.getShort(); this.urgentPointer = bb.getShort(); if (this.dataOffset > 5) { int optLength = (dataOffset << 2) - 20; if (bb.limit() < bb.position()+optLength) { optLength = bb.limit() - bb.position(); } try { this.options = new byte[optLength]; bb.get(this.options, 0, optLength); } catch (IndexOutOfBoundsException e) { this.options = null; } } this.payload = new Data(); int remLength = bb.limit()-bb.position(); this.payload = payload.deserialize(data, bb.position(), remLength); this.payload.setParent(this); return this; } }
TCP extends BasePacket { @Override public IPacket deserialize(byte[] data, int offset, int length) throws PacketParsingException { ByteBuffer bb = ByteBuffer.wrap(data, offset, length); this.sourcePort = bb.getShort(); this.destinationPort = bb.getShort(); this.sequence = bb.getInt(); this.acknowledge = bb.getInt(); this.flags = bb.getShort(); this.dataOffset = (byte) ((this.flags >> 12) & 0xf); if (this.dataOffset < 5) { throw new PacketParsingException("Invalid tcp header length < 20"); } this.flags = (short) (this.flags & 0x1ff); this.windowSize = bb.getShort(); this.checksum = bb.getShort(); this.urgentPointer = bb.getShort(); if (this.dataOffset > 5) { int optLength = (dataOffset << 2) - 20; if (bb.limit() < bb.position()+optLength) { optLength = bb.limit() - bb.position(); } try { this.options = new byte[optLength]; bb.get(this.options, 0, optLength); } catch (IndexOutOfBoundsException e) { this.options = null; } } this.payload = new Data(); int remLength = bb.limit()-bb.position(); this.payload = payload.deserialize(data, bb.position(), remLength); this.payload.setParent(this); return this; }  }
TCP extends BasePacket { @Override public IPacket deserialize(byte[] data, int offset, int length) throws PacketParsingException { ByteBuffer bb = ByteBuffer.wrap(data, offset, length); this.sourcePort = bb.getShort(); this.destinationPort = bb.getShort(); this.sequence = bb.getInt(); this.acknowledge = bb.getInt(); this.flags = bb.getShort(); this.dataOffset = (byte) ((this.flags >> 12) & 0xf); if (this.dataOffset < 5) { throw new PacketParsingException("Invalid tcp header length < 20"); } this.flags = (short) (this.flags & 0x1ff); this.windowSize = bb.getShort(); this.checksum = bb.getShort(); this.urgentPointer = bb.getShort(); if (this.dataOffset > 5) { int optLength = (dataOffset << 2) - 20; if (bb.limit() < bb.position()+optLength) { optLength = bb.limit() - bb.position(); } try { this.options = new byte[optLength]; bb.get(this.options, 0, optLength); } catch (IndexOutOfBoundsException e) { this.options = null; } } this.payload = new Data(); int remLength = bb.limit()-bb.position(); this.payload = payload.deserialize(data, bb.position(), remLength); this.payload.setParent(this); return this; }  short getSourcePort(); TCP setSourcePort(short sourcePort); short getDestinationPort(); TCP setDestinationPort(short destinationPort); short getChecksum(); int getSequence(); TCP setSequence(int seq); int getAcknowledge(); TCP setAcknowledge(int ack); byte getDataOffset(); TCP setDataOffset(byte offset); short getFlags(); TCP setFlags(short flags); short getWindowSize(); TCP setWindowSize(short windowSize); short getTcpChecksum(); TCP setTcpChecksum(short checksum); @Override void resetChecksum(); short getUrgentPointer(short urgentPointer); TCP setUrgentPointer(short urgentPointer); byte[] getOptions(); TCP setOptions(byte[] options); TCP setChecksum(short checksum); byte[] serialize(); @Override int hashCode(); @Override boolean equals(Object obj); @Override IPacket deserialize(byte[] data, int offset, int length); }
TCP extends BasePacket { @Override public IPacket deserialize(byte[] data, int offset, int length) throws PacketParsingException { ByteBuffer bb = ByteBuffer.wrap(data, offset, length); this.sourcePort = bb.getShort(); this.destinationPort = bb.getShort(); this.sequence = bb.getInt(); this.acknowledge = bb.getInt(); this.flags = bb.getShort(); this.dataOffset = (byte) ((this.flags >> 12) & 0xf); if (this.dataOffset < 5) { throw new PacketParsingException("Invalid tcp header length < 20"); } this.flags = (short) (this.flags & 0x1ff); this.windowSize = bb.getShort(); this.checksum = bb.getShort(); this.urgentPointer = bb.getShort(); if (this.dataOffset > 5) { int optLength = (dataOffset << 2) - 20; if (bb.limit() < bb.position()+optLength) { optLength = bb.limit() - bb.position(); } try { this.options = new byte[optLength]; bb.get(this.options, 0, optLength); } catch (IndexOutOfBoundsException e) { this.options = null; } } this.payload = new Data(); int remLength = bb.limit()-bb.position(); this.payload = payload.deserialize(data, bb.position(), remLength); this.payload.setParent(this); return this; }  short getSourcePort(); TCP setSourcePort(short sourcePort); short getDestinationPort(); TCP setDestinationPort(short destinationPort); short getChecksum(); int getSequence(); TCP setSequence(int seq); int getAcknowledge(); TCP setAcknowledge(int ack); byte getDataOffset(); TCP setDataOffset(byte offset); short getFlags(); TCP setFlags(short flags); short getWindowSize(); TCP setWindowSize(short windowSize); short getTcpChecksum(); TCP setTcpChecksum(short checksum); @Override void resetChecksum(); short getUrgentPointer(short urgentPointer); TCP setUrgentPointer(short urgentPointer); byte[] getOptions(); TCP setOptions(byte[] options); TCP setChecksum(short checksum); byte[] serialize(); @Override int hashCode(); @Override boolean equals(Object obj); @Override IPacket deserialize(byte[] data, int offset, int length);  }