Elliott Hughes | 753dcd8 | 2010-06-01 18:07:56 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2010 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | #include "jni.h" |
Elliott Hughes | 753dcd8 | 2010-06-01 18:07:56 -0700 | [diff] [blame] | 18 | #include <sys/socket.h> |
| 19 | |
Neil Fuller | 0ab1a26 | 2015-07-07 17:03:25 +0100 | [diff] [blame^] | 20 | // Convert from sockaddr_storage to Inet4Address (AF_INET) or Inet6Address (AF_INET6). |
| 21 | // If 'port' is non-NULL and the address family includes a notion |
Elliott Hughes | 482a3fc | 2013-03-20 16:10:12 -0700 | [diff] [blame] | 22 | // of port number, *port will be set to the port number. |
| 23 | jobject sockaddrToInetAddress(JNIEnv* env, const sockaddr_storage& ss, int* port); |
Elliott Hughes | 3b0a5b9 | 2010-07-22 15:06:54 -0700 | [diff] [blame] | 24 | |
Neil Fuller | 0ab1a26 | 2015-07-07 17:03:25 +0100 | [diff] [blame^] | 25 | // Convert from InetAddress to sockaddr_storage. An Inet6Address will be converted to an |
| 26 | // AF_INET6 sockaddr_in6. An Inet4Address will be converted to an IPv4-mapped AF_INET6 |
| 27 | // sockaddr_in6. This is what you want if you're about to perform an operation on a socket, |
| 28 | // since all our sockets are AF_INET6. |
Elliott Hughes | 482a3fc | 2013-03-20 16:10:12 -0700 | [diff] [blame] | 29 | bool inetAddressToSockaddr(JNIEnv* env, jobject inetAddress, int port, |
| 30 | sockaddr_storage& ss, socklen_t& sa_len); |
Elliott Hughes | 4664da5 | 2011-05-06 17:09:43 -0700 | [diff] [blame] | 31 | |
Neil Fuller | 0ab1a26 | 2015-07-07 17:03:25 +0100 | [diff] [blame^] | 32 | // Convert from InetAddress to sockaddr_storage. An Inet6Address will be converted to an |
| 33 | // AF_INET6 sockaddr_in6. An Inet4Address will be converted to a sockaddr_in. This is probably |
| 34 | // only useful for getnameinfo(2), where we'll be presenting the result to the user and the |
| 35 | // user may actually care whether the original address was pure IPv4 or an IPv4-mapped IPv6 |
| 36 | // address, and for the MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP, and other multicast socket |
| 37 | // options. |
Elliott Hughes | 482a3fc | 2013-03-20 16:10:12 -0700 | [diff] [blame] | 38 | bool inetAddressToSockaddrVerbatim(JNIEnv* env, jobject inetAddress, int port, |
| 39 | sockaddr_storage& ss, socklen_t& sa_len); |
Elliott Hughes | 3b0a5b9 | 2010-07-22 15:06:54 -0700 | [diff] [blame] | 40 | |
| 41 | |
Elliott Hughes | 4f11ebe | 2011-04-19 15:38:10 -0700 | [diff] [blame] | 42 | |
Elliott Hughes | 3b0a5b9 | 2010-07-22 15:06:54 -0700 | [diff] [blame] | 43 | // Changes 'fd' to be blocking/non-blocking. Returns false and sets errno on failure. |
Elliott Hughes | 4f11ebe | 2011-04-19 15:38:10 -0700 | [diff] [blame] | 44 | // @Deprecated - use IoUtils.setBlocking |
Elliott Hughes | 440ba56 | 2010-08-04 10:44:16 -0700 | [diff] [blame] | 45 | bool setBlocking(int fd, bool blocking); |