DatagramPacket.java revision f33eae7e84eb6d3b0f4e86b59605bb3de73009f3
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 Projectimport org.apache.harmony.luni.util.Msg; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class represents a datagram packet which contains data either to be sent 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or received through a {@code DatagramSocket}. It holds additional information 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * such as its source or destination host. 26f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see DatagramSocket 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class DatagramPacket { 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson /** 34f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Length of the data to be sent or size of data that was received via 35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * DatagramSocket#receive() method call. 36f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson /** 40f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Size of internal buffer that is used to store received data. Should be 41f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * greater or equal to "length" field. 42f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 43f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson int capacity; 44f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress address; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = -1; // The default port number is -1 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int offset = 0; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to receive data up to 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code length} bytes. 55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array to store the read characters. 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data buffer. 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int length) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to receive data up to 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code length} bytes with a specified buffer offset. 68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array to store the read characters. 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the byte array where the bytes is written. 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setData(data, offset, length); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes from the byte array position {@code offset} are sent. 86f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of {@code data} where to read from. 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length, 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress host, int aPort) { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setPort(aPort); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = host; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes are sent. 110f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int length, InetAddress host, int port) { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length, host, port); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the sender or destination IP address of this datagram packet. 126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the address from where the datagram was received or to which it 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is sent. 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized InetAddress getAddress() { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return address; 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the data of this datagram packet. 136f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the received data or the data to be sent. 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized byte[] getData() { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return data; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the length of the data stored in this datagram packet. 145f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the length of the received data or the data to be sent. 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getLength() { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return length; 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the offset of the data stored in this datagram packet. 154f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the position of the received data or the data to be sent. 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getOffset() { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return offset; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the port number of the target or sender host of this datagram 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet. 164f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the port number of the origin or target host. 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getPort() { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return port; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the IP address of the target host. 173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param addr 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address. 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setAddress(InetAddress addr) { 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = addr; 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. 183f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to store the data. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param anOffset 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer offset where the data is stored. 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aLength 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data to be sent or the length of buffer to 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * store the received data. 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setData(byte[] buf, int anOffset, int aLength) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > anOffset || anOffset > buf.length || 0 > aLength 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || aLength > buf.length - anOffset) { 195f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Msg.getString("K002f")); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project data = buf; 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = anOffset; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = aLength; 200f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = aLength; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. The length of the datagram 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet is set to the buffer length. 206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to store the data. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setData(byte[] buf) { 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = buf.length; // This will check for null 212f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = buf.length; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project data = buf; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = 0; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 21855392539fea537abfb6581b474918f9d611fba27Jesse Wilson * Gets the current capacity value. 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 22055392539fea537abfb6581b474918f9d611fba27Jesse Wilson * @return the current capacity value 22155392539fea537abfb6581b474918f9d611fba27Jesse Wilson */ 22255392539fea537abfb6581b474918f9d611fba27Jesse Wilson synchronized int getCapacity() { 22355392539fea537abfb6581b474918f9d611fba27Jesse Wilson return capacity; 22455392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 22555392539fea537abfb6581b474918f9d611fba27Jesse Wilson 22655392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the length of the datagram packet. This length plus the offset must 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be lesser than or equal to the buffer size. 229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param len 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of this datagram packet. 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setLength(int len) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > len || offset + len > data.length) { 235f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Msg.getString("K002f")); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = len; 238f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson capacity = len; 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 24255392539fea537abfb6581b474918f9d611fba27Jesse Wilson * An alternative to {@link #setLength(int)}, that doesn't reset the {@link #capacity} 24355392539fea537abfb6581b474918f9d611fba27Jesse Wilson * field. 244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 24555392539fea537abfb6581b474918f9d611fba27Jesse Wilson * @param len the length of this datagram packet 24655392539fea537abfb6581b474918f9d611fba27Jesse Wilson */ 24755392539fea537abfb6581b474918f9d611fba27Jesse Wilson synchronized void setLengthOnly(int len) { 24855392539fea537abfb6581b474918f9d611fba27Jesse Wilson if (0 > len || offset + len > data.length) { 249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Msg.getString("K002f")); 25055392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 25155392539fea537abfb6581b474918f9d611fba27Jesse Wilson length = len; 25255392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 25355392539fea537abfb6581b474918f9d611fba27Jesse Wilson 25455392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the port number of the target host of this datagram packet. 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host port number. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setPort(int aPort) { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (aPort < 0 || aPort > 65535) { 262f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Msg.getString("K0325", aPort)); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = aPort; 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 272f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 282f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson public DatagramPacket(byte[] data, int length, SocketAddress sockAddr) 283f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson throws SocketException { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 293f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the data. 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length, 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress sockAddr) throws SocketException { 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the host address and the port to which this datagram packet is sent 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as a {@code SocketAddress} object. 314f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SocketAddress of the target host. 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized SocketAddress getSocketAddress() { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new InetSocketAddress(getAddress(), getPort()); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code SocketAddress} for this datagram packet. 323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SocketAddress of the target host. 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setSocketAddress(SocketAddress sockAddr) { 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(sockAddr instanceof InetSocketAddress)) { 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(Msg.getString( 330f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "K0316", sockAddr == null ? null : sockAddr.getClass())); 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress inetAddr = (InetSocketAddress) sockAddr; 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = inetAddr.getPort(); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = inetAddr.getAddress(); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 337