📄 radiologger.java
字号:
((data[20] & 0xFF) << 24) + ((data[21] & 0xFF) << 16) + ((data[22] & 0xFF) << 8) + ((data[23] & 0xFF) << 0); return seqNo; } public String getShortDescription() { return "AODV RREQ to " + getDestAddr() + " from " + getOrigAddr(); } public String getToolTip() { return "<html>" + "AODV RREQ type: " + getType() + "<br>" + "AODV RREQ flags: " + getFlags() + "<br>" + "AODV RREQ reserved: " + getReserved() + "<br>" + "AODV RREQ hop_count: " + getHopCount() + "<br>" + "AODV RREQ id: " + getID() + "<br>" + "AODV RREQ dest_addr: " + getDestAddr() + "<br>" + "AODV RREQ dest_seqno: " + getDestSeqNo() + "<br>" + "AODV RREQ orig_addr: " + getOrigAddr() + "<br>" + "AODV RREQ orig_seqno: " + getOrigSeqNo() + "</html>"; } public static boolean dataFits(byte[] packetData) { if (packetData.length != SIZE) { return false; } byte[] dataNoHeader = new byte[HEADER_SIZE]; System.arraycopy(packetData, packetData.length - HEADER_SIZE, dataNoHeader, 0, HEADER_SIZE); if (dataNoHeader[0] != TYPE) { return false; } return true; } }; static class PacketAODV_RREP extends LoggedPacket { public final static int SIZE = 56; public final static int HEADER_SIZE = 20; public final static int TYPE = 2; private byte[] data; public PacketAODV_RREP(byte[] packetData) { this.data = new byte[HEADER_SIZE]; System.arraycopy(packetData, packetData.length - HEADER_SIZE, data, 0, HEADER_SIZE); } public int getType() { return data[0]; } public int getFlags() { return data[1]; } public int getPrefix() { return data[2]; } public int getHopCount() { return data[3]; } public String getDestAddr() { return (0xff&data[4]) + "." + (0xff&data[5]) + "." + (0xff&data[6]) + "." + (0xff&data[7]); } public int getDestSeqNo() { int seqNo = ((data[8] & 0xFF) << 24) + ((data[9] & 0xFF) << 16) + ((data[10] & 0xFF) << 8) + ((data[11] & 0xFF) << 0); return seqNo; } public String getOrigAddr() { return (0xff&data[12]) + "." + (0xff&data[13]) + "." + (0xff&data[14]) + "." + (0xff&data[15]); } public int getLifetime() { int seqNo = ((data[16] & 0xFF) << 24) + ((data[17] & 0xFF) << 16) + ((data[18] & 0xFF) << 8) + ((data[19] & 0xFF) << 0); return seqNo; } public String getShortDescription() { return "AODV RREP to " + getDestAddr() + " from " + getOrigAddr(); } public String getToolTip() { return "<html>" + "AODV RREP type: " + getType() + "<br>" + "AODV RREP flags: " + getFlags() + "<br>" + "AODV RREP prefix: " + getPrefix() + "<br>" + "AODV RREP hop_count: " + getHopCount() + "<br>" + "AODV RREP dest_addr: " + getDestAddr() + "<br>" + "AODV RREP dest_seqno: " + getDestSeqNo() + "<br>" + "AODV RREP orig_addr: " + getOrigAddr() + "<br>" + "AODV RREP lifetime: " + getLifetime() + "<br>" + "</html>"; } public static boolean dataFits(byte[] packetData) { if (packetData.length != SIZE) { return false; } byte[] dataNoHeader = new byte[HEADER_SIZE]; System.arraycopy(packetData, packetData.length - HEADER_SIZE, dataNoHeader, 0, HEADER_SIZE); if (dataNoHeader[0] != TYPE) { return false; } return true; } }; static class PacketAODV_RERR extends LoggedPacket { public final static int SIZE = 40; public final static int HEADER_SIZE = 12; public final static int TYPE = 3; private byte[] data; public PacketAODV_RERR(byte[] packetData) { this.data = new byte[HEADER_SIZE]; System.arraycopy(packetData, packetData.length - HEADER_SIZE, data, 0, HEADER_SIZE); } public int getType() { return data[0]; } public int getFlags() { return data[1]; } public int getReserved() { return data[2]; } public int getDestCount() { return data[3]; } public String getUnreachAddr() { return (0xff&data[4]) + "." + (0xff&data[5]) + "." + (0xff&data[6]) + "." + (0xff&data[7]); } public int getUnreachSeqNo() { int seqNo = ((data[8] & 0xFF) << 24) + ((data[9] & 0xFF) << 16) + ((data[10] & 0xFF) << 8) + ((data[11] & 0xFF) << 0); return seqNo; } public String getShortDescription() { return "AODV RERR for " + getUnreachAddr(); } public String getToolTip() { return "<html>" + "AODV RERR type: " + getType() + "<br>" + "AODV RERR flags: " + getFlags() + "<br>" + "AODV RERR reserved: " + getReserved() + "<br>" + "AODV RERR dest_count: " + getDestCount() + "<br>" + "AODV RERR unreach_addr: " + getUnreachAddr() + "<br>" + "AODV RERR unreach_seqno: " + getUnreachSeqNo() + "<br>" + "</html>"; } public static boolean dataFits(byte[] packetData) { if (packetData.length != SIZE) { return false; } byte[] dataNoHeader = new byte[HEADER_SIZE]; System.arraycopy(packetData, packetData.length - HEADER_SIZE, dataNoHeader, 0, HEADER_SIZE); if (dataNoHeader[0] != TYPE) { return false; } return true; } }; static class AckPacket extends LoggedPacket { public final static int SIZE = 5; private byte[] data; public AckPacket(byte[] packetData) { this.data = packetData; } public int getChecksum() { int checksum = ((data[3] & 0xFF) << 8) + ((data[4] & 0xFF) << 0); return checksum; } public String getShortDescription() { return "ACK"; } public String getToolTip() { return "<html>" + "ACK checksum: " + getChecksum() + "<br>" + "</html>"; } public static boolean dataFits(byte[] packetData) { if (packetData.length != SIZE) { return false; } if (packetData[0] != (byte) 'a') { return false; } if (packetData[1] != (byte) 'C') { return false; } if (packetData[2] != (byte) 'k') { return false; } return true; } }; static class ForwardedPacketUnknown extends PacketUnknown { public final static int MINIMUM_SIZE = 4; public ForwardedPacketUnknown(byte[] data) { super(data); } public String getShortDescription() { return "(FWD) " + super.getShortDescription(); } public static boolean dataFits(byte[] packetData) { if (packetData.length < ForwardedPacketUnknown.MINIMUM_SIZE) { return false; } if (packetData[0] != (byte) 'f') { return false; } if (packetData[1] != (byte) 'W') { return false; } if (packetData[2] != (byte) 'd') { return false; } if (packetData[3] != (byte) ':') { return false; } return true; } } static class PacketUnknown extends LoggedPacket { private byte[] data = null; public PacketUnknown(byte[] data) { this.data = data; } public String getShortDescription() { return "Data packet, size " + data.length; } public String getToolTip() { String toolTip = "<html><b>Data packet</b><br>"; int byteCounter = 0; for (byte b: data) { String hexB = "0" + Integer.toHexString(b); hexB = hexB.substring(hexB.length() - 2); toolTip += "0x" + hexB + " "; if (byteCounter++ > 2) { toolTip += "<br>"; byteCounter = 0; } } toolTip += "<br><br>"; for (byte b: data) { toolTip += (char) b; } toolTip += "</html>"; return toolTip; } } private LoggedPacket analyzePacket(byte[] data) { if (PacketAODV_RREQ.dataFits(data)) { return new PacketAODV_RREQ(data); } if (PacketAODV_RREP.dataFits(data)) { return new PacketAODV_RREP(data); } if (PacketAODV_RERR.dataFits(data)) { return new PacketAODV_RERR(data); } if (ForwardedPacketUnknown.dataFits(data)) { return new ForwardedPacketUnknown(data); } if (AckPacket.dataFits(data)) { return new AckPacket(data); } return new PacketUnknown(data); } public void closePlugin() { if (radioMediumObserver != null) { radioMedium.deleteRadioMediumObserver(radioMediumObserver); } } public Collection<Element> getConfigXML() { return null; } public boolean setConfigXML(Collection<Element> configXML, boolean visAvailable) { return true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -