DatagramPacket.java revision 06a62bfda6aa4919d92a505ede4c8cd247fe15ba
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class represents a datagram packet which contains data either to be sent 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or received through a {@code DatagramSocket}. It holds additional information 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * such as its source or destination host. 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see DatagramSocket 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class DatagramPacket { 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson /** 32f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Length of the data to be sent or size of data that was received via 33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * DatagramSocket#receive() method call. 34f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson /** 38f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Size of internal buffer that is used to store received data. Should be 39f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * greater or equal to "length" field. 40f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 41f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson int capacity; 42f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress address; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = -1; // The default port number is -1 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int offset = 0; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to receive data up to 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code length} bytes. 53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array to store the read characters. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data buffer. 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int length) { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to receive data up to 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code length} bytes with a specified buffer offset. 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array to store the read characters. 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the byte array where the bytes is written. 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length) { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setData(data, offset, length); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes from the byte array position {@code offset} are sent. 84f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of {@code data} where to read from. 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length, 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress host, int aPort) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setPort(aPort); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = host; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes are sent. 108f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int length, InetAddress host, int port) { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length, host, port); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the sender or destination IP address of this datagram packet. 124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the address from where the datagram was received or to which it 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is sent. 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized InetAddress getAddress() { 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return address; 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the data of this datagram packet. 134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the received data or the data to be sent. 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized byte[] getData() { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return data; 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the length of the data stored in this datagram packet. 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the length of the received data or the data to be sent. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getLength() { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return length; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the offset of the data stored in this datagram packet. 152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the position of the received data or the data to be sent. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getOffset() { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return offset; 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the port number of the target or sender host of this datagram 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet. 162f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the port number of the origin or target host. 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getPort() { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return port; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the IP address of the target host. 171f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param addr 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address. 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setAddress(InetAddress addr) { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = addr; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to store the data. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param anOffset 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer offset where the data is stored. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aLength 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data to be sent or the length of buffer to 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * store the received data. 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setData(byte[] buf, int anOffset, int aLength) { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > anOffset || anOffset > buf.length || 0 > aLength 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || aLength > buf.length - anOffset) { 19306a62bfda6aa4919d92a505ede4c8cd247fe15baElliott Hughes throw new IllegalArgumentException(); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project data = buf; 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = anOffset; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = aLength; 198f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = aLength; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. The length of the datagram 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet is set to the buffer length. 204f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to store the data. 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setData(byte[] buf) { 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = buf.length; // This will check for null 210f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = buf.length; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project data = buf; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = 0; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 21655392539fea537abfb6581b474918f9d611fba27Jesse Wilson * Gets the current capacity value. 217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 21855392539fea537abfb6581b474918f9d611fba27Jesse Wilson * @return the current capacity value 21955392539fea537abfb6581b474918f9d611fba27Jesse Wilson */ 22055392539fea537abfb6581b474918f9d611fba27Jesse Wilson synchronized int getCapacity() { 22155392539fea537abfb6581b474918f9d611fba27Jesse Wilson return capacity; 22255392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 22355392539fea537abfb6581b474918f9d611fba27Jesse Wilson 22455392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the length of the datagram packet. This length plus the offset must 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be lesser than or equal to the buffer size. 227f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param len 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of this datagram packet. 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setLength(int len) { 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > len || offset + len > data.length) { 233b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IndexOutOfBoundsException(); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = len; 236f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = len; 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 24055392539fea537abfb6581b474918f9d611fba27Jesse Wilson * An alternative to {@link #setLength(int)}, that doesn't reset the {@link #capacity} 24155392539fea537abfb6581b474918f9d611fba27Jesse Wilson * field. 242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 24355392539fea537abfb6581b474918f9d611fba27Jesse Wilson * @param len the length of this datagram packet 24455392539fea537abfb6581b474918f9d611fba27Jesse Wilson */ 24555392539fea537abfb6581b474918f9d611fba27Jesse Wilson synchronized void setLengthOnly(int len) { 24655392539fea537abfb6581b474918f9d611fba27Jesse Wilson if (0 > len || offset + len > data.length) { 247b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IndexOutOfBoundsException(); 24855392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 24955392539fea537abfb6581b474918f9d611fba27Jesse Wilson length = len; 25055392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 25155392539fea537abfb6581b474918f9d611fba27Jesse Wilson 25255392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the port number of the target host of this datagram packet. 254f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host port number. 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setPort(int aPort) { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (aPort < 0 || aPort > 65535) { 260b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IllegalArgumentException("Port out of range: " + aPort); 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = aPort; 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 280f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson public DatagramPacket(byte[] data, int length, SocketAddress sockAddr) 281f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson throws SocketException { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the data. 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length, 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress sockAddr) throws SocketException { 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the host address and the port to which this datagram packet is sent 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as a {@code SocketAddress} object. 312f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SocketAddress of the target host. 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized SocketAddress getSocketAddress() { 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new InetSocketAddress(getAddress(), getPort()); 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code SocketAddress} for this datagram packet. 321f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SocketAddress of the target host. 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setSocketAddress(SocketAddress sockAddr) { 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(sockAddr instanceof InetSocketAddress)) { 327b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IllegalArgumentException("Socket address not an InetSocketAddress: " + 328b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes (sockAddr == null ? null : sockAddr.getClass())); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress inetAddr = (InetSocketAddress) sockAddr; 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = inetAddr.getPort(); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = inetAddr.getAddress(); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 335