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