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 org.gudy.azureus2.core3.util.BEncoder;
/**
* @author Damokles
*
*/
public class AnnounceRequest extends GetPeersRequest {
protected int port;
protected byte[] token;
/**
* @param id
* @param info_hash
* @param port
* @param token
*/
public AnnounceRequest (Key id, Key info_hash, int port, byte[] token) {
super(id, info_hash);
this.port = port;
this.token = token;
this.method = Method.ANNOUNCE_PEER;
}
/* (non-Javadoc)
* @see lbms.plugins.mldht.kad.messages.GetPeersRequest#apply(lbms.plugins.mldht.kad.DHT)
*/
@Override
public void apply (DHT dh_table) {
dh_table.announce(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.ARG, inner);
inner.put("id", id.getHash());
inner.put("info_hash", target.getHash());
inner.put("port", port);
inner.put("token", token);
base.put(DHTConstants.REQ, "announce_peer");
base.put(DHTConstants.TID, mtid);
base.put(DHTConstants.TYP, DHTConstants.REQ);
base.put(DHTConstants.VER, DHTConstants.getVersion());
return BEncoder.encode(base);
}
/**
* @return the token
*/
public byte[] getToken () {
return token;
}
}