151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#ifndef NET_UTILS_H 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define NET_UTILS_H 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jvm.h" 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jni_util.h" 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "net_util_md.h" 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/************************************************************************ 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Macros and misc constants 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define MAX_PACKET_LEN 65536 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3938015e84ecc9ce8b0e0014276c6eb04c7d756c44Przemyslaw Szczepaniak#define IPv4 AF_INET 4038015e84ecc9ce8b0e0014276c6eb04c7d756c44Przemyslaw Szczepaniak#define IPv6 AF_INET6 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define NET_ERROR(env, ex, msg) \ 43e573e88e89daf5efb323719c54117c5a423eb245Yi Kong{ if (!(*env)->ExceptionOccurred(env)) JNU_ThrowByName(env, ex, msg); } 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/************************************************************************ 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Cached field IDs 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The naming convention for field IDs is 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <class abbrv>_<fieldName>ID 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * i.e. psi_timeoutID is PlainSocketImpl's timeout field's ID. 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jclass ia_class; 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID iac_addressID; 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID iac_familyID; 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID iac_hostNameID; 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ia_preferIPv6AddressID; 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5862e0b4793b755083e94aac458111ca347314adddYi Kong/** (Inet6Address accessors) 5962e0b4793b755083e94aac458111ca347314adddYi Kong * set_ methods return JNI_TRUE on success JNI_FALSE on error 6062e0b4793b755083e94aac458111ca347314adddYi Kong * get_ methods that return int/boolean, return -1 on error 6162e0b4793b755083e94aac458111ca347314adddYi Kong * get_ methods that return objects return NULL on error. 6262e0b4793b755083e94aac458111ca347314adddYi Kong */ 6362e0b4793b755083e94aac458111ca347314adddYi Kongextern jobject getInet6Address_scopeifname(JNIEnv *env, jobject ia6Obj); 6462e0b4793b755083e94aac458111ca347314adddYi Kongextern int setInet6Address_scopeifname(JNIEnv *env, jobject ia6Obj, jobject scopeifname); 6562e0b4793b755083e94aac458111ca347314adddYi Kongextern int getInet6Address_scopeid_set(JNIEnv *env, jobject ia6Obj); 6662e0b4793b755083e94aac458111ca347314adddYi Kongextern int getInet6Address_scopeid(JNIEnv *env, jobject ia6Obj); 6762e0b4793b755083e94aac458111ca347314adddYi Kongextern int setInet6Address_scopeid(JNIEnv *env, jobject ia6Obj, int scopeid); 6862e0b4793b755083e94aac458111ca347314adddYi Kongextern int getInet6Address_ipaddress(JNIEnv *env, jobject ia6Obj, char *dest); 6962e0b4793b755083e94aac458111ca347314adddYi Kongextern int setInet6Address_ipaddress(JNIEnv *env, jobject ia6Obj, char *address); 7062e0b4793b755083e94aac458111ca347314adddYi Kong 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address); 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern void setInetAddress_family(JNIEnv *env, jobject iaObj, int family); 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject h); 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern int getInetAddress_addr(JNIEnv *env, jobject iaObj); 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern int getInetAddress_family(JNIEnv *env, jobject iaObj); 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj); 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jclass ia4_class; 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jmethodID ia4_ctrID; 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* NetworkInterface fields */ 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jclass ni_class; 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ni_nameID; 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ni_indexID; 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ni_addrsID; 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ni_descID; 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jmethodID ni_ctrID; 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* PlainSocketImpl fields */ 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID psi_timeoutID; 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID psi_fdID; 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID psi_addressID; 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID psi_portID; 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID psi_localportID; 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 96ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong/* Android-removed: DatagramSocket moved away from JNI */ 97ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong#if 0 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* DatagramPacket fields */ 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_addressID; 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_portID; 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_bufID; 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_offsetID; 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_lengthID; 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID dp_bufLengthID; 105ba17b532f644b7caed6d08671d492edfee8b6f37Yi Kong#endif 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* Inet6Address fields */ 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jclass ia6_class; 10962e0b4793b755083e94aac458111ca347314adddYi Kongextern jfieldID ia6_holder6ID; 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ia6_ipaddressID; 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ia6_scopeidID; 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ia6_scopeidsetID; 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jfieldID ia6_scopeifnameID; 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiextern jmethodID ia6_ctrID; 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/************************************************************************ 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Utilities 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT void JNICALL NET_ThrowNew(JNIEnv *env, int errorNum, char *msg); 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint NET_GetError(); 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskivoid NET_ThrowCurrent(JNIEnv *env, char *msg); 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskijfieldID NET_GetFileDescriptorID(JNIEnv *env); 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL ipv6_available(); 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskivoid 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_AllocSockaddr(struct sockaddr **him, int *len); 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr *him, int *len, jboolean v4MappedAddress); 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jobject JNICALL 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port); 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskivoid initLocalAddrTable (); 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskivoid parseExclusiveBindProperty(JNIEnv *env); 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskivoid 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_SetTrafficClass(struct sockaddr *him, int trafficClass); 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_GetPortFromSockaddr(struct sockaddr *him); 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_SockaddrEqualsInetAddress(JNIEnv *env,struct sockaddr *him, jobject iaObj); 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_IsIPv4Mapped(jbyte* caddr); 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_IPv4MappedToIPv4(jbyte* caddr); 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_IsEqual(jbyte* caddr1, jbyte* caddr2); 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_IsZeroAddr(jbyte* caddr); 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* Socket operations 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * These work just like the JVM_* procedures, except that they may do some 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * platform-specific pre/post processing of the arguments and/or results. 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_GetSockOpt(int fd, int level, int opt, void *result, int *len); 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_SetSockOpt(int fd, int level, int opt, const void *arg, int len); 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_Bind(int fd, struct sockaddr *him, int len); 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_MapSocketOption(jint cmd, int *level, int *optname); 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT int JNICALL 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiNET_MapSocketOptionV6(jint cmd, int *level, int *optname); 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint getScopeID (struct sockaddr *); 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiint cmpScopeID (unsigned int, struct sockaddr *); 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiunsigned short in_cksum(unsigned short *addr, int len); 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#endif /* NET_UTILS_H */ 189