/* * Created on 15 Jan 2008 * Created by Allan Crooks * Copyright (C) 2007 Aelitis, All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * AELITIS, SAS au capital de 46,603.30 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package com.aelitis.azureus.core.peermanager.messaging.bittorrent; import org.gudy.azureus2.core3.util.DirectByteBuffer; import org.gudy.azureus2.core3.util.DirectByteBufferPool; import com.aelitis.azureus.core.peermanager.messaging.Message; import com.aelitis.azureus.core.peermanager.messaging.MessageException; /** * @author Allan Crooks * */ public class BTDHTPort implements BTMessage { private int port; private DirectByteBuffer buffer; public BTDHTPort(int port) { this.port = port; } public Message deserialize(DirectByteBuffer data, byte version) throws MessageException { if (data == null) throw new MessageException("[" +getID() + "] decode error: data == null"); if (data.remaining(DirectByteBuffer.SS_MSG) != 2) throw new MessageException("[" +getID() + "] decode error: payload.remaining[" +data.remaining( DirectByteBuffer.SS_MSG )+ "] != 2"); short s_port = data.getShort(DirectByteBuffer.SS_MSG); data.returnToPool(); return new BTDHTPort(0xFFFF & s_port); } public DirectByteBuffer[] getData() { if (buffer == null) { buffer = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_BT_DHT_PORT, 2); short s_port = (short)port; buffer.put(DirectByteBuffer.SS_MSG, (byte)(s_port >> 8)); buffer.put(DirectByteBuffer.SS_MSG, (byte)(s_port & 0xff)); buffer.flip(DirectByteBuffer.SS_MSG); } return new DirectByteBuffer[] {buffer}; } public String getDescription() { return getID() + " (port " + port + ")"; } public void destroy() { if (buffer != null) {buffer.returnToPool();} } public String getFeatureID() {return BTMessage.BT_FEATURE_ID;} public int getFeatureSubID() {return BTMessage.SUBID_BT_DHT_PORT;} public String getID() {return BTMessage.ID_BT_DHT_PORT;} public byte[] getIDBytes() {return BTMessage.ID_BT_DHT_PORT_BYTES;} public int getType() {return Message.TYPE_PROTOCOL_PAYLOAD;} public byte getVersion() {return (byte)1;} public int getDHTPort() {return port;} }