package com.limegroup.gnutella.messages.vendor;
import com.limegroup.gnutella.messages.BadGGEPBlockException;
import com.limegroup.gnutella.messages.BadPacketException;
import com.limegroup.gnutella.messages.GGEP;
import com.limegroup.gnutella.util.DataUtils;
public final class UpdateRequest extends VendorMessage {
public static final int VERSION = 1;
static final String COMPRESSED_UPDATE_KEY = "C";
static final String UNCOMPRESSED_UPDATE_KEY = "U";
private GGEP _ggep;
private boolean parsed;
/**
* Constructs a new SimppRequest from network data.
*/
UpdateRequest(byte[] guid, byte ttl, byte hops, int version,
byte[] payload) throws BadPacketException {
super(guid, ttl, hops, F_LIME_VENDOR_ID, F_UPDATE_REQ, version, payload);
}
public UpdateRequest() {
super(F_LIME_VENDOR_ID, F_UPDATE_REQ, VERSION, DataUtils.EMPTY_BYTE_ARRAY);
}
public int getVersion() {
return super.getVersion();
}
public String toString() {
return "{UpdateRequest:"+super.toString()+"}";
}
/**
* @return the GGEP block carried in this request, if any.
*/
public boolean hasGGEP() {
if (_ggep == null && !parsed) {
_ggep = parseGGEP();
parsed = true;
}
return _ggep != null;
}
private GGEP parseGGEP() {
byte [] payload = getPayload();
if (payload == null || payload.length == 0)
return null;
try {
return new GGEP(payload, 0, null);
} catch (BadGGEPBlockException bad) {
return null;
}
}
public boolean requestsCompressed() {
if (!hasGGEP())
return false;
return _ggep.hasKey(COMPRESSED_UPDATE_KEY);
}
}