package lbms.plugins.mldht.kad.messages; import java.io.IOException; import java.util.HashMap; import java.util.Map; import lbms.plugins.mldht.kad.DHT; import lbms.plugins.mldht.kad.DHTConstants; import lbms.plugins.mldht.kad.Key; import lbms.plugins.mldht.kad.DHT.DHTtype; import org.gudy.azureus2.core3.util.BEncoder; /** * @author Damokles * */ public class FindNodeResponse extends MessageBase { protected byte[] nodes; protected byte[] nodes6; /** * @param mtid * @param id * @param nodes */ public FindNodeResponse (byte[] mtid, Key id, byte[] nodes, byte[] nodes6) { super(mtid, Method.FIND_NODE, Type.RSP_MSG, id); this.nodes = nodes; this.nodes6 = nodes6; } /* (non-Javadoc) * @see lbms.plugins.mldht.kad.messages.MessageBase#apply(lbms.plugins.mldht.kad.DHT) */ @Override public void apply (DHT dh_table) { dh_table.response(this); } /* (non-Javadoc) * @see lbms.plugins.mldht.kad.messages.MessageBase#encode() */ @Override public byte[] encode () throws IOException { Map<String, Object> base = new HashMap<String, Object>(); Map<String, Object> inner = new HashMap<String, Object>(); base.put(DHTConstants.RSP, inner); inner.put("id", id.getHash()); if(nodes != null) inner.put("nodes", nodes); if(nodes6 != null) inner.put("nodes6", nodes6); base.put(DHTConstants.TID, mtid); base.put(DHTConstants.TYP, DHTConstants.RSP); base.put(DHTConstants.VER, DHTConstants.getVersion()); return BEncoder.encode(base); } public byte[] getNodes(DHTtype type) { if(type == DHTtype.IPV4_DHT) return nodes; if(type == DHTtype.IPV6_DHT) return nodes6; return null; } /** * @return the nodes */ public byte[] getNodes () { return nodes; } /** * @return the nodes */ public byte[] getNodes6 () { return nodes6; } public String toString() { return super.toString() + (nodes != null ? "contains: "+ (nodes.length/DHTtype.IPV4_DHT.NODES_ENTRY_LENGTH) + " nodes" : "") + (nodes6 != null ? "contains: "+ (nodes6.length/DHTtype.IPV6_DHT.NODES_ENTRY_LENGTH) + " nodes6" : ""); } }