151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 3fec24735b29faf2a81dbbc35a3a5f9630a597259Yi Kong * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.net; 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This class represents a datagram packet. 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Datagram packets are used to implement a connectionless packet 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * delivery service. Each message is routed from one machine to 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * another based solely on information contained within that packet. 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Multiple packets sent from one machine to another might be routed 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * differently, and might arrive in any order. Packet delivery is 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * not guaranteed. 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Pavani Diwanji 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Benjamin Renaud 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.0 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic final 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiclass DatagramPacket { 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 462265a6886977048d6b45399bc043e1acafb6b26aVictor Chang // BEGIN Android-removed: Android doesn't need to load native net library 472265a6886977048d6b45399bc043e1acafb6b26aVictor Chang /** 482265a6886977048d6b45399bc043e1acafb6b26aVictor Chang * Perform class initialization 492265a6886977048d6b45399bc043e1acafb6b26aVictor Chang * 502265a6886977048d6b45399bc043e1acafb6b26aVictor Chang static { 512265a6886977048d6b45399bc043e1acafb6b26aVictor Chang java.security.AccessController.doPrivileged( 522265a6886977048d6b45399bc043e1acafb6b26aVictor Chang new java.security.PrivilegedAction<Void>() { 532265a6886977048d6b45399bc043e1acafb6b26aVictor Chang public Void run() { 542265a6886977048d6b45399bc043e1acafb6b26aVictor Chang System.loadLibrary("net"); 552265a6886977048d6b45399bc043e1acafb6b26aVictor Chang return null; 562265a6886977048d6b45399bc043e1acafb6b26aVictor Chang } 572265a6886977048d6b45399bc043e1acafb6b26aVictor Chang }); 582265a6886977048d6b45399bc043e1acafb6b26aVictor Chang init(); 592265a6886977048d6b45399bc043e1acafb6b26aVictor Chang } 602265a6886977048d6b45399bc043e1acafb6b26aVictor Chang */ 612265a6886977048d6b45399bc043e1acafb6b26aVictor Chang // END Android-removed: init method has been removed 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The fields of this class are package-private since DatagramSocketImpl 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * classes needs to access them. 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski byte[] buf; 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int offset; 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int length; 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int bufLength; 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski InetAddress address; 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int port; 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 753a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * Constructs a {@code DatagramPacket} for receiving packets of 763a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * length {@code length}, specifying an offset into the buffer. 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 783a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * The {@code length} argument must be less than or equal to 793a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code buf.length}. 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf buffer for holding the incoming datagram. 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param offset the offset for the buffer 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the number of bytes to read. 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public DatagramPacket(byte buf[], int offset, int length) { 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setData(buf, offset, length); 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.address = null; 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.port = -1; 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 943a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * Constructs a {@code DatagramPacket} for receiving packets of 953a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * length {@code length}. 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 973a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * The {@code length} argument must be less than or equal to 983a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code buf.length}. 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf buffer for holding the incoming datagram. 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the number of bytes to read. 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public DatagramPacket(byte buf[], int length) { 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this (buf, 0, length); 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a datagram packet for sending packets of length 1093a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} with offset {@code ioffset}to the 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified port number on the specified host. The 1113a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} argument must be less than or equal to 1123a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code buf.length}. 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the packet data. 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param offset the packet data offset. 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the packet data length. 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param address the destination address. 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param port the destination port number. 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.net.InetAddress 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public DatagramPacket(byte buf[], int offset, int length, 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski InetAddress address, int port) { 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setData(buf, offset, length); 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setAddress(address); 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setPort(port); 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 130ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong // Android-changed: Added Android-specific notes regarding the exception signature change. 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a datagram packet for sending packets of length 1333a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} with offset {@code ioffset}to the 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified port number on the specified host. The 1353a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} argument must be less than or equal to 1363a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code buf.length}. 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 138ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * <p> 139ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * <em>Android note</em>: Up to and including API 25 this method declared that a SocketException 140ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * can be thrown, although the exception is never thrown. Code compiled against a newer SDK does 141ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * not need to catch the exception and will be binary compatible with older versions of Android. 142ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the packet data. 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param offset the packet data offset. 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the packet data length. 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param address the destination socket address. 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalArgumentException if address type is not supported 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.net.InetAddress 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 152fec24735b29faf2a81dbbc35a3a5f9630a597259Yi Kong public DatagramPacket(byte buf[], int offset, int length, SocketAddress address) { 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setData(buf, offset, length); 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setSocketAddress(address); 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 157ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong // Android-changed: Added Android-specific notes regarding the exception signature change. 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a datagram packet for sending packets of length 1603a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} to the specified port number on the specified 1613a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * host. The {@code length} argument must be less than or equal 1623a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * to {@code buf.length}. 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 164ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * <p> 165ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * <em>Android note</em>: Up to and including API 25 this method declared that a SocketException 166ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * can be thrown, although the exception is never thrown. Code compiled against a newer SDK does 167ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * not need to catch the exception and will be binary compatible with older versions of Android. 168ae1d5be36f93c54f74066c301bc65fb0904adde7Yi Kong * 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the packet data. 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the packet length. 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param address the destination address. 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param port the destination port number. 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.net.InetAddress 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public DatagramPacket(byte buf[], int length, 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski InetAddress address, int port) { 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(buf, 0, length, address, port); 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a datagram packet for sending packets of length 1823a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * {@code length} to the specified port number on the specified 1833a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * host. The {@code length} argument must be less than or equal 1843a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * to {@code buf.length}. 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the packet data. 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the packet length. 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param address the destination address. 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalArgumentException if address type is not supported 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.net.InetAddress 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 193fec24735b29faf2a81dbbc35a3a5f9630a597259Yi Kong public DatagramPacket(byte buf[], int length, SocketAddress address) { 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(buf, 0, length, address); 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the IP address of the machine to which this datagram is being 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * sent or from which the datagram was received. 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the IP address of the machine to which this datagram is being 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * sent or from which the datagram was received. 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.net.InetAddress 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setAddress(java.net.InetAddress) 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized InetAddress getAddress() { 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return address; 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the port number on the remote host to which this datagram is 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * being sent or from which the datagram was received. 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the port number on the remote host to which this datagram is 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * being sent or from which the datagram was received. 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setPort(int) 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized int getPort() { 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return port; 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the data buffer. The data received or the data to be sent 2243a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * starts from the {@code offset} in the buffer, 2253a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * and runs for {@code length} long. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the buffer used to receive or send data 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setData(byte[], int, int) 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized byte[] getData() { 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return buf; 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the offset of the data to be sent or the offset of the 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data received. 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the offset of the data to be sent or the offset of the 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data received. 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized int getOffset() { 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return offset; 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the length of the data to be sent or the length of the 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data received. 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the length of the data to be sent or the length of the 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data received. 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setLength(int) 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized int getLength() { 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return length; 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the data buffer for this packet. This sets the 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * data, length and offset of the packet. 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the buffer to set for this packet 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param offset the offset into the data 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the length of the data 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and/or the length of the buffer used to receive data 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if the argument is null 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getData 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getOffset 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getLength 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setData(byte[] buf, int offset, int length) { 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* this will check to see if buf is null */ 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (length < 0 || offset < 0 || 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (length + offset) < 0 || 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ((length + offset) > buf.length)) { 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("illegal length or offset"); 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.buf = buf; 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.length = length; 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bufLength = length; 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.offset = offset; 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the IP address of the machine to which this datagram 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is being sent. 2943a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * @param iaddr the {@code InetAddress} 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.1 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getAddress() 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setAddress(InetAddress iaddr) { 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski address = iaddr; 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3026975f84c2ed72e1e26d20190b6f318718c849008Tobias Thierer // BEGIN Android-changed 303f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski /** 304f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski * Sets 'length' without changing 'userSuppliedLength', after receiving a packet. 305f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski * @hide for IoBridge 306f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski */ 307f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski public void setReceivedLength(int length) { 308f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski this.length = length; 309f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski } 3106975f84c2ed72e1e26d20190b6f318718c849008Tobias Thierer // END Android-changed 311f7ab2bc37debba91864bfec6572a3e7bbe994c58Piotr Jastrzebski 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the port number on the remote host to which this datagram 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is being sent. 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param iport the port number 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.1 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getPort() 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setPort(int iport) { 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (iport < 0 || iport > 0xFFFF) { 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("Port out of range:"+ iport); 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski port = iport; 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the SocketAddress (usually IP address + port number) of the remote 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * host to which this datagram is being sent. 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3303a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * @param address the {@code SocketAddress} 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalArgumentException if address is null or is a 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SocketAddress subclass not supported by this socket 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 33551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getSocketAddress 33651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setSocketAddress(SocketAddress address) { 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (address == null || !(address instanceof InetSocketAddress)) 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("unsupported address type"); 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski InetSocketAddress addr = (InetSocketAddress) address; 34151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (addr.isUnresolved()) 34251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("unresolved address"); 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setAddress(addr.getAddress()); 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski setPort(addr.getPort()); 34551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Gets the SocketAddress (usually IP address + port number) of the remote 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * host that this packet is being sent to or is coming from. 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3513a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * @return the {@code SocketAddress} 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setSocketAddress 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized SocketAddress getSocketAddress() { 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new InetSocketAddress(getAddress(), getPort()); 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the data buffer for this packet. With the offset of 36151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this DatagramPacket set to 0, and the length set to 3623a6411ec91b24e73f36301d0075bc7b052894ae9Yi Kong * the length of {@code buf}. 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf the buffer to set for this packet. 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if the argument is null. 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 36851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getLength 36951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getData 37051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 37151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.1 37251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setData(byte[] buf) { 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (buf == null) { 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new NullPointerException("null packet buffer"); 37651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.buf = buf; 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.offset = 0; 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.length = buf.length; 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bufLength = buf.length; 38151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 38251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the length for this packet. The length of the packet is 38551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the number of bytes from the packet's data buffer that will be 38651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * sent, or the number of bytes of the packet's data buffer that 38751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * will be used for receiving data. The length must be lesser or 38851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * equal to the offset plus the length of the packet's buffer. 38951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 39051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param length the length to set for this packet. 39151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 39251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IllegalArgumentException if the length is negative 39351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of if the length is greater than the packet's data buffer 39451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * length. 39551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 39651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #getLength 39751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #setData 39851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 39951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.1 40051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 40151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setLength(int length) { 40251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ((length + offset) > buf.length || length < 0 || 40351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (length + offset) < 0) { 40451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("illegal length"); 40551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.length = length; 40751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bufLength = this.length; 40851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 410ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong // Android-removed: JNI has been removed 411ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong // /** 412ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong // * Perform class load-time initializations. 413ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong // */ 414ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong // private native static void init(); 41551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 416