1 /* 2 * Created on Jan 19, 2007 3 * Created by Paul Gardner 4 * Copyright (C) Azureus Software, Inc, All Rights Reserved. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 * 18 */ 19 20 21 package com.aelitis.azureus.core.peermanager.messaging.azureus; 22 23 import java.util.HashMap; 24 import java.util.Map; 25 26 import org.gudy.azureus2.core3.util.DirectByteBuffer; 27 28 import com.aelitis.azureus.core.peermanager.messaging.Message; 29 import com.aelitis.azureus.core.peermanager.messaging.MessageException; 30 import com.aelitis.azureus.core.peermanager.messaging.MessagingUtil; 31 32 public class 33 AZBadPiece 34 implements AZMessage 35 { 36 private final byte version; 37 private DirectByteBuffer buffer = null; 38 39 private int piece_number; 40 41 public AZBadPiece( int _piece_number, byte _version )42 AZBadPiece( 43 int _piece_number, 44 byte _version ) 45 { 46 piece_number = _piece_number; 47 version = _version; 48 } 49 50 public String getID()51 getID() 52 { 53 return( AZMessage.ID_AZ_BAD_PIECE ); 54 } 55 56 public byte[] getIDBytes()57 getIDBytes() 58 { 59 return( AZMessage.ID_AZ_BAD_PIECE_BYTES ); 60 } 61 62 public String getFeatureID()63 getFeatureID() 64 { 65 return( AZMessage.AZ_FEATURE_ID ); 66 } 67 68 public int getFeatureSubID()69 getFeatureSubID() 70 { 71 return( AZMessage.SUBID_ID_AZ_BAD_PIECE ); 72 } 73 74 public int getType()75 getType() 76 { 77 return( Message.TYPE_PROTOCOL_PAYLOAD ); 78 } 79 getVersion()80 public byte getVersion() { return version; }; 81 82 public String getDescription()83 getDescription() 84 { 85 86 return( getID() + " " + piece_number ); 87 } 88 89 public int getPieceNumber()90 getPieceNumber() 91 { 92 return( piece_number ); 93 } 94 95 public DirectByteBuffer[] getData()96 getData() 97 { 98 if ( buffer == null ){ 99 100 Map map = new HashMap(); 101 102 map.put( "piece", new Long( piece_number )); 103 104 buffer = MessagingUtil.convertPayloadToBencodedByteStream( map, DirectByteBuffer.AL_MSG ); 105 } 106 107 return new DirectByteBuffer[]{ buffer }; 108 } 109 110 public Message deserialize( DirectByteBuffer data, byte version )111 deserialize( 112 DirectByteBuffer data, 113 byte version ) 114 115 throws MessageException 116 { 117 Map payload = MessagingUtil.convertBencodedByteStreamToPayload( data, 1, getID() ); 118 119 int piece_number = ((Long)payload.get( "piece")).intValue(); 120 121 122 AZBadPiece message = new AZBadPiece( piece_number, version ); 123 124 return( message ); 125 } 126 127 public void destroy()128 destroy() 129 { 130 if ( buffer != null ){ 131 132 buffer.returnToPool(); 133 } 134 } 135 } 136