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 29e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private 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 */ 35e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private int length; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson /** 38e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * The last user-supplied length (as opposed to a length set by simply receiving a packet). 39e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * This length (unlike 'length') is sticky, and survives until the user sets another length. 40e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * It's used to limit the amount of data that will be taken from future packets. 41f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 42e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private int userSuppliedLength; 43f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 44e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private InetAddress address; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private int port = -1; // The default port number is -1 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes private int offset = 0; 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 setData(data, offset, length); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes from the byte array position {@code offset} are sent. 83f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of {@code data} where to read from. 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 95e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes public DatagramPacket(byte[] data, int offset, int length, InetAddress host, int aPort) { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setPort(aPort); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = host; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the port 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code aPort} of the address {@code host}. The {@code length} must be 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * lesser than or equal to the size of {@code data}. The first {@code 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length} bytes are sent. 106f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a byte array which stores the characters to be sent. 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of data. 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address of the target host. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the target host. 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int length, InetAddress host, int port) { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length, host, port); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the sender or destination IP address of this datagram packet. 122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the address from where the datagram was received or to which it 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is sent. 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized InetAddress getAddress() { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return address; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the data of this datagram packet. 132f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the received data or the data to be sent. 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized byte[] getData() { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return data; 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the length of the data stored in this datagram packet. 141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the length of the received data or the data to be sent. 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getLength() { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return length; 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the offset of the data stored in this datagram packet. 150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the position of the received data or the data to be sent. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getOffset() { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return offset; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the port number of the target or sender host of this datagram 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet. 160f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the port number of the origin or target host. 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized int getPort() { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return port; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the IP address of the target host. 169f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param addr 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address. 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setAddress(InetAddress addr) { 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = addr; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 180a1603838fe9e865575c87982e32c6343740e464cElliott Hughes public synchronized void setData(byte[] data, int offset, int byteCount) { 181a1603838fe9e865575c87982e32c6343740e464cElliott Hughes if ((offset | byteCount) < 0 || offset > data.length || byteCount > data.length - offset) { 18206a62bfda6aa4919d92a505ede4c8cd247fe15baElliott Hughes throw new IllegalArgumentException(); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184a1603838fe9e865575c87982e32c6343740e464cElliott Hughes this.data = data; 185a1603838fe9e865575c87982e32c6343740e464cElliott Hughes this.offset = offset; 186a1603838fe9e865575c87982e32c6343740e464cElliott Hughes this.length = byteCount; 187e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes this.userSuppliedLength = byteCount; 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the data buffer for this datagram packet. The length of the datagram 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * packet is set to the buffer length. 193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to store the data. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setData(byte[] buf) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project length = buf.length; // This will check for null 199e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes userSuppliedLength = length; 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project data = buf; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = 0; 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the length of the datagram packet. This length plus the offset must 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be lesser than or equal to the buffer size. 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 208a1603838fe9e865575c87982e32c6343740e464cElliott Hughes * @param length 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of this datagram packet. 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 211a1603838fe9e865575c87982e32c6343740e464cElliott Hughes public synchronized void setLength(int length) { 212e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes if (length < 0 || offset + length > data.length) { 213e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes throw new IndexOutOfBoundsException("length=" + length + ", offset=" + offset + 214e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes ", buffer size=" + data.length); 215e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes } 216e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes this.length = length; 217e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes this.userSuppliedLength = length; 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * Resets 'length' to the last user-supplied length, ready to receive another packet. 222e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * @hide for PlainDatagramSocketImpl 22355392539fea537abfb6581b474918f9d611fba27Jesse Wilson */ 224e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes public void resetLengthForReceive() { 225e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes this.length = userSuppliedLength; 226e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes } 227e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes 228e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes /** 229e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * Sets 'length' without changing 'userSuppliedLength', after receiving a packet. 230e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes * @hide for IoBridge 231e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes */ 232e50d82455c813210a2d452070f45fd38d9903159Elliott Hughes public void setReceivedLength(int length) { 233a1603838fe9e865575c87982e32c6343740e464cElliott Hughes this.length = length; 23455392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 23555392539fea537abfb6581b474918f9d611fba27Jesse Wilson 23655392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the port number of the target host of this datagram packet. 238f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param aPort 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host port number. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setPort(int aPort) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (aPort < 0 || aPort > 65535) { 244b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IllegalArgumentException("Port out of range: " + aPort); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = aPort; 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 254f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 26470c145d9e9dd2a0244f813c217501a1b84189a43Elliott Hughes public DatagramPacket(byte[] data, int length, SocketAddress sockAddr) throws SocketException { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, 0, length); 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code DatagramPacket} object to send data to the 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * address {@code sockAddr}. The {@code length} must be lesser than or equal 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the size of {@code data}. The first {@code length} bytes of the data 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are sent. 274f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param data 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array to store the data. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the data. 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length of the data. 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target host address and port. 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SocketException 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error in the underlying protocol occurs. 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DatagramPacket(byte[] data, int offset, int length, 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress sockAddr) throws SocketException { 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(data, offset, length); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSocketAddress(sockAddr); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the host address and the port to which this datagram packet is sent 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as a {@code SocketAddress} object. 295f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SocketAddress of the target host. 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized SocketAddress getSocketAddress() { 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new InetSocketAddress(getAddress(), getPort()); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code SocketAddress} for this datagram packet. 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sockAddr 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SocketAddress of the target host. 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void setSocketAddress(SocketAddress sockAddr) { 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(sockAddr instanceof InetSocketAddress)) { 310b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IllegalArgumentException("Socket address not an InetSocketAddress: " + 311b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes (sockAddr == null ? null : sockAddr.getClass())); 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress inetAddr = (InetSocketAddress) sockAddr; 31470c145d9e9dd2a0244f813c217501a1b84189a43Elliott Hughes if (inetAddr.isUnresolved()) { 31570c145d9e9dd2a0244f813c217501a1b84189a43Elliott Hughes throw new IllegalArgumentException("Socket address unresolved: " + sockAddr); 31670c145d9e9dd2a0244f813c217501a1b84189a43Elliott Hughes } 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project port = inetAddr.getPort(); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project address = inetAddr.getAddress(); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 321