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