Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
212eac1c
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
212eac1c
编写于
1月 26, 2018
作者:
I
igerasim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8193419: Better Internet address support
Reviewed-by: chegar, rriggs, igerasim, skoivu, rhalade
上级
323d4cc0
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
124 addition
and
22 deletion
+124
-22
src/share/native/common/jni_util.h
src/share/native/common/jni_util.h
+17
-1
src/share/native/java/net/net_util.c
src/share/native/java/net/net_util.c
+15
-1
src/solaris/native/java/net/Inet4AddressImpl.c
src/solaris/native/java/net/Inet4AddressImpl.c
+9
-1
src/solaris/native/java/net/Inet6AddressImpl.c
src/solaris/native/java/net/Inet6AddressImpl.c
+9
-1
src/solaris/native/java/net/NetworkInterface.c
src/solaris/native/java/net/NetworkInterface.c
+7
-5
src/solaris/native/java/net/PlainDatagramSocketImpl.c
src/solaris/native/java/net/PlainDatagramSocketImpl.c
+17
-1
src/solaris/native/java/net/net_util_md.c
src/solaris/native/java/net/net_util_md.c
+4
-1
src/windows/native/java/net/Inet4AddressImpl.c
src/windows/native/java/net/Inet4AddressImpl.c
+7
-1
src/windows/native/java/net/Inet6AddressImpl.c
src/windows/native/java/net/Inet6AddressImpl.c
+7
-1
src/windows/native/java/net/NetworkInterface.c
src/windows/native/java/net/NetworkInterface.c
+5
-2
src/windows/native/java/net/NetworkInterface_winXP.c
src/windows/native/java/net/NetworkInterface_winXP.c
+3
-1
src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
...indows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
+15
-4
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
+5
-1
src/windows/native/java/net/net_util_md.c
src/windows/native/java/net/net_util_md.c
+4
-1
未找到文件。
src/share/native/common/jni_util.h
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -297,6 +297,22 @@ JNU_NotifyAll(JNIEnv *env, jobject object);
} \
} while (0) \
#define CHECK_NULL_THROW_NPE(env, x, msg) \
do { \
if ((x) == NULL) { \
JNU_ThrowNullPointerException((env), (msg));\
return; \
} \
} while(0) \
#define CHECK_NULL_THROW_NPE_RETURN(env, x, msg, z)\
do { \
if ((x) == NULL) { \
JNU_ThrowNullPointerException((env), (msg));\
return (z); \
} \
} while(0) \
#define CHECK_NULL_RETURN(x, y) \
do { \
if ((x) == NULL) { \
...
...
src/share/native/java/net/net_util.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1998, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -168,32 +168,38 @@ int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) {
void
setInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
,
int
address
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE
(
env
,
holder
,
"InetAddress holder is null"
);
(
*
env
)
->
SetIntField
(
env
,
holder
,
iac_addressID
,
address
);
}
void
setInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
,
int
family
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE
(
env
,
holder
,
"InetAddress holder is null"
);
(
*
env
)
->
SetIntField
(
env
,
holder
,
iac_familyID
,
family
);
}
void
setInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
,
jobject
host
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE
(
env
,
holder
,
"InetAddress holder is null"
);
(
*
env
)
->
SetObjectField
(
env
,
holder
,
iac_hostNameID
,
host
);
(
*
env
)
->
SetObjectField
(
env
,
holder
,
iac_origHostNameID
,
host
);
}
int
getInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE_RETURN
(
env
,
holder
,
"InetAddress holder is null"
,
-
1
);
return
(
*
env
)
->
GetIntField
(
env
,
holder
,
iac_addressID
);
}
int
getInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE_RETURN
(
env
,
holder
,
"InetAddress holder is null"
,
-
1
);
return
(
*
env
)
->
GetIntField
(
env
,
holder
,
iac_familyID
);
}
jobject
getInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
CHECK_NULL_THROW_NPE_RETURN
(
env
,
holder
,
"InetAddress holder is null"
,
NULL
);
return
(
*
env
)
->
GetObjectField
(
env
,
holder
,
iac_hostNameID
);
}
...
...
@@ -215,7 +221,9 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
CHECK_NULL_RETURN
(
iaObj
,
NULL
);
address
=
NET_IPv4MappedToIPv4
(
caddr
);
setInetAddress_addr
(
env
,
iaObj
,
address
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
setInetAddress_family
(
env
,
iaObj
,
IPv4
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
}
else
{
jint
scope
;
int
ret
;
...
...
@@ -224,6 +232,7 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
ret
=
setInet6Address_ipaddress
(
env
,
iaObj
,
(
char
*
)
&
(
him6
->
sin6_addr
));
CHECK_NULL_RETURN
(
ret
,
NULL
);
setInetAddress_family
(
env
,
iaObj
,
IPv6
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
scope
=
getScopeID
(
him
);
setInet6Address_scopeid
(
env
,
iaObj
,
scope
);
}
...
...
@@ -235,7 +244,9 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ia4_class
,
ia4_ctrID
);
CHECK_NULL_RETURN
(
iaObj
,
NULL
);
setInetAddress_family
(
env
,
iaObj
,
IPv4
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
him4
->
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
*
port
=
ntohs
(
him4
->
sin_port
);
}
return
iaObj
;
...
...
@@ -248,6 +259,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
#ifdef AF_INET6
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
JNU_CHECK_EXCEPTION_RETURN
(
env
,
JNI_FALSE
);
if
(
him
->
sa_family
==
AF_INET6
)
{
#ifdef WIN32
struct
SOCKADDR_IN6
*
him6
=
(
struct
SOCKADDR_IN6
*
)
him
;
...
...
@@ -263,6 +275,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
}
addrNew
=
NET_IPv4MappedToIPv4
(
caddrNew
);
addrCur
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
JNI_FALSE
);
if
(
addrNew
==
addrCur
)
{
return
JNI_TRUE
;
}
else
{
...
...
@@ -294,6 +307,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
}
addrNew
=
ntohl
(
him4
->
sin_addr
.
s_addr
);
addrCur
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
JNI_FALSE
);
if
(
addrNew
==
addrCur
)
{
return
JNI_TRUE
;
}
else
{
...
...
src/solaris/native/java/net/Inet4AddressImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -236,7 +236,11 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)(
iterator
->
ai_addr
))
->
sin_addr
.
s_addr
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
setInetAddress_hostName
(
env
,
iaObj
,
name
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
retLen
-
i
-
1
,
iaObj
);
i
++
;
iterator
=
iterator
->
ai_next
;
...
...
@@ -479,7 +483,11 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
i
++
,
iaObj
);
iterator
=
iterator
->
ai_next
;
}
...
...
src/solaris/native/java/net/Inet6AddressImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -221,6 +221,8 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6)
return
NULL
;
}
setInetAddress_hostName
(
env
,
o
,
name
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
done
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
result
,
index
,
o
);
(
*
env
)
->
DeleteLocalRef
(
env
,
o
);
}
...
...
@@ -411,7 +413,11 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
inetIndex
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
...
...
@@ -433,6 +439,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
setInet6Address_scopeid
(
env
,
iaObj
,
scope
);
}
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
...
...
src/solaris/native/java/net/NetworkInterface.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -332,14 +332,14 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
(
JNIEnv
*
env
,
jclass
cls
,
jobject
iaObj
)
{
netif
*
ifs
,
*
curr
;
jobject
obj
=
NULL
;
jboolean
match
=
JNI_FALSE
;
#if defined(AF_INET6)
int
family
=
(
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
)
?
AF_INET
:
AF_INET6
;
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
#else
int
family
=
AF_INET
;
#endif
jobject
obj
=
NULL
;
jboolean
match
=
JNI_FALSE
;
ifs
=
enumInterfaces
(
env
);
if
(
ifs
==
NULL
)
{
return
NULL
;
...
...
@@ -357,7 +357,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
int
address1
=
htonl
(
((
struct
sockaddr_in
*
)
addrP
->
addr
)
->
sin_addr
.
s_addr
);
int
address2
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
if
(
address1
==
address2
)
{
match
=
JNI_TRUE
;
break
;
...
...
@@ -703,6 +703,7 @@ static jobject createNetworkInterface(JNIEnv *env, netif *ifs) {
if
(
iaObj
)
{
setInetAddress_addr
(
env
,
iaObj
,
htonl
(
((
struct
sockaddr_in
*
)
addrP
->
addr
)
->
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
}
else
{
return
NULL
;
}
...
...
@@ -715,6 +716,7 @@ static jobject createNetworkInterface(JNIEnv *env, netif *ifs) {
if
(
ia2Obj
)
{
setInetAddress_addr
(
env
,
ia2Obj
,
htonl
(
((
struct
sockaddr_in
*
)
addrP
->
brdcast
)
->
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
(
*
env
)
->
SetObjectField
(
env
,
ibObj
,
ni_ib4broadcastID
,
ia2Obj
);
}
else
{
return
NULL
;
...
...
src/solaris/native/java/net/PlainDatagramSocketImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
5
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -569,12 +569,15 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
iaObj
=
NET_SockaddrToInetAddress
(
env
,
(
struct
sockaddr
*
)
&
remote_addr
,
&
port
);
#ifdef AF_INET6
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
#else
family
=
AF_INET
;
#endif
if
(
family
==
AF_INET
)
{
/* this API can't handle IPV6 addresses */
int
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
setInetAddress_addr
(
env
,
addressObj
,
address
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
}
return
port
;
}
...
...
@@ -1108,7 +1111,9 @@ static void mcast_set_if_by_if_v4(JNIEnv *env, jobject this, int fd, jobject val
for
(
i
=
0
;
i
<
len
;
i
++
)
{
addr
=
(
*
env
)
->
GetObjectArrayElement
(
env
,
addrArray
,
i
);
if
(
getInetAddress_family
(
env
,
addr
)
==
IPv4
)
{
JNU_CHECK_EXCEPTION
(
env
);
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
JNU_CHECK_EXCEPTION
(
env
);
break
;
}
}
...
...
@@ -1162,6 +1167,7 @@ static void mcast_set_if_by_addr_v4(JNIEnv *env, jobject this, int fd, jobject v
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
value
)
);
JNU_CHECK_EXCEPTION
(
env
);
if
(
JVM_SetSockOpt
(
fd
,
IPPROTO_IP
,
IP_MULTICAST_IF
,
(
const
char
*
)
&
in
,
sizeof
(
in
))
<
0
)
{
NET_ThrowByNameWithLastError
(
env
,
JNU_JAVANETPKG
"SocketException"
,
...
...
@@ -1528,6 +1534,7 @@ jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, jint opt) {
CHECK_NULL_RETURN
(
addr
,
NULL
);
setInetAddress_addr
(
env
,
addr
,
ntohl
(
in
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
/*
* For IP_MULTICAST_IF return InetAddress
...
...
@@ -1990,6 +1997,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
#ifdef __linux__
if
(
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
)
{
JNU_CHECK_EXCEPTION
(
env
);
ipv6_join_leave
=
JNI_FALSE
;
}
#endif
...
...
@@ -2037,6 +2045,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
}
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
JNU_CHECK_EXCEPTION
(
env
);
mname
.
imr_address
.
s_addr
=
0
;
mname
.
imr_ifindex
=
(
*
env
)
->
GetIntField
(
env
,
niObj
,
ni_indexID
);
mname_len
=
sizeof
(
struct
ip_mreqn
);
...
...
@@ -2055,10 +2064,13 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
addr
=
(
*
env
)
->
GetObjectArrayElement
(
env
,
addrArray
,
0
);
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
JNU_CHECK_EXCEPTION
(
env
);
#ifdef __linux__
mname
.
imr_address
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
JNU_CHECK_EXCEPTION
(
env
);
#else
mname
.
imr_interface
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
JNU_CHECK_EXCEPTION
(
env
);
#endif
mname_len
=
sizeof
(
struct
ip_mreq
);
}
...
...
@@ -2094,6 +2106,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
}
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
JNU_CHECK_EXCEPTION
(
env
);
mname
.
imr_address
.
s_addr
=
0
;
mname
.
imr_ifindex
=
index
;
mname_len
=
sizeof
(
struct
ip_mreqn
);
...
...
@@ -2116,6 +2129,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
mname
.
imr_interface
.
s_addr
=
in
.
s_addr
;
#endif
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
JNU_CHECK_EXCEPTION
(
env
);
mname_len
=
sizeof
(
struct
ip_mreq
);
}
}
...
...
@@ -2181,10 +2195,12 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
jint
family
;
jint
address
;
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
JNU_CHECK_EXCEPTION
(
env
);
if
(
family
==
AF_INET
)
{
/* will convert to IPv4-mapped address */
memset
((
char
*
)
caddr
,
0
,
16
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION
(
env
);
caddr
[
10
]
=
0xff
;
caddr
[
11
]
=
0xff
;
...
...
src/solaris/native/java/net/net_util_md.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -786,6 +786,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
int
*
len
,
jboolean
v4MappedAddress
)
{
jint
family
;
family
=
getInetAddress_family
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
#ifdef AF_INET6
/* needs work. 1. family 2. clean up him6 etc deallocate memory */
if
(
ipv6_available
()
&&
!
(
family
==
IPv4
&&
v4MappedAddress
==
JNI_FALSE
))
{
...
...
@@ -797,6 +798,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
if
(
family
==
IPv4
)
{
/* will convert to IPv4-mapped address */
memset
((
char
*
)
caddr
,
0
,
16
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
if
(
address
==
INADDR_ANY
)
{
/* we would always prefer IPv6 wildcard address
caddr[10] = 0xff;
...
...
@@ -905,6 +907,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
}
memset
((
char
*
)
him4
,
0
,
sizeof
(
struct
sockaddr_in
));
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
him4
->
sin_port
=
htons
((
short
)
port
);
him4
->
sin_addr
.
s_addr
=
(
uint32_t
)
htonl
(
address
);
him4
->
sin_family
=
AF_INET
;
...
...
src/windows/native/java/net/Inet4AddressImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -195,6 +195,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
address
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
0
,
iaObj
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
return
ret
;
...
...
@@ -228,7 +230,11 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
((
*
addrp
)
->
s_addr
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
i
,
iaObj
);
addrp
++
;
i
++
;
...
...
src/windows/native/java/net/Inet6AddressImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -219,7 +219,11 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
goto
cleanupAndReturn
;
}
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
inetIndex
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
...
...
@@ -240,6 +244,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
setInet6Address_scopeid
(
env
,
iaObj
,
scope
);
}
setInetAddress_hostName
(
env
,
iaObj
,
host
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
goto
cleanupAndReturn
;
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
...
...
src/windows/native/java/net/NetworkInterface.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -593,6 +593,7 @@ jobject createNetworkInterface
/* default ctor will set family to AF_INET */
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
if
(
addrs
->
mask
!=
-
1
)
{
ibObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ibcls
,
ni_ibctrID
);
if
(
ibObj
==
NULL
)
{
...
...
@@ -606,6 +607,7 @@ jobject createNetworkInterface
return
NULL
;
}
setInetAddress_addr
(
env
,
ia2Obj
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
(
*
env
)
->
SetObjectField
(
env
,
ibObj
,
ni_ibbroadcastID
,
ia2Obj
);
(
*
env
)
->
SetShortField
(
env
,
ibObj
,
ni_ibmaskID
,
addrs
->
mask
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
bindsArr
,
bind_index
++
,
ibObj
);
...
...
@@ -761,8 +763,9 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
(
JNIEnv
*
env
,
jclass
cls
,
jobject
iaObj
)
{
netif
*
ifList
,
*
curr
;
jint
addr
=
getInetAddress_addr
(
env
,
iaObj
);
jobject
netifObj
=
NULL
;
jint
addr
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
...
...
src/windows/native/java/net/NetworkInterface_winXP.c
浏览文件 @
212eac1c
/*
* Copyright (c) 2003, 201
5
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -545,6 +545,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
ibObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ibcls
,
ni_ibctrID
);
if
(
ibObj
==
NULL
)
{
free_netaddr
(
netaddrP
);
...
...
@@ -557,6 +558,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
return
NULL
;
}
setInetAddress_addr
(
env
,
ia2Obj
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
(
*
env
)
->
SetObjectField
(
env
,
ibObj
,
ni_ibbroadcastID
,
ia2Obj
);
(
*
env
)
->
SetShortField
(
env
,
ibObj
,
ni_ibmaskID
,
addrs
->
mask
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
bindsArr
,
bind_index
++
,
ibObj
);
...
...
src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
5
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -439,12 +439,13 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
memset
((
char
*
)
&
lcladdr
,
0
,
sizeof
(
lcladdr
));
family
=
getInetAddress_family
(
env
,
addressObj
);
JNU_CHECK_EXCEPTION
(
env
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Protocol family not supported"
);
return
;
}
JNU_CHECK_EXCEPTION
(
env
);
if
(
IS_NULL
(
fdObj
)
||
(
ipv6_supported
&&
IS_NULL
(
fd1Obj
)))
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"socket closed"
);
return
;
...
...
@@ -459,6 +460,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
return
;
}
else
{
address
=
getInetAddress_addr
(
env
,
addressObj
);
JNU_CHECK_EXCEPTION
(
env
);
}
if
(
NET_InetAddressToSockaddr
(
env
,
addressObj
,
port
,
(
struct
sockaddr
*
)
&
lcladdr
,
&
lcladdrlen
,
JNI_FALSE
)
!=
0
)
{
...
...
@@ -562,8 +564,9 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_connect0(JNIEnv *env, jobject thi
}
addr
=
getInetAddress_addr
(
env
,
address
);
JNU_CHECK_EXCEPTION
(
env
);
family
=
getInetAddress_family
(
env
,
address
);
JNU_CHECK_EXCEPTION
(
env
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Protocol family not supported"
);
...
...
@@ -681,6 +684,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
}
family
=
getInetAddress_family
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION
(
env
);
if
(
family
==
IPv4
)
{
fdObj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
pdsi_fdID
);
}
else
{
...
...
@@ -731,6 +735,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
* Check is not necessary on these OSes */
if
(
connected
)
{
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION
(
env
);
}
else
{
address
=
ntohl
(
rmtaddr
.
him4
.
sin_addr
.
s_addr
);
}
...
...
@@ -841,6 +846,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
return
-
1
;
}
else
{
address
=
getInetAddress_addr
(
env
,
addressObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
/* We only handle IPv4 for now. Will support IPv6 once its in the os */
family
=
AF_INET
;
}
...
...
@@ -923,7 +929,9 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
return
0
;
}
setInetAddress_addr
(
env
,
addressObj
,
ntohl
(
remote_addr
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
setInetAddress_family
(
env
,
addressObj
,
IPv4
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
/* return port */
return
ntohs
(
remote_addr
.
sin_port
);
...
...
@@ -1630,6 +1638,7 @@ static int getInetAddrFromIf (JNIEnv *env, int family, jobject nif, jobject *iad
int
fam
;
addr
=
(
*
env
)
->
GetObjectArrayElement
(
env
,
addrArray
,
i
);
fam
=
getInetAddress_family
(
env
,
addr
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
if
(
fam
==
family
)
{
*
iaddr
=
addr
;
return
0
;
...
...
@@ -1648,6 +1657,7 @@ static int getInet4AddrFromIf (JNIEnv *env, jobject nif, struct in_addr *iaddr)
}
iaddr
->
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
return
0
;
}
...
...
@@ -1752,6 +1762,7 @@ static void setMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1,
struct
in_addr
in
;
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
value
));
JNU_CHECK_EXCEPTION
(
env
);
if
(
setsockopt
(
fd
,
IPPROTO_IP
,
IP_MULTICAST_IF
,
(
const
char
*
)
&
in
,
sizeof
(
in
))
<
0
)
{
NET_ThrowByNameWithLastError
(
env
,
JNU_JAVANETPKG
"SocketException"
,
...
...
@@ -1993,7 +2004,7 @@ static jobject getIPv4NetworkInterface (JNIEnv *env, jobject this, int fd, jint
CHECK_NULL_RETURN
(
addr
,
NULL
);
setInetAddress_addr
(
env
,
addr
,
ntohl
(
in
.
s_addr
));
JNU_CHECK_EXCEPTION_RETURN
(
env
,
NULL
);
/*
* For IP_MULTICAST_IF return InetAddress
*/
...
...
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -414,6 +414,7 @@ Java_java_net_TwoStacksPlainSocketImpl_socketBind(JNIEnv *env, jobject this,
fd1Obj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
psi_fd1ID
);
family
=
getInetAddress_family
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION
(
env
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
...
...
@@ -731,7 +732,9 @@ Java_java_net_TwoStacksPlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
}
setInetAddress_addr
(
env
,
socketAddressObj
,
ntohl
(
him
.
him4
.
sin_addr
.
s_addr
));
JNU_CHECK_EXCEPTION
(
env
);
setInetAddress_family
(
env
,
socketAddressObj
,
IPv4
);
JNU_CHECK_EXCEPTION
(
env
);
(
*
env
)
->
SetObjectField
(
env
,
socket
,
psi_addressID
,
socketAddressObj
);
}
else
{
/* AF_INET6 -> Inet6Address */
...
...
@@ -758,6 +761,7 @@ Java_java_net_TwoStacksPlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
}
setInet6Address_ipaddress
(
env
,
socketAddressObj
,
(
const
char
*
)
&
him
.
him6
.
sin6_addr
);
setInetAddress_family
(
env
,
socketAddressObj
,
IPv6
);
JNU_CHECK_EXCEPTION
(
env
);
setInet6Address_scopeid
(
env
,
socketAddressObj
,
him
.
him6
.
sin6_scope_id
);
}
...
...
src/windows/native/java/net/net_util_md.c
浏览文件 @
212eac1c
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
8
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -875,6 +875,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
int
*
len
,
jboolean
v4MappedAddress
)
{
jint
family
,
iafam
;
iafam
=
getInetAddress_family
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
family
=
(
iafam
==
IPv4
)
?
AF_INET
:
AF_INET6
;
if
(
ipv6_available
()
&&
!
(
family
==
AF_INET
&&
v4MappedAddress
==
JNI_FALSE
))
{
struct
SOCKADDR_IN6
*
him6
=
(
struct
SOCKADDR_IN6
*
)
him
;
...
...
@@ -885,6 +886,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
if
(
family
==
AF_INET
)
{
/* will convert to IPv4-mapped address */
memset
((
char
*
)
caddr
,
0
,
16
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
if
(
address
==
INADDR_ANY
)
{
/* we would always prefer IPv6 wildcard address
caddr[10] = 0xff;
...
...
@@ -923,6 +925,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
}
memset
((
char
*
)
him4
,
0
,
sizeof
(
struct
sockaddr_in
));
address
=
getInetAddress_addr
(
env
,
iaObj
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
him4
->
sin_port
=
htons
((
short
)
port
);
him4
->
sin_addr
.
s_addr
=
(
u_long
)
htonl
(
address
);
him4
->
sin_family
=
AF_INET
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录