1 /* 2 * $HeadURL: /cvsroot/insight/Insight/remote-protocol/src/com/mindtree/insight/remoteprotocol/PacketDataSizeOverLimitsException.java,v $ 3 * $Date: 2005/08/09 18:39:17 $ 4 * $Revision: 1.1 $ 5 * $Author: m1001025 $ 6 * 7 * Copyright (c) 2005 MindTree Consulting Ltd. 8 * 9 * This file is part of Insight Remote Protocol Library. 10 * 11 * Insight Remote Protocol Library is free software: you can redistribute it 12 * and/or modify it under the terms of the GNU General Public License as 13 * published by the Free Software Foundation, either version 3 of the License, 14 * or (at your option) any later version. 15 * 16 * Insight Remote Protocol Library is distributed in the hope that it will be 17 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 19 * Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License along with 22 * Insight Remote Protocol Library. If not, see <http://www.gnu.org/licenses/>. 23 */ 24 25 package com.mindtree.techworks.insight.remoteprotocol.spi; 26 27 import java.io.Serializable; 28 29 30 /** 31 * Represents a data packet sent to Insight. The packet concists of a header 32 * which in the Java world is the 33 * <code>{@link com.mindtree.techworks.insight.remoteprotocol.spi.PacketHeader PacketHeader}</code> 34 * class, and some content of the packet, which are represented by the 35 * subclasses of 36 * <code>{@link com.mindtree.techworks.insight.remoteprotocol.spi.PacketDataContent PacketDataContent}</code>. 37 * <p> 38 * The format of the data packet is described in the <code>PacketHeader</code> 39 * class. 40 * </p> 41 * 42 * @see com.mindtree.techworks.insight.remoteprotocol.spi.PacketHeader 43 * @see com.mindtree.techworks.insight.remoteprotocol.spi.PacketDataContent 44 * @author <a href="mailto:bindul_bhowmik@mindtree.com">Bindul Bhowmik</a> 45 * @version $Revision: 1.2 $ $Date: 2005/08/09 18:39:16 $ 46 */ 47 public class DataPacket implements Serializable { 48 49 // ------------------------------------------------------------------------- 50 // Class variables 51 // ------------------------------------------------------------------------- 52 53 /** 54 * Maximum number of bytes a packet should have. 55 */ 56 public static final int MAX_PACKET_SIZE = 5120; 57 58 /** 59 * The Serial Version UID of the class. 60 */ 61 private static final long serialVersionUID = 7180441160766839296L; 62 63 // ------------------------------------------------------------------------- 64 // Instance variables 65 // ------------------------------------------------------------------------- 66 67 /** 68 * The header of the packet. For a format of the header, see the 69 * PacketHeader class. 70 * 71 * @see PacketHeader 72 */ 73 private PacketHeader packetHeader; 74 75 /** 76 * The data content of the packet. 77 */ 78 private PacketDataContent packetDataContent; 79 80 // ------------------------------------------------------------------------- 81 // Constructors 82 // ------------------------------------------------------------------------- 83 84 /** 85 * Creates a DataPacket instance 86 * 87 * @param content The content of the packet 88 * @param header The header of the packet 89 */ 90 public DataPacket (PacketDataContent content, PacketHeader header) { 91 92 packetDataContent = content; 93 packetHeader = header; 94 recalculatePacketHeader(); 95 } 96 97 /** 98 * Creates an instance of DataPacket 99 */ 100 public DataPacket () { 101 102 // No Args Constructor 103 } 104 105 // ------------------------------------------------------------------------- 106 // Accessor Methods 107 // ------------------------------------------------------------------------- 108 109 /** 110 * Returns the content of the packet 111 * 112 * @return The <code>PacketDataContent</code> 113 */ 114 public PacketDataContent getPacketDataContent () { 115 116 return packetDataContent; 117 } 118 119 /** 120 * Sets the content of the packet 121 * 122 * @param packetDataContent The <code>PacketDataContent</code> to set 123 */ 124 public void setPacketDataContent (PacketDataContent packetDataContent) { 125 126 this.packetDataContent = packetDataContent; 127 } 128 129 /** 130 * Returns the packet's header 131 * 132 * @return The instance's <code>PacketHeader</code> 133 */ 134 public PacketHeader getPacketHeader () { 135 136 return packetHeader; 137 } 138 139 /** 140 * Sets the packet's header 141 * 142 * @param packetHeader The <code>PacketHeader</code> to set 143 */ 144 public void setPacketHeader (PacketHeader packetHeader) { 145 146 this.packetHeader = packetHeader; 147 } 148 149 /** 150 * Returns the entire packet as a <code>byte</code> array. 151 * @return The contents in this packet as a byte array. 152 */ 153 public byte[] getDataPacketAsByteArray() { 154 byte[] packetContents = new byte[packetHeader.getPacketHeaderLength() + packetDataContent.getLength()]; 155 System.arraycopy(packetHeader.getPacketHeaderAsByteArray(), 0, packetContents, 0, packetHeader.getPacketHeaderLength()); 156 157 if (packetDataContent.getLength() > 0) { 158 System.arraycopy(packetDataContent.getPacketData(), 0, packetContents, packetHeader.getPacketHeaderLength(), packetDataContent.getLength()); 159 } 160 161 return packetContents; 162 } 163 164 // ------------------------------------------------------------------------- 165 // Public Methods 166 // ------------------------------------------------------------------------- 167 168 /** 169 * Recalculates the packet's data relative content. In particular the 170 * following fields are recalculated and set: 171 * <ol> 172 * <li>DATA LENGTH</li> 173 * <li>HEADER CHECKSUM</li> 174 * </ol> 175 * 176 * @see PacketHeader#recalculateHeader(PacketDataContent) 177 */ 178 public void recalculatePacketHeader () { 179 180 this.packetHeader.recalculateHeader(this.packetDataContent); 181 } 182 183 }