FileDocCategorySizeDatePackage
BTLTExtensionHandshake.javaAPI DocAzureus 3.0.3.45655Wed Sep 05 09:29:32 BST 2007com.aelitis.azureus.core.peermanager.messaging.bittorrent

BTLTExtensionHandshake

public class BTLTExtensionHandshake extends Object implements BTMessage
author
Allan Crooks

Fields Summary
private Map
data_dict
private byte[]
bencoded_data
private String
bencoded_string
private String
description
private byte
version
private org.gudy.azureus2.core3.util.DirectByteBuffer[]
buffer_array
Constructors Summary
public BTLTExtensionHandshake(Map data_dict, byte version)

    	this.data_dict = (data_dict == null) ? Collections.EMPTY_MAP : data_dict;
    	this.version = version;
    
Methods Summary
public com.aelitis.azureus.core.peermanager.messaging.Messagedeserialize(org.gudy.azureus2.core3.util.DirectByteBuffer data, byte version)

		if (data == null) {
			throw new MessageException( "[" +getID() + "] decode error: data == null");
		}
		if (data.remaining(DirectByteBuffer.SS_MSG ) < 1) {
			throw new MessageException( "[" +getID() + "] decode error: less than 1 byte in payload");
		}
		byte message_type = data.get(DirectByteBuffer.SS_MSG);
		if (message_type != 0) {
			throw new MessageException( "[" +getID() + "] decode error: no support for extension message ID " + message_type);
		}
		
		// Try decoding the data now.
		Map res_data_dict = MessagingUtil.convertBencodedByteStreamToPayload(data, 1, getID());
		
		BTLTExtensionHandshake result = new BTLTExtensionHandshake(res_data_dict, this.version);
		return result;
	
public voiddestroy()

		this.data_dict = null;
		this.bencoded_data = null;
		this.description = null;
		if (buffer_array != null) {
			buffer_array[0].returnToPool();
		}
		this.buffer_array = null;
	
public byte[]getBencodedData()

		if (this.bencoded_data == null) {
			try {this.bencoded_data = BEncoder.encode(this.data_dict);}
			catch (java.io.IOException ioe) {
				this.bencoded_data = new byte[0];
				Debug.printStackTrace(ioe);
			}
		}
		return this.bencoded_data;
	
public java.lang.StringgetBencodedString()

		if (this.bencoded_string == null) {
			try {
				this.bencoded_string = new String(this.getBencodedData(), Constants.BYTE_ENCODING);
			}
			catch (java.io.UnsupportedEncodingException uee) {
				this.bencoded_string = "";
				Debug.printStackTrace(uee);
			}
		}
		return this.bencoded_string;
	
public java.lang.StringgetClientName()

		byte[] client_name = (byte[])data_dict.get("v");
		if (client_name == null) {return null;}
		try {return new String(client_name, Constants.DEFAULT_ENCODING);}
		catch (java.io.IOException ioe) {return null;}
	
public org.gudy.azureus2.core3.util.DirectByteBuffer[]getData()

		if (buffer_array == null) {
			buffer_array = new DirectByteBuffer[1];
			DirectByteBuffer buffer = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_LT_EXT_HANDSHAKE, getBencodedData().length + 1);
			buffer_array[0] = buffer;
			
			buffer.put(DirectByteBuffer.SS_MSG, (byte)0); // Indicate it is a handshake, not any extension protocol.
			buffer.put(DirectByteBuffer.SS_MSG, getBencodedData());
			buffer.flip(DirectByteBuffer.SS_MSG);
		}
		return buffer_array;
	
public java.util.MapgetDataMap()

		return this.data_dict;
	
public java.lang.StringgetDescription()

		if (description == null) {
			description = BTMessage.ID_BT_LT_EXTENSION_HANDSHAKE + ": " + this.getBencodedString();
		}
		return description;
	
public java.lang.StringgetFeatureID()

return BTMessage.BT_FEATURE_ID;
public intgetFeatureSubID()

return BTMessage.SUBID_BT_LT_EXTENSION_HANDSHAKE;
public java.lang.StringgetID()

return BTMessage.ID_BT_LT_EXTENSION_HANDSHAKE;
public byte[]getIDBytes()

return BTMessage.ID_BT_LT_EXTENSION_HANDSHAKE_BYTES;
public intgetTCPListeningPort()

		Long port = (Long)data_dict.get("p");
		if(port == null)
			return 0;
		int val = port.intValue();
		if(val <= 65535 && val > 0)
			return val;
		return 0;
	
public intgetType()

return Message.TYPE_PROTOCOL_PAYLOAD;
public bytegetVersion()

return this.version;
public java.lang.BooleanisCryptoRequested()

		Long crypto = (Long)data_dict.get("e");
		if(crypto == null)
			return null;
		return Boolean.valueOf(crypto.longValue() == 1);