< prev index next >
src/java.base/unix/native/libnio/ch/InheritedChannel.c
Print this page
*** 35,45 ****
#include "jni_util.h"
#include "net_util.h"
#include "sun_nio_ch_InheritedChannel.h"
! static int matchFamily(SOCKETADDRESS *sa) {
return (sa->sa.sa_family == (ipv6_available() ? AF_INET6 : AF_INET));
}
JNIEXPORT void JNICALL
Java_sun_nio_ch_InheritedChannel_initIDs(JNIEnv *env, jclass cla)
--- 35,45 ----
#include "jni_util.h"
#include "net_util.h"
#include "sun_nio_ch_InheritedChannel.h"
! static int matchFamilyInet(SOCKETADDRESS *sa) {
return (sa->sa.sa_family == (ipv6_available() ? AF_INET6 : AF_INET));
}
JNIEXPORT void JNICALL
Java_sun_nio_ch_InheritedChannel_initIDs(JNIEnv *env, jclass cla)
*** 47,81 ****
/* Initialize InetAddress IDs before later use of NET_XXX functions */
initInetAddressIDs(env);
}
JNIEXPORT jobject JNICALL
! Java_sun_nio_ch_InheritedChannel_peerAddress0(JNIEnv *env, jclass cla, jint fd)
{
SOCKETADDRESS sa;
socklen_t len = sizeof(SOCKETADDRESS);
jobject remote_ia = NULL;
jint remote_port;
if (getpeername(fd, &sa.sa, &len) == 0) {
! if (matchFamily(&sa)) {
remote_ia = NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
}
}
return remote_ia;
}
JNIEXPORT jint JNICALL
Java_sun_nio_ch_InheritedChannel_peerPort0(JNIEnv *env, jclass cla, jint fd)
{
SOCKETADDRESS sa;
socklen_t len = sizeof(SOCKETADDRESS);
jint remote_port = -1;
! if (getpeername(fd, &sa.sa, &len) == 0) {
! if (matchFamily(&sa)) {
NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
}
}
return remote_port;
--- 47,96 ----
/* Initialize InetAddress IDs before later use of NET_XXX functions */
initInetAddressIDs(env);
}
JNIEXPORT jobject JNICALL
! Java_sun_nio_ch_InheritedChannel_peerAddressInet(JNIEnv *env, jclass cla, jint fd)
{
SOCKETADDRESS sa;
socklen_t len = sizeof(SOCKETADDRESS);
jobject remote_ia = NULL;
jint remote_port;
if (getpeername(fd, &sa.sa, &len) == 0) {
! if (matchFamilyInet(&sa)) {
remote_ia = NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
}
}
return remote_ia;
}
+ JNIEXPORT jstring JNICALL
+ Java_sun_nio_ch_InheritedChannel_peerAddressUnix(JNIEnv *env, jclass cla, jint fd)
+ {
+ struct sockaddr_un sa;
+ socklen_t len = sizeof(struct sockaddr_un);
+ jobject remote_sa = NULL;
+
+ if (getpeername(fd, (struct sockaddr *)&sa, &len) == 0) {
+ if (sa.sun_family == AF_UNIX) {
+ remote_sa = NET_SockaddrToUnixAddressString(env, &sa, len);
+ }
+ }
+ return remote_sa;
+ }
+
JNIEXPORT jint JNICALL
Java_sun_nio_ch_InheritedChannel_peerPort0(JNIEnv *env, jclass cla, jint fd)
{
SOCKETADDRESS sa;
socklen_t len = sizeof(SOCKETADDRESS);
jint remote_port = -1;
! if (getpeername(fd, (struct sockaddr *)&sa.sa, &len) == 0) {
! if (matchFamilyInet(&sa)) {
NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
}
}
return remote_port;
< prev index next >