Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
c872b120
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看板
提交
c872b120
编写于
3月 25, 2011
作者:
C
chegar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7030256: Cleanup/Remove code supporting old Windows versions (98, NT, 2000, etc)
Reviewed-by: alanb, mduigou
上级
9c787302
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
269 addition
and
2451 deletion
+269
-2451
make/java/net/Makefile
make/java/net/Makefile
+3
-5
src/windows/native/java/net/Inet6AddressImpl.c
src/windows/native/java/net/Inet6AddressImpl.c
+171
-177
src/windows/native/java/net/NetworkInterface.c
src/windows/native/java/net/NetworkInterface.c
+47
-156
src/windows/native/java/net/NetworkInterface.h
src/windows/native/java/net/NetworkInterface.h
+1
-333
src/windows/native/java/net/NetworkInterface_win9x.c
src/windows/native/java/net/NetworkInterface_win9x.c
+0
-1141
src/windows/native/java/net/NetworkInterface_winXP.c
src/windows/native/java/net/NetworkInterface_winXP.c
+8
-15
src/windows/native/java/net/net_util_md.c
src/windows/native/java/net/net_util_md.c
+13
-40
src/windows/native/java/net/net_util_md.h
src/windows/native/java/net/net_util_md.h
+0
-6
src/windows/native/sun/net/dns/ResolverConfigurationImpl.c
src/windows/native/sun/net/dns/ResolverConfigurationImpl.c
+16
-516
src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c
.../native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c
+10
-62
未找到文件。
make/java/net/Makefile
浏览文件 @
c872b120
...
@@ -37,10 +37,6 @@ include FILES_c.gmk
...
@@ -37,10 +37,6 @@ include FILES_c.gmk
AUTO_FILES_JAVA_DIRS
=
java/net
AUTO_FILES_JAVA_DIRS
=
java/net
ifeq
($(PLATFORM), windows)
ifeq
($(PLATFORM), windows)
# Windows 9x module only needed on 32-bit build
ifeq
($(ARCH_DATA_MODEL), 32)
FILES_c
+=
NetworkInterface_win9x.c
endif
FILES_c
+=
NTLMAuthSequence.c
FILES_c
+=
NTLMAuthSequence.c
FILES_c
+=
NetworkInterface_winXP.c
FILES_c
+=
NetworkInterface_winXP.c
else
else
...
@@ -96,7 +92,9 @@ include $(BUILDDIR)/common/Mapfile-vers.gmk
...
@@ -96,7 +92,9 @@ include $(BUILDDIR)/common/Mapfile-vers.gmk
include
$(BUILDDIR)/common/Library.gmk
include
$(BUILDDIR)/common/Library.gmk
ifeq
($(PLATFORM), windows)
ifeq
($(PLATFORM), windows)
OTHER_LDLIBS
=
ws2_32.lib
$(JVMLIB)
OTHER_LDLIBS
=
ws2_32.lib
$(JVMLIB)
\
secur32.lib iphlpapi.lib delayimp.lib
\
/DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll
else
else
OTHER_LDLIBS
=
$(LIBSOCKET)
$(LIBNSL)
-ldl
$(JVMLIB)
OTHER_LDLIBS
=
$(LIBSOCKET)
$(LIBNSL)
-ldl
$(JVMLIB)
endif
endif
...
...
src/windows/native/java/net/Inet6AddressImpl.c
浏览文件 @
c872b120
...
@@ -90,6 +90,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
...
@@ -90,6 +90,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jobjectArray
ret
=
0
;
jobjectArray
ret
=
0
;
int
retLen
=
0
;
int
retLen
=
0
;
jboolean
preferIPv6Address
;
jboolean
preferIPv6Address
;
static
jfieldID
ia_preferIPv6AddressID
;
int
error
=
0
;
int
error
=
0
;
struct
addrinfo
hints
,
*
res
,
*
resNew
=
NULL
;
struct
addrinfo
hints
,
*
res
,
*
resNew
=
NULL
;
...
@@ -116,166 +117,163 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
...
@@ -116,166 +117,163 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
hostname
=
JNU_GetStringPlatformChars
(
env
,
host
,
JNI_FALSE
);
hostname
=
JNU_GetStringPlatformChars
(
env
,
host
,
JNI_FALSE
);
CHECK_NULL_RETURN
(
hostname
,
NULL
);
CHECK_NULL_RETURN
(
hostname
,
NULL
);
if
(
NET_addrtransAvailable
())
{
if
(
ia_preferIPv6AddressID
==
NULL
)
{
static
jfieldID
ia_preferIPv6AddressID
;
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
if
(
c
)
{
ia_preferIPv6AddressID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
c
,
"preferIPv6Address"
,
"Z"
);
}
if
(
ia_preferIPv6AddressID
==
NULL
)
{
if
(
ia_preferIPv6AddressID
==
NULL
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
if
(
c
)
{
return
NULL
;
ia_preferIPv6AddressID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
c
,
"preferIPv6Address"
,
"Z"
);
}
if
(
ia_preferIPv6AddressID
==
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
return
NULL
;
}
}
}
/* get the address preference */
}
preferIPv6Address
/* get the address preference */
=
(
*
env
)
->
GetStaticBooleanField
(
env
,
ia_class
,
ia_preferIPv6AddressID
);
preferIPv6Address
=
(
*
env
)
->
GetStaticBooleanField
(
env
,
ia_class
,
ia_preferIPv6AddressID
);
/* Try once, with our static buffer. */
/* Try once, with our static buffer. */
memset
(
&
hints
,
0
,
sizeof
(
hints
));
memset
(
&
hints
,
0
,
sizeof
(
hints
));
hints
.
ai_flags
=
AI_CANONNAME
;
hints
.
ai_flags
=
AI_CANONNAME
;
hints
.
ai_family
=
AF_UNSPEC
;
hints
.
ai_family
=
AF_UNSPEC
;
error
=
(
*
getaddrinfo_ptr
)
(
hostname
,
NULL
,
&
hints
,
&
res
);
error
=
getaddrinfo
(
hostname
,
NULL
,
&
hints
,
&
res
);
if
(
error
)
{
if
(
error
)
{
/* report error */
/* report error */
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"UnknownHostException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"UnknownHostException"
,
(
char
*
)
hostname
);
(
char
*
)
hostname
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
return
NULL
;
return
NULL
;
}
else
{
}
else
{
int
i
=
0
;
int
i
=
0
;
int
inetCount
=
0
,
inet6Count
=
0
,
inetIndex
,
inet6Index
;
int
inetCount
=
0
,
inet6Count
=
0
,
inetIndex
,
inet6Index
;
struct
addrinfo
*
itr
,
*
last
,
*
iterator
=
res
;
struct
addrinfo
*
itr
,
*
last
,
*
iterator
=
res
;
while
(
iterator
!=
NULL
)
{
while
(
iterator
!=
NULL
)
{
int
skip
=
0
;
int
skip
=
0
;
itr
=
resNew
;
itr
=
resNew
;
while
(
itr
!=
NULL
)
{
while
(
itr
!=
NULL
)
{
if
(
iterator
->
ai_family
==
itr
->
ai_family
&&
if
(
iterator
->
ai_family
==
itr
->
ai_family
&&
iterator
->
ai_addrlen
==
itr
->
ai_addrlen
)
{
iterator
->
ai_addrlen
==
itr
->
ai_addrlen
)
{
if
(
itr
->
ai_family
==
AF_INET
)
{
/* AF_INET */
if
(
itr
->
ai_family
==
AF_INET
)
{
/* AF_INET */
struct
sockaddr_in
*
addr1
,
*
addr2
;
struct
sockaddr_in
*
addr1
,
*
addr2
;
addr1
=
(
struct
sockaddr_in
*
)
iterator
->
ai_addr
;
addr1
=
(
struct
sockaddr_in
*
)
iterator
->
ai_addr
;
addr2
=
(
struct
sockaddr_in
*
)
itr
->
ai_addr
;
addr2
=
(
struct
sockaddr_in
*
)
itr
->
ai_addr
;
if
(
addr1
->
sin_addr
.
s_addr
==
if
(
addr1
->
sin_addr
.
s_addr
==
addr2
->
sin_addr
.
s_addr
)
{
addr2
->
sin_addr
.
s_addr
)
{
skip
=
1
;
skip
=
1
;
break
;
}
}
else
{
int
t
;
struct
sockaddr_in6
*
addr1
,
*
addr2
;
addr1
=
(
struct
sockaddr_in6
*
)
iterator
->
ai_addr
;
addr2
=
(
struct
sockaddr_in6
*
)
itr
->
ai_addr
;
for
(
t
=
0
;
t
<
16
;
t
++
)
{
if
(
addr1
->
sin6_addr
.
s6_addr
[
t
]
!=
addr2
->
sin6_addr
.
s6_addr
[
t
])
{
break
;
break
;
}
}
}
if
(
t
<
16
)
{
itr
=
itr
->
ai_next
;
continue
;
}
else
{
}
else
{
int
t
;
skip
=
1
;
struct
sockaddr_in6
*
addr1
,
*
addr2
;
break
;
addr1
=
(
struct
sockaddr_in6
*
)
iterator
->
ai_addr
;
addr2
=
(
struct
sockaddr_in6
*
)
itr
->
ai_addr
;
for
(
t
=
0
;
t
<
16
;
t
++
)
{
if
(
addr1
->
sin6_addr
.
s6_addr
[
t
]
!=
addr2
->
sin6_addr
.
s6_addr
[
t
])
{
break
;
}
}
if
(
t
<
16
)
{
itr
=
itr
->
ai_next
;
continue
;
}
else
{
skip
=
1
;
break
;
}
}
}
}
else
if
(
iterator
->
ai_family
!=
AF_INET
&&
iterator
->
ai_family
!=
AF_INET6
)
{
/* we can't handle other family types */
skip
=
1
;
break
;
}
}
itr
=
itr
->
ai_next
;
}
else
if
(
iterator
->
ai_family
!=
AF_INET
&&
iterator
->
ai_family
!=
AF_INET6
)
{
/* we can't handle other family types */
skip
=
1
;
break
;
}
}
itr
=
itr
->
ai_next
;
if
(
!
skip
)
{
struct
addrinfo
*
next
=
(
struct
addrinfo
*
)
malloc
(
sizeof
(
struct
addrinfo
));
if
(
!
next
)
{
JNU_ThrowOutOfMemoryError
(
env
,
"heap allocation failed"
);
ret
=
NULL
;
goto
cleanupAndReturn
;
}
memcpy
(
next
,
iterator
,
sizeof
(
struct
addrinfo
));
next
->
ai_next
=
NULL
;
if
(
resNew
==
NULL
)
{
resNew
=
next
;
}
else
{
last
->
ai_next
=
next
;
}
last
=
next
;
i
++
;
if
(
iterator
->
ai_family
==
AF_INET
)
{
inetCount
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
inet6Count
++
;
}
}
iterator
=
iterator
->
ai_next
;
}
retLen
=
i
;
iterator
=
resNew
;
i
=
0
;
ret
=
(
*
env
)
->
NewObjectArray
(
env
,
retLen
,
ni_iacls
,
NULL
);
if
(
IS_NULL
(
ret
))
{
/* we may have memory to free at the end of this */
goto
cleanupAndReturn
;
}
}
if
(
preferIPv6Address
)
{
if
(
!
skip
)
{
inetIndex
=
inet6Count
;
struct
addrinfo
*
next
inet6Index
=
0
;
=
(
struct
addrinfo
*
)
malloc
(
sizeof
(
struct
addrinfo
));
}
else
{
if
(
!
next
)
{
inetIndex
=
0
;
JNU_ThrowOutOfMemoryError
(
env
,
"heap allocation failed"
);
inet6Index
=
inetCount
;
}
while
(
iterator
!=
NULL
)
{
if
(
iterator
->
ai_family
==
AF_INET
)
{
jobject
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia4cls
,
ni_ia4ctrID
);
if
(
IS_NULL
(
iaObj
))
{
ret
=
NULL
;
ret
=
NULL
;
goto
cleanupAndReturn
;
goto
cleanupAndReturn
;
}
}
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaaddressID
,
memcpy
(
next
,
iterator
,
sizeof
(
struct
addrinfo
));
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
next
->
ai_next
=
NULL
;
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
if
(
resNew
==
NULL
)
{
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
resNew
=
next
;
inetIndex
++
;
}
else
{
last
->
ai_next
=
next
;
}
last
=
next
;
i
++
;
if
(
iterator
->
ai_family
==
AF_INET
)
{
inetCount
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
jint
scope
=
0
;
inet6Count
++
;
jbyteArray
ipaddress
;
jobject
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia6cls
,
ni_ia6ctrID
);
if
(
IS_NULL
(
iaObj
))
{
ret
=
NULL
;
goto
cleanupAndReturn
;
}
ipaddress
=
(
*
env
)
->
NewByteArray
(
env
,
16
);
if
(
IS_NULL
(
ipaddress
))
{
ret
=
NULL
;
goto
cleanupAndReturn
;
}
(
*
env
)
->
SetByteArrayRegion
(
env
,
ipaddress
,
0
,
16
,
(
jbyte
*
)
&
(((
struct
sockaddr_in6
*
)
iterator
->
ai_addr
)
->
sin6_addr
));
scope
=
((
struct
sockaddr_in6
*
)
iterator
->
ai_addr
)
->
sin6_scope_id
;
if
(
scope
!=
0
)
{
/* zero is default value, no need to set */
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia6_scopeidID
,
scope
);
(
*
env
)
->
SetBooleanField
(
env
,
iaObj
,
ia6_scopeidsetID
,
JNI_TRUE
);
}
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_ia6ipaddressID
,
ipaddress
);
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
}
iterator
=
iterator
->
ai_next
;
}
}
iterator
=
iterator
->
ai_next
;
}
retLen
=
i
;
iterator
=
resNew
;
i
=
0
;
ret
=
(
*
env
)
->
NewObjectArray
(
env
,
retLen
,
ni_iacls
,
NULL
);
if
(
IS_NULL
(
ret
))
{
/* we may have memory to free at the end of this */
goto
cleanupAndReturn
;
}
if
(
preferIPv6Address
)
{
inetIndex
=
inet6Count
;
inet6Index
=
0
;
}
else
{
inetIndex
=
0
;
inet6Index
=
inetCount
;
}
while
(
iterator
!=
NULL
)
{
if
(
iterator
->
ai_family
==
AF_INET
)
{
jobject
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia4cls
,
ni_ia4ctrID
);
if
(
IS_NULL
(
iaObj
))
{
ret
=
NULL
;
goto
cleanupAndReturn
;
}
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaaddressID
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
inetIndex
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
jint
scope
=
0
;
jbyteArray
ipaddress
;
jobject
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia6cls
,
ni_ia6ctrID
);
if
(
IS_NULL
(
iaObj
))
{
ret
=
NULL
;
goto
cleanupAndReturn
;
}
ipaddress
=
(
*
env
)
->
NewByteArray
(
env
,
16
);
if
(
IS_NULL
(
ipaddress
))
{
ret
=
NULL
;
goto
cleanupAndReturn
;
}
(
*
env
)
->
SetByteArrayRegion
(
env
,
ipaddress
,
0
,
16
,
(
jbyte
*
)
&
(((
struct
sockaddr_in6
*
)
iterator
->
ai_addr
)
->
sin6_addr
));
scope
=
((
struct
sockaddr_in6
*
)
iterator
->
ai_addr
)
->
sin6_scope_id
;
if
(
scope
!=
0
)
{
/* zero is default value, no need to set */
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia6_scopeidID
,
scope
);
(
*
env
)
->
SetBooleanField
(
env
,
iaObj
,
ia6_scopeidsetID
,
JNI_TRUE
);
}
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_ia6ipaddressID
,
ipaddress
);
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
iterator
=
iterator
->
ai_next
;
}
}
}
}
...
@@ -291,8 +289,7 @@ cleanupAndReturn:
...
@@ -291,8 +289,7 @@ cleanupAndReturn:
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
}
}
if
(
NET_addrtransAvailable
())
freeaddrinfo
(
res
);
(
*
freeaddrinfo_ptr
)(
res
);
return
ret
;
return
ret
;
}
}
...
@@ -312,44 +309,41 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
...
@@ -312,44 +309,41 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
int
len
=
0
;
int
len
=
0
;
jbyte
caddr
[
16
];
jbyte
caddr
[
16
];
if
(
NET_addrtransAvailable
())
{
struct
sockaddr_in
him4
;
struct
sockaddr_in
him4
;
struct
sockaddr_in6
him6
;
struct
sockaddr_in6
him6
;
struct
sockaddr
*
sa
;
struct
sockaddr
*
sa
;
/*
* For IPv4 addresses construct a sockaddr_in structure.
*/
if
((
*
env
)
->
GetArrayLength
(
env
,
addrArray
)
==
4
)
{
jint
addr
;
(
*
env
)
->
GetByteArrayRegion
(
env
,
addrArray
,
0
,
4
,
caddr
);
addr
=
((
caddr
[
0
]
<<
24
)
&
0xff000000
);
addr
|=
((
caddr
[
1
]
<<
16
)
&
0xff0000
);
addr
|=
((
caddr
[
2
]
<<
8
)
&
0xff00
);
addr
|=
(
caddr
[
3
]
&
0xff
);
memset
((
char
*
)
&
him4
,
0
,
sizeof
(
him4
));
him4
.
sin_addr
.
s_addr
=
(
uint32_t
)
htonl
(
addr
);
him4
.
sin_family
=
AF_INET
;
sa
=
(
struct
sockaddr
*
)
&
him4
;
len
=
sizeof
(
him4
);
}
else
{
/*
/*
* For IPv
4 addresses construct a sockaddr_in
structure.
* For IPv
6 address construct a sockaddr_in6
structure.
*/
*/
if
((
*
env
)
->
GetArrayLength
(
env
,
addrArray
)
==
4
)
{
(
*
env
)
->
GetByteArrayRegion
(
env
,
addrArray
,
0
,
16
,
caddr
);
jint
addr
;
memset
((
char
*
)
&
him6
,
0
,
sizeof
(
him6
));
(
*
env
)
->
GetByteArrayRegion
(
env
,
addrArray
,
0
,
4
,
caddr
);
memcpy
((
void
*
)
&
(
him6
.
sin6_addr
),
caddr
,
sizeof
(
struct
in6_addr
)
);
addr
=
((
caddr
[
0
]
<<
24
)
&
0xff000000
);
him6
.
sin6_family
=
AF_INET6
;
addr
|=
((
caddr
[
1
]
<<
16
)
&
0xff0000
);
sa
=
(
struct
sockaddr
*
)
&
him6
;
addr
|=
((
caddr
[
2
]
<<
8
)
&
0xff00
);
len
=
sizeof
(
him6
)
;
addr
|=
(
caddr
[
3
]
&
0xff
);
}
memset
((
char
*
)
&
him4
,
0
,
sizeof
(
him4
));
him4
.
sin_addr
.
s_addr
=
(
uint32_t
)
htonl
(
addr
);
him4
.
sin_family
=
AF_INET
;
sa
=
(
struct
sockaddr
*
)
&
him4
;
len
=
sizeof
(
him4
);
}
else
{
/*
* For IPv6 address construct a sockaddr_in6 structure.
*/
(
*
env
)
->
GetByteArrayRegion
(
env
,
addrArray
,
0
,
16
,
caddr
);
memset
((
char
*
)
&
him6
,
0
,
sizeof
(
him6
));
memcpy
((
void
*
)
&
(
him6
.
sin6_addr
),
caddr
,
sizeof
(
struct
in6_addr
)
);
him6
.
sin6_family
=
AF_INET6
;
sa
=
(
struct
sockaddr
*
)
&
him6
;
len
=
sizeof
(
him6
)
;
}
error
=
(
*
getnameinfo_ptr
)(
sa
,
len
,
host
,
NI_MAXHOST
,
NULL
,
0
,
error
=
getnameinfo
(
sa
,
len
,
host
,
NI_MAXHOST
,
NULL
,
0
,
NI_NAMEREQD
);
NI_NAMEREQD
);
if
(
!
error
)
{
if
(
!
error
)
{
ret
=
(
*
env
)
->
NewStringUTF
(
env
,
host
);
ret
=
(
*
env
)
->
NewStringUTF
(
env
,
host
);
}
}
}
if
(
ret
==
NULL
)
{
if
(
ret
==
NULL
)
{
...
...
src/windows/native/java/net/NetworkInterface.c
浏览文件 @
c872b120
...
@@ -53,36 +53,6 @@
...
@@ -53,36 +53,6 @@
* order and this ensures consistent device number across invocations.
* order and this ensures consistent device number across invocations.
*/
*/
/* IP helper library routines */
int
(
PASCAL
FAR
*
GetIpAddrTable_fn
)();
int
(
PASCAL
FAR
*
GetIfTable_fn
)();
int
(
PASCAL
FAR
*
GetFriendlyIfIndex_fn
)();
int
(
PASCAL
FAR
*
GetAdaptersAddresses_fn
)();
int
(
PASCAL
FAR
*
GetAdaptersInfo_fn
)();
int
(
PASCAL
FAR
*
GetNumberOfInterfaces_fn
)();
/* Enumeration routines */
typedef
int
(
*
EnumerateNetInterfaces
)(
JNIEnv
*
,
netif
**
);
typedef
int
(
*
EnumerateNetAddresses
)(
JNIEnv
*
,
netif
*
,
netaddr
**
);
static
EnumerateNetInterfaces
enumInterfaces_fn
;
static
EnumerateNetAddresses
enumAddresses_fn
;
/* Windows 9x routines are external (not needed on 64-bit) */
#ifndef _WIN64
extern
int
enumInterfaces_win9x
(
JNIEnv
*
,
netif
**
);
extern
int
enumAddresses_win9x
(
JNIEnv
*
,
netif
*
,
netaddr
**
);
extern
int
init_win9x
(
void
);
#endif
/* Windows 95/98/ME running */
static
jboolean
isW9x
;
/* Windows version supports */
static
jboolean
os_supports_ipv6
;
/* various JNI ids */
/* various JNI ids */
jclass
ni_class
;
/* NetworkInterface */
jclass
ni_class
;
/* NetworkInterface */
...
@@ -154,10 +124,10 @@ MIB_IFROW *getIF(jint index) {
...
@@ -154,10 +124,10 @@ MIB_IFROW *getIF(jint index) {
*/
*/
size
=
sizeof
(
MIB_IFTABLE
);
size
=
sizeof
(
MIB_IFTABLE
);
tableP
=
(
MIB_IFTABLE
*
)
malloc
(
size
);
tableP
=
(
MIB_IFTABLE
*
)
malloc
(
size
);
count
=
(
*
GetIfTable_fn
)
(
tableP
,
&
size
,
TRUE
);
count
=
GetIfTable
(
tableP
,
&
size
,
TRUE
);
if
(
count
==
ERROR_INSUFFICIENT_BUFFER
||
count
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
count
==
ERROR_INSUFFICIENT_BUFFER
||
count
==
ERROR_BUFFER_OVERFLOW
)
{
tableP
=
(
MIB_IFTABLE
*
)
realloc
(
tableP
,
size
);
tableP
=
(
MIB_IFTABLE
*
)
realloc
(
tableP
,
size
);
count
=
(
*
GetIfTable_fn
)
(
tableP
,
&
size
,
TRUE
);
count
=
GetIfTable
(
tableP
,
&
size
,
TRUE
);
}
}
if
(
count
!=
NO_ERROR
)
{
if
(
count
!=
NO_ERROR
)
{
...
@@ -172,7 +142,7 @@ MIB_IFROW *getIF(jint index) {
...
@@ -172,7 +142,7 @@ MIB_IFROW *getIF(jint index) {
/*
/*
* Warning the real index is obtained by GetFriendlyIfIndex()
* Warning the real index is obtained by GetFriendlyIfIndex()
*/
*/
ifindex
=
(
*
GetFriendlyIfIndex_fn
)
(
ifrowP
->
dwIndex
);
ifindex
=
GetFriendlyIfIndex
(
ifrowP
->
dwIndex
);
if
(
ifindex
==
index
)
{
if
(
ifindex
==
index
)
{
/*
/*
* Create a copy of the entry so that we can free the table.
* Create a copy of the entry so that we can free the table.
...
@@ -199,7 +169,7 @@ MIB_IFROW *getIF(jint index) {
...
@@ -199,7 +169,7 @@ MIB_IFROW *getIF(jint index) {
* occurs then netifPP be returned as list of netif structures or NULL
* occurs then netifPP be returned as list of netif structures or NULL
* if no interfaces are found.
* if no interfaces are found.
*/
*/
int
enumInterfaces
_win
(
JNIEnv
*
env
,
netif
**
netifPP
)
int
enumInterfaces
(
JNIEnv
*
env
,
netif
**
netifPP
)
{
{
MIB_IFTABLE
*
tableP
;
MIB_IFTABLE
*
tableP
;
MIB_IFROW
*
ifrowP
;
MIB_IFROW
*
ifrowP
;
...
@@ -215,32 +185,16 @@ int enumInterfaces_win(JNIEnv *env, netif **netifPP)
...
@@ -215,32 +185,16 @@ int enumInterfaces_win(JNIEnv *env, netif **netifPP)
*/
*/
size
=
sizeof
(
MIB_IFTABLE
);
size
=
sizeof
(
MIB_IFTABLE
);
tableP
=
(
MIB_IFTABLE
*
)
malloc
(
size
);
tableP
=
(
MIB_IFTABLE
*
)
malloc
(
size
);
ret
=
(
*
GetIfTable_fn
)
(
tableP
,
&
size
,
TRUE
);
ret
=
GetIfTable
(
tableP
,
&
size
,
TRUE
);
if
(
ret
==
ERROR_INSUFFICIENT_BUFFER
||
ret
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
ret
==
ERROR_INSUFFICIENT_BUFFER
||
ret
==
ERROR_BUFFER_OVERFLOW
)
{
tableP
=
(
MIB_IFTABLE
*
)
realloc
(
tableP
,
size
);
tableP
=
(
MIB_IFTABLE
*
)
realloc
(
tableP
,
size
);
ret
=
(
*
GetIfTable_fn
)
(
tableP
,
&
size
,
TRUE
);
ret
=
GetIfTable
(
tableP
,
&
size
,
TRUE
);
}
}
if
(
ret
!=
NO_ERROR
)
{
if
(
ret
!=
NO_ERROR
)
{
if
(
tableP
!=
NULL
)
if
(
tableP
!=
NULL
)
free
(
tableP
);
free
(
tableP
);
#ifndef _WIN64
if
(
isW9x
&&
ret
==
ERROR_NOT_SUPPORTED
)
{
/*
* If ERROR_NOT_SUPPORTED is returned on Windows 98 it means that
* IE5.0 has been installed. In this case we revert to the Windows 95
* approach and avoid using the IP Helper Library.
* See: http://support.microsoft.com/support/kb/articles/q234/5/73.asp
*/
enumInterfaces_fn
=
enumInterfaces_win9x
;
enumAddresses_fn
=
enumAddresses_win9x
;
init_win9x
();
return
(
*
enumInterfaces_fn
)(
env
,
netifPP
);
}
#endif
JNU_ThrowByName
(
env
,
"java/lang/Error"
,
JNU_ThrowByName
(
env
,
"java/lang/Error"
,
"IP Helper Library GetIfTable function failed"
);
"IP Helper Library GetIfTable function failed"
);
...
@@ -328,7 +282,7 @@ int enumInterfaces_win(JNIEnv *env, netif **netifPP)
...
@@ -328,7 +282,7 @@ int enumInterfaces_win(JNIEnv *env, netif **netifPP)
curr
->
displayName
[
ifrowP
->
dwDescrLen
]
=
'\0'
;
curr
->
displayName
[
ifrowP
->
dwDescrLen
]
=
'\0'
;
curr
->
dwIndex
=
ifrowP
->
dwIndex
;
curr
->
dwIndex
=
ifrowP
->
dwIndex
;
curr
->
ifType
=
ifrowP
->
dwType
;
curr
->
ifType
=
ifrowP
->
dwType
;
curr
->
index
=
(
*
GetFriendlyIfIndex_fn
)
(
ifrowP
->
dwIndex
);
curr
->
index
=
GetFriendlyIfIndex
(
ifrowP
->
dwIndex
);
/*
/*
* Put the interface at tail of list as GetIfTable(,,TRUE) is
* Put the interface at tail of list as GetIfTable(,,TRUE) is
...
@@ -384,10 +338,10 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
...
@@ -384,10 +338,10 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
size
=
sizeof
(
MIB_IPADDRTABLE
);
size
=
sizeof
(
MIB_IPADDRTABLE
);
tableP
=
(
MIB_IPADDRTABLE
*
)
malloc
(
size
);
tableP
=
(
MIB_IPADDRTABLE
*
)
malloc
(
size
);
ret
=
(
*
GetIpAddrTable_fn
)(
&
tableP
,
&
size
,
FALSE
);
ret
=
GetIpAddrTable
(
tableP
,
&
size
,
FALSE
);
if
(
ret
==
ERROR_INSUFFICIENT_BUFFER
||
ret
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
ret
==
ERROR_INSUFFICIENT_BUFFER
||
ret
==
ERROR_BUFFER_OVERFLOW
)
{
tableP
=
(
MIB_IPADDRTABLE
*
)
realloc
(
tableP
,
size
);
tableP
=
(
MIB_IPADDRTABLE
*
)
realloc
(
tableP
,
size
);
ret
=
(
*
GetIpAddrTable_fn
)
(
tableP
,
&
size
,
FALSE
);
ret
=
GetIpAddrTable
(
tableP
,
&
size
,
FALSE
);
}
}
if
(
ret
!=
NO_ERROR
)
{
if
(
ret
!=
NO_ERROR
)
{
if
(
tableP
)
{
if
(
tableP
)
{
...
@@ -477,71 +431,6 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
...
@@ -477,71 +431,6 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
JNIEXPORT
void
JNICALL
JNIEXPORT
void
JNICALL
Java_java_net_NetworkInterface_init
(
JNIEnv
*
env
,
jclass
cls
)
Java_java_net_NetworkInterface_init
(
JNIEnv
*
env
,
jclass
cls
)
{
{
OSVERSIONINFO
ver
;
HANDLE
h
;
/*
* First check if this is a Windows 9x machine.
*/
ver
.
dwOSVersionInfoSize
=
sizeof
(
ver
);
GetVersionEx
(
&
ver
);
if
(
ver
.
dwPlatformId
==
VER_PLATFORM_WIN32_WINDOWS
&&
ver
.
dwMajorVersion
==
4
)
{
isW9x
=
JNI_TRUE
;
}
/*
* Try to load the IP Helper Library and obtain the entry points we
* require. This will succeed on 98, NT SP4+, 2000 & XP. It will
* fail on Windows 95 (if IE hasn't been updated) and old versions
* of NT (IP helper library only appeared at SP4). If it fails on
* Windows 9x we will use the registry approach, otherwise if it
* fails we throw an Error indicating that we have an incompatible
* IP helper library.
*/
h
=
LoadLibrary
(
"iphlpapi.dll"
);
if
(
h
!=
NULL
)
{
GetIpAddrTable_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetIpAddrTable"
);
GetIfTable_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetIfTable"
);
GetFriendlyIfIndex_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetFriendlyIfIndex"
);
GetNumberOfInterfaces_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetNumberOfInterfaces"
);
GetAdaptersAddresses_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetAdaptersAddresses"
);
GetAdaptersInfo_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetAdaptersInfo"
);
}
/* IPv6 is supported on Windows versions if the following APIs avail */
os_supports_ipv6
=
(
GetAdaptersAddresses_fn
!=
NULL
)
&&
(
GetNumberOfInterfaces_fn
!=
NULL
)
&&
(
GetAdaptersInfo_fn
!=
NULL
);
if
(
GetIpAddrTable_fn
==
NULL
||
GetIfTable_fn
==
NULL
||
GetFriendlyIfIndex_fn
==
NULL
)
{
#ifndef _WIN64
if
(
isW9x
)
{
/* Use Windows 9x registry approach which requires initialization */
enumInterfaces_fn
=
enumInterfaces_win9x
;
enumAddresses_fn
=
enumAddresses_win9x
;
init_win9x
();
}
else
#endif
{
JNU_ThrowByName
(
env
,
"java/lang/Error"
,
"Incompatible IP helper library (iphlpapi.dll)"
);
return
;
}
}
else
{
enumInterfaces_fn
=
enumInterfaces_win
;
enumAddresses_fn
=
enumAddresses_win
;
}
/*
/*
* Get the various JNI ids that we require
* Get the various JNI ids that we require
*/
*/
...
@@ -581,7 +470,8 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls)
...
@@ -581,7 +470,8 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls)
* populate the InetAddress array based on the IP addresses for this
* populate the InetAddress array based on the IP addresses for this
* interface.
* interface.
*/
*/
jobject
createNetworkInterface
(
JNIEnv
*
env
,
netif
*
ifs
,
int
netaddrCount
,
netaddr
*
netaddrP
)
jobject
createNetworkInterface
(
JNIEnv
*
env
,
netif
*
ifs
,
int
netaddrCount
,
netaddr
*
netaddrP
)
{
{
jobject
netifObj
;
jobject
netifObj
;
jobject
name
,
displayName
;
jobject
name
,
displayName
;
...
@@ -596,7 +486,8 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs, int netaddrCount, netadd
...
@@ -596,7 +486,8 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs, int netaddrCount, netadd
netifObj
=
(
*
env
)
->
NewObject
(
env
,
ni_class
,
ni_ctor
);
netifObj
=
(
*
env
)
->
NewObject
(
env
,
ni_class
,
ni_ctor
);
name
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
name
);
name
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
name
);
if
(
ifs
->
dNameIsUnicode
)
{
if
(
ifs
->
dNameIsUnicode
)
{
displayName
=
(
*
env
)
->
NewString
(
env
,
(
PWCHAR
)
ifs
->
displayName
,
wcslen
((
PWCHAR
)
ifs
->
displayName
));
displayName
=
(
*
env
)
->
NewString
(
env
,
(
PWCHAR
)
ifs
->
displayName
,
(
jsize
)
wcslen
((
PWCHAR
)
ifs
->
displayName
));
}
else
{
}
else
{
displayName
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
displayName
);
displayName
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
displayName
);
}
}
...
@@ -612,7 +503,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs, int netaddrCount, netadd
...
@@ -612,7 +503,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs, int netaddrCount, netadd
* Note that 0 is a valid number of addresses.
* Note that 0 is a valid number of addresses.
*/
*/
if
(
netaddrCount
<
0
)
{
if
(
netaddrCount
<
0
)
{
netaddrCount
=
(
*
enumAddresses_fn
)
(
env
,
ifs
,
&
netaddrP
);
netaddrCount
=
enumAddresses_win
(
env
,
ifs
,
&
netaddrP
);
if
((
*
env
)
->
ExceptionOccurred
(
env
))
{
if
((
*
env
)
->
ExceptionOccurred
(
env
))
{
free_netaddr
(
netaddrP
);
free_netaddr
(
netaddrP
);
return
NULL
;
return
NULL
;
...
@@ -725,12 +616,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0
...
@@ -725,12 +616,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0
const
char
*
name_utf
;
const
char
*
name_utf
;
jobject
netifObj
=
NULL
;
jobject
netifObj
=
NULL
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getByName0_XP
(
env
,
cls
,
name
);
return
Java_java_net_NetworkInterface_getByName0_XP
(
env
,
cls
,
name
);
}
}
/* get the list of interfaces */
/* get the list of interfaces */
if
(
(
*
enumInterfaces_fn
)
(
env
,
&
ifList
)
<
0
)
{
if
(
enumInterfaces
(
env
,
&
ifList
)
<
0
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -771,12 +663,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByIndex0
...
@@ -771,12 +663,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByIndex0
netif
*
ifList
,
*
curr
;
netif
*
ifList
,
*
curr
;
jobject
netifObj
=
NULL
;
jobject
netifObj
=
NULL
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getByIndex0_XP
(
env
,
cls
,
index
);
return
Java_java_net_NetworkInterface_getByIndex0_XP
(
env
,
cls
,
index
);
}
}
/* get the list of interfaces */
/* get the list of interfaces */
if
(
(
*
enumInterfaces_fn
)
(
env
,
&
ifList
)
<
0
)
{
if
(
enumInterfaces
(
env
,
&
ifList
)
<
0
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -812,12 +705,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
...
@@ -812,12 +705,13 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
jint
addr
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ni_iaAddr
);
jint
addr
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ni_iaAddr
);
jobject
netifObj
=
NULL
;
jobject
netifObj
=
NULL
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getByInetAddress0_XP
(
env
,
cls
,
iaObj
);
return
Java_java_net_NetworkInterface_getByInetAddress0_XP
(
env
,
cls
,
iaObj
);
}
}
/* get the list of interfaces */
/* get the list of interfaces */
if
(
(
*
enumInterfaces_fn
)
(
env
,
&
ifList
)
<
0
)
{
if
(
enumInterfaces
(
env
,
&
ifList
)
<
0
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -832,7 +726,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
...
@@ -832,7 +726,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
netaddr
*
addrP
;
netaddr
*
addrP
;
/* enumerate the addresses on this interface */
/* enumerate the addresses on this interface */
count
=
(
*
enumAddresses_fn
)
(
env
,
curr
,
&
addrList
);
count
=
enumAddresses_win
(
env
,
curr
,
&
addrList
);
if
(
count
<
0
)
{
if
(
count
<
0
)
{
free_netif
(
ifList
);
free_netif
(
ifList
);
return
NULL
;
return
NULL
;
...
@@ -881,14 +775,15 @@ JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll
...
@@ -881,14 +775,15 @@ JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll
jobjectArray
netIFArr
;
jobjectArray
netIFArr
;
jint
arr_index
;
jint
arr_index
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getAll_XP
(
env
,
cls
);
return
Java_java_net_NetworkInterface_getAll_XP
(
env
,
cls
);
}
}
/*
/*
* Get list of interfaces
* Get list of interfaces
*/
*/
count
=
(
*
enumInterfaces_fn
)
(
env
,
&
ifList
);
count
=
enumInterfaces
(
env
,
&
ifList
);
if
(
count
<
0
)
{
if
(
count
<
0
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -934,13 +829,16 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0
...
@@ -934,13 +829,16 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
jboolean
ret
=
JNI_FALSE
;
jboolean
ret
=
JNI_FALSE
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_isUp0_XP
(
env
,
cls
,
name
,
index
);
return
Java_java_net_NetworkInterface_isUp0_XP
(
env
,
cls
,
name
,
index
);
}
else
{
}
else
{
MIB_IFROW
*
ifRowP
;
MIB_IFROW
*
ifRowP
;
ifRowP
=
getIF
(
index
);
ifRowP
=
getIF
(
index
);
if
(
ifRowP
!=
NULL
)
{
if
(
ifRowP
!=
NULL
)
{
ret
=
ifRowP
->
dwAdminStatus
==
1
&&
(
ifRowP
->
dwOperStatus
==
MIB_IF_OPER_STATUS_OPERATIONAL
||
ifRowP
->
dwOperStatus
==
MIB_IF_OPER_STATUS_CONNECTED
);
ret
=
ifRowP
->
dwAdminStatus
==
1
&&
(
ifRowP
->
dwOperStatus
==
MIB_IF_OPER_STATUS_OPERATIONAL
||
ifRowP
->
dwOperStatus
==
MIB_IF_OPER_STATUS_CONNECTED
);
free
(
ifRowP
);
free
(
ifRowP
);
}
}
}
}
...
@@ -952,11 +850,13 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0
...
@@ -952,11 +850,13 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0
* Method: isP2P0
* Method: isP2P0
* Signature: (Ljava/lang/String;I)Z
* Signature: (Ljava/lang/String;I)Z
*/
*/
JNIEXPORT
jboolean
JNICALL
Java_java_net_NetworkInterface_isP2P0
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
JNIEXPORT
jboolean
JNICALL
Java_java_net_NetworkInterface_isP2P0
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
MIB_IFROW
*
ifRowP
;
MIB_IFROW
*
ifRowP
;
jboolean
ret
=
JNI_FALSE
;
jboolean
ret
=
JNI_FALSE
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_isP2P0_XP
(
env
,
cls
,
name
,
index
);
return
Java_java_net_NetworkInterface_isP2P0_XP
(
env
,
cls
,
name
,
index
);
}
else
{
}
else
{
ifRowP
=
getIF
(
index
);
ifRowP
=
getIF
(
index
);
...
@@ -983,7 +883,8 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0
...
@@ -983,7 +883,8 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0
MIB_IFROW
*
ifRowP
;
MIB_IFROW
*
ifRowP
;
jboolean
ret
=
JNI_FALSE
;
jboolean
ret
=
JNI_FALSE
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_isLoopback0_XP
(
env
,
cls
,
name
,
index
);
return
Java_java_net_NetworkInterface_isLoopback0_XP
(
env
,
cls
,
name
,
index
);
}
else
{
}
else
{
ifRowP
=
getIF
(
index
);
ifRowP
=
getIF
(
index
);
...
@@ -1003,22 +904,8 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0
...
@@ -1003,22 +904,8 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0
*/
*/
JNIEXPORT
jboolean
JNICALL
Java_java_net_NetworkInterface_supportsMulticast0
JNIEXPORT
jboolean
JNICALL
Java_java_net_NetworkInterface_supportsMulticast0
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
(
JNIEnv
*
env
,
jclass
cls
,
jstring
name
,
jint
index
)
{
MIB_IFROW
*
ifRowP
;
return
Java_java_net_NetworkInterface_supportsMulticast0_XP
(
env
,
cls
,
jboolean
ret
=
JNI_TRUE
;
// Let's try to use the newer API (XP & 2003 only)
if
(
GetAdaptersAddresses_fn
!=
NULL
)
{
ret
=
Java_java_net_NetworkInterface_supportsMulticast0_XP
(
env
,
cls
,
name
,
index
);
name
,
index
);
return
ret
;
}
ifRowP
=
getIF
(
index
);
if
(
ifRowP
!=
NULL
)
{
if
(
ifRowP
->
dwType
==
MIB_IF_TYPE_LOOPBACK
)
ret
=
JNI_FALSE
;
free
(
ifRowP
);
}
return
ret
;
}
}
/*
/*
...
@@ -1026,12 +913,14 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0
...
@@ -1026,12 +913,14 @@ JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0
* Method: getMacAddr0
* Method: getMacAddr0
* Signature: ([bLjava/lang/String;I)[b
* Signature: ([bLjava/lang/String;I)[b
*/
*/
JNIEXPORT
jbyteArray
JNICALL
Java_java_net_NetworkInterface_getMacAddr0
(
JNIEnv
*
env
,
jclass
class
,
jbyteArray
addrArray
,
jstring
name
,
jint
index
)
{
JNIEXPORT
jbyteArray
JNICALL
Java_java_net_NetworkInterface_getMacAddr0
(
JNIEnv
*
env
,
jclass
class
,
jbyteArray
addrArray
,
jstring
name
,
jint
index
)
{
jbyteArray
ret
=
NULL
;
jbyteArray
ret
=
NULL
;
int
len
;
int
len
;
MIB_IFROW
*
ifRowP
;
MIB_IFROW
*
ifRowP
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getMacAddr0_XP
(
env
,
class
,
name
,
index
);
return
Java_java_net_NetworkInterface_getMacAddr0_XP
(
env
,
class
,
name
,
index
);
}
else
{
}
else
{
ifRowP
=
getIF
(
index
);
ifRowP
=
getIF
(
index
);
...
@@ -1058,11 +947,13 @@ JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0(JNIEnv *
...
@@ -1058,11 +947,13 @@ JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0(JNIEnv *
* Method: getMTU0
* Method: getMTU0
* Signature: ([bLjava/lang/String;I)I
* Signature: ([bLjava/lang/String;I)I
*/
*/
JNIEXPORT
jint
JNICALL
Java_java_net_NetworkInterface_getMTU0
(
JNIEnv
*
env
,
jclass
class
,
jstring
name
,
jint
index
)
{
JNIEXPORT
jint
JNICALL
Java_java_net_NetworkInterface_getMTU0
(
JNIEnv
*
env
,
jclass
class
,
jstring
name
,
jint
index
)
{
jint
ret
=
-
1
;
jint
ret
=
-
1
;
MIB_IFROW
*
ifRowP
;
MIB_IFROW
*
ifRowP
;
if
(
os_supports_ipv6
&&
ipv6_available
())
{
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
if
(
ipv6_available
())
{
return
Java_java_net_NetworkInterface_getMTU0_XP
(
env
,
class
,
name
,
index
);
return
Java_java_net_NetworkInterface_getMTU0_XP
(
env
,
class
,
name
,
index
);
}
else
{
}
else
{
ifRowP
=
getIF
(
index
);
ifRowP
=
getIF
(
index
);
...
...
src/windows/native/java/net/NetworkInterface.h
浏览文件 @
c872b120
...
@@ -87,338 +87,6 @@ extern jfieldID ni_ibaddressID; /* InterfaceAddress.address */
...
@@ -87,338 +87,6 @@ extern jfieldID ni_ibaddressID; /* InterfaceAddress.address */
extern
jfieldID
ni_ibbroadcastID
;
/* InterfaceAddress.broadcast */
extern
jfieldID
ni_ibbroadcastID
;
/* InterfaceAddress.broadcast */
extern
jfieldID
ni_ibmaskID
;
/* InterfaceAddress.maskLength */
extern
jfieldID
ni_ibmaskID
;
/* InterfaceAddress.maskLength */
int
enumInterfaces_win
(
JNIEnv
*
env
,
netif
**
netifPP
);
int
enumInterfaces
(
JNIEnv
*
env
,
netif
**
netifPP
);
/* We have included iphlpapi.h which includes iptypes.h which has the definition
* for MAX_ADAPTER_DESCRIPTION_LENGTH (along with the other definitions in this
* ifndef block). Therefore if MAX_ADAPTER_DESCRIPTION_LENGTH is defined we can
* be sure that the other definitions are also defined */
#ifndef MAX_ADAPTER_DESCRIPTION_LENGTH
/*
* Following includes come from iptypes.h
*/
#pragma warning(push)
#pragma warning(disable:4201)
#include <time.h>
// Definitions and structures used by getnetworkparams and getadaptersinfo apis
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb.
#define MAX_ADAPTER_NAME_LENGTH 256 // arb.
#define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb.
#define DEFAULT_MINIMUM_ENTITIES 32 // arb.
#define MAX_HOSTNAME_LEN 128 // arb.
#define MAX_DOMAIN_NAME_LEN 128 // arb.
#define MAX_SCOPE_ID_LEN 256 // arb.
//
// types
//
// Node Type
#define BROADCAST_NODETYPE 1
#define PEER_TO_PEER_NODETYPE 2
#define MIXED_NODETYPE 4
#define HYBRID_NODETYPE 8
//
// IP_ADDRESS_STRING - store an IP address as a dotted decimal string
//
typedef
struct
{
char
String
[
4
*
4
];
}
IP_ADDRESS_STRING
,
*
PIP_ADDRESS_STRING
,
IP_MASK_STRING
,
*
PIP_MASK_STRING
;
//
// IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
// both as dotted decimal strings
//
typedef
struct
_IP_ADDR_STRING
{
struct
_IP_ADDR_STRING
*
Next
;
IP_ADDRESS_STRING
IpAddress
;
IP_MASK_STRING
IpMask
;
DWORD
Context
;
}
IP_ADDR_STRING
,
*
PIP_ADDR_STRING
;
//
// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
// strings
//
typedef
struct
_IP_ADAPTER_INFO
{
struct
_IP_ADAPTER_INFO
*
Next
;
DWORD
ComboIndex
;
char
AdapterName
[
MAX_ADAPTER_NAME_LENGTH
+
4
];
char
Description
[
MAX_ADAPTER_DESCRIPTION_LENGTH
+
4
];
UINT
AddressLength
;
BYTE
Address
[
MAX_ADAPTER_ADDRESS_LENGTH
];
DWORD
Index
;
UINT
Type
;
UINT
DhcpEnabled
;
PIP_ADDR_STRING
CurrentIpAddress
;
IP_ADDR_STRING
IpAddressList
;
IP_ADDR_STRING
GatewayList
;
IP_ADDR_STRING
DhcpServer
;
BOOL
HaveWins
;
IP_ADDR_STRING
PrimaryWinsServer
;
IP_ADDR_STRING
SecondaryWinsServer
;
time_t
LeaseObtained
;
time_t
LeaseExpires
;
}
IP_ADAPTER_INFO
,
*
PIP_ADAPTER_INFO
;
#ifdef _WINSOCK2API_
//
// The following types require Winsock2.
//
typedef
enum
{
IpPrefixOriginOther
=
0
,
IpPrefixOriginManual
,
IpPrefixOriginWellKnown
,
IpPrefixOriginDhcp
,
IpPrefixOriginRouterAdvertisement
,
}
IP_PREFIX_ORIGIN
;
typedef
enum
{
IpSuffixOriginOther
=
0
,
IpSuffixOriginManual
,
IpSuffixOriginWellKnown
,
IpSuffixOriginDhcp
,
IpSuffixOriginLinkLayerAddress
,
IpSuffixOriginRandom
,
}
IP_SUFFIX_ORIGIN
;
typedef
enum
{
IpDadStateInvalid
=
0
,
IpDadStateTentative
,
IpDadStateDuplicate
,
IpDadStateDeprecated
,
IpDadStatePreferred
,
}
IP_DAD_STATE
;
typedef
struct
_IP_ADAPTER_UNICAST_ADDRESS
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
Flags
;
};
};
struct
_IP_ADAPTER_UNICAST_ADDRESS
*
Next
;
SOCKET_ADDRESS
Address
;
IP_PREFIX_ORIGIN
PrefixOrigin
;
IP_SUFFIX_ORIGIN
SuffixOrigin
;
IP_DAD_STATE
DadState
;
ULONG
ValidLifetime
;
ULONG
PreferredLifetime
;
ULONG
LeaseLifetime
;
}
IP_ADAPTER_UNICAST_ADDRESS
,
*
PIP_ADAPTER_UNICAST_ADDRESS
;
typedef
struct
_IP_ADAPTER_ANYCAST_ADDRESS
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
Flags
;
};
};
struct
_IP_ADAPTER_ANYCAST_ADDRESS
*
Next
;
SOCKET_ADDRESS
Address
;
}
IP_ADAPTER_ANYCAST_ADDRESS
,
*
PIP_ADAPTER_ANYCAST_ADDRESS
;
typedef
struct
_IP_ADAPTER_MULTICAST_ADDRESS
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
Flags
;
};
};
struct
_IP_ADAPTER_MULTICAST_ADDRESS
*
Next
;
SOCKET_ADDRESS
Address
;
}
IP_ADAPTER_MULTICAST_ADDRESS
,
*
PIP_ADAPTER_MULTICAST_ADDRESS
;
//
// Per-address Flags
//
#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x01
#define IP_ADAPTER_ADDRESS_TRANSIENT 0x02
typedef
struct
_IP_ADAPTER_DNS_SERVER_ADDRESS
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
Reserved
;
};
};
struct
_IP_ADAPTER_DNS_SERVER_ADDRESS
*
Next
;
SOCKET_ADDRESS
Address
;
}
IP_ADAPTER_DNS_SERVER_ADDRESS
,
*
PIP_ADAPTER_DNS_SERVER_ADDRESS
;
typedef
struct
_IP_ADAPTER_PREFIX
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
Flags
;
};
};
struct
_IP_ADAPTER_PREFIX
*
Next
;
SOCKET_ADDRESS
Address
;
ULONG
PrefixLength
;
}
IP_ADAPTER_PREFIX
,
*
PIP_ADAPTER_PREFIX
;
//
// Per-adapter Flags
//
#define IP_ADAPTER_DDNS_ENABLED 0x01
#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x02
#define IP_ADAPTER_DHCP_ENABLED 0x04
#define IP_ADAPTER_RECEIVE_ONLY 0x08
#define IP_ADAPTER_NO_MULTICAST 0x10
#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20
//
// OperStatus values from RFC 2863
//
typedef
enum
{
IfOperStatusUp
=
1
,
IfOperStatusDown
,
IfOperStatusTesting
,
IfOperStatusUnknown
,
IfOperStatusDormant
,
IfOperStatusNotPresent
,
IfOperStatusLowerLayerDown
}
IF_OPER_STATUS
;
//
// Scope levels from RFC 2373 used with ZoneIndices array.
//
typedef
enum
{
ScopeLevelInterface
=
1
,
ScopeLevelLink
=
2
,
ScopeLevelSubnet
=
3
,
ScopeLevelAdmin
=
4
,
ScopeLevelSite
=
5
,
ScopeLevelOrganization
=
8
,
ScopeLevelGlobal
=
14
}
SCOPE_LEVEL
;
typedef
struct
_IP_ADAPTER_ADDRESSES
{
union
{
ULONGLONG
Alignment
;
struct
{
ULONG
Length
;
DWORD
IfIndex
;
};
};
struct
_IP_ADAPTER_ADDRESSES
*
Next
;
PCHAR
AdapterName
;
PIP_ADAPTER_UNICAST_ADDRESS
FirstUnicastAddress
;
PIP_ADAPTER_ANYCAST_ADDRESS
FirstAnycastAddress
;
PIP_ADAPTER_MULTICAST_ADDRESS
FirstMulticastAddress
;
PIP_ADAPTER_DNS_SERVER_ADDRESS
FirstDnsServerAddress
;
PWCHAR
DnsSuffix
;
PWCHAR
Description
;
PWCHAR
FriendlyName
;
BYTE
PhysicalAddress
[
MAX_ADAPTER_ADDRESS_LENGTH
];
DWORD
PhysicalAddressLength
;
DWORD
Flags
;
DWORD
Mtu
;
DWORD
IfType
;
IF_OPER_STATUS
OperStatus
;
DWORD
Ipv6IfIndex
;
DWORD
ZoneIndices
[
16
];
PIP_ADAPTER_PREFIX
FirstPrefix
;
}
IP_ADAPTER_ADDRESSES
,
*
PIP_ADAPTER_ADDRESSES
;
//
// Flags used as argument to GetAdaptersAddresses().
// "SKIP" flags are added when the default is to include the information.
// "INCLUDE" flags are added when the default is to skip the information.
//
#define GAA_FLAG_SKIP_UNICAST 0x0001
#define GAA_FLAG_SKIP_ANYCAST 0x0002
#define GAA_FLAG_SKIP_MULTICAST 0x0004
#define GAA_FLAG_SKIP_DNS_SERVER 0x0008
#define GAA_FLAG_INCLUDE_PREFIX 0x0010
#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
#endif
/* _WINSOCK2API_ */
//
// IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.
//
typedef
struct
_IP_PER_ADAPTER_INFO
{
UINT
AutoconfigEnabled
;
UINT
AutoconfigActive
;
PIP_ADDR_STRING
CurrentDnsServer
;
IP_ADDR_STRING
DnsServerList
;
}
IP_PER_ADAPTER_INFO
,
*
PIP_PER_ADAPTER_INFO
;
//
// FIXED_INFO - the set of IP-related information which does not depend on DHCP
//
typedef
struct
{
char
HostName
[
MAX_HOSTNAME_LEN
+
4
]
;
char
DomainName
[
MAX_DOMAIN_NAME_LEN
+
4
];
PIP_ADDR_STRING
CurrentDnsServer
;
IP_ADDR_STRING
DnsServerList
;
UINT
NodeType
;
char
ScopeId
[
MAX_SCOPE_ID_LEN
+
4
];
UINT
EnableRouting
;
UINT
EnableProxy
;
UINT
EnableDns
;
}
FIXED_INFO
,
*
PFIXED_INFO
;
#pragma warning(pop)
#endif
/*!MAX_ADAPTER_DESCRIPTION_LENGTH*/
#ifndef IP_INTERFACE_NAME_INFO_DEFINED
#define IP_INTERFACE_NAME_INFO_DEFINED
typedef
struct
ip_interface_name_info
{
ULONG
Index
;
// Interface Index
ULONG
MediaType
;
// Interface Types - see ipifcons.h
UCHAR
ConnectionType
;
UCHAR
AccessType
;
GUID
DeviceGuid
;
// Device GUID is the guid of the device
// that IP exposes
GUID
InterfaceGuid
;
// Interface GUID, if not GUID_NULL is the
// GUID for the interface mapped to the device.
}
IP_INTERFACE_NAME_INFO
,
*
PIP_INTERFACE_NAME_INFO
;
#endif
/* from ipifcons.h */
#ifndef IF_TYPE_PPP
#define IF_TYPE_PPP 23
#endif
#ifndef IF_TYPE_SOFTWARE_LOOPBACK
#define IF_TYPE_SOFTWARE_LOOPBACK 24
#endif
#ifndef IF_TYPE_SLIP
#define IF_TYPE_SLIP 28
#endif
#ifndef IF_TYPE_TUNNEL
#define IF_TYPE_TUNNEL 131
#endif
#endif
#endif
src/windows/native/java/net/NetworkInterface_win9x.c
已删除
100644 → 0
浏览文件 @
9c787302
此差异已折叠。
点击以展开。
src/windows/native/java/net/NetworkInterface_winXP.c
浏览文件 @
c872b120
...
@@ -43,14 +43,6 @@
...
@@ -43,14 +43,6 @@
extern
int
enumAddresses_win
(
JNIEnv
*
env
,
netif
*
netifP
,
netaddr
**
netaddrPP
);
extern
int
enumAddresses_win
(
JNIEnv
*
env
,
netif
*
netifP
,
netaddr
**
netaddrPP
);
int
getAddrsFromAdapter
(
IP_ADAPTER_ADDRESSES
*
ptr
,
netaddr
**
netaddrPP
);
int
getAddrsFromAdapter
(
IP_ADAPTER_ADDRESSES
*
ptr
,
netaddr
**
netaddrPP
);
/* IP helper library routines */
int
(
PASCAL
FAR
*
GetIpAddrTable_fn
)();
int
(
PASCAL
FAR
*
GetIfTable_fn
)();
int
(
PASCAL
FAR
*
GetFriendlyIfIndex_fn
)();
int
(
PASCAL
FAR
*
GetAdaptersAddresses_fn
)();
int
(
PASCAL
FAR
*
GetAdaptersInfo_fn
)();
int
(
PASCAL
FAR
*
GetNumberOfInterfaces_fn
)();
#ifdef DEBUG
#ifdef DEBUG
void
printnif
(
netif
*
nif
)
{
void
printnif
(
netif
*
nif
)
{
#ifdef _WIN64
#ifdef _WIN64
...
@@ -96,14 +88,14 @@ static int getAdapters (JNIEnv *env, IP_ADAPTER_ADDRESSES **adapters) {
...
@@ -96,14 +88,14 @@ static int getAdapters (JNIEnv *env, IP_ADAPTER_ADDRESSES **adapters) {
flags
=
GAA_FLAG_SKIP_DNS_SERVER
;
flags
=
GAA_FLAG_SKIP_DNS_SERVER
;
flags
|=
GAA_FLAG_SKIP_MULTICAST
;
flags
|=
GAA_FLAG_SKIP_MULTICAST
;
flags
|=
GAA_FLAG_INCLUDE_PREFIX
;
flags
|=
GAA_FLAG_INCLUDE_PREFIX
;
ret
=
(
*
GetAdaptersAddresses_fn
)
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
ret
=
GetAdaptersAddresses
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
if
(
ret
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
ret
==
ERROR_BUFFER_OVERFLOW
)
{
adapterInfo
=
(
IP_ADAPTER_ADDRESSES
*
)
realloc
(
adapterInfo
,
len
);
adapterInfo
=
(
IP_ADAPTER_ADDRESSES
*
)
realloc
(
adapterInfo
,
len
);
if
(
adapterInfo
==
0
)
{
if
(
adapterInfo
==
0
)
{
return
-
1
;
return
-
1
;
}
}
bufsize
=
len
;
bufsize
=
len
;
ret
=
(
*
GetAdaptersAddresses_fn
)
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
ret
=
GetAdaptersAddresses
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
}
}
if
(
ret
!=
ERROR_SUCCESS
)
{
if
(
ret
!=
ERROR_SUCCESS
)
{
free
(
adapterInfo
);
free
(
adapterInfo
);
...
@@ -133,7 +125,7 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
...
@@ -133,7 +125,7 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
flags
=
GAA_FLAG_SKIP_DNS_SERVER
;
flags
=
GAA_FLAG_SKIP_DNS_SERVER
;
flags
|=
GAA_FLAG_SKIP_MULTICAST
;
flags
|=
GAA_FLAG_SKIP_MULTICAST
;
flags
|=
GAA_FLAG_INCLUDE_PREFIX
;
flags
|=
GAA_FLAG_INCLUDE_PREFIX
;
val
=
(
*
GetAdaptersAddresses_fn
)
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
val
=
GetAdaptersAddresses
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
if
(
val
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
val
==
ERROR_BUFFER_OVERFLOW
)
{
adapterInfo
=
(
IP_ADAPTER_ADDRESSES
*
)
realloc
(
adapterInfo
,
len
);
adapterInfo
=
(
IP_ADAPTER_ADDRESSES
*
)
realloc
(
adapterInfo
,
len
);
if
(
adapterInfo
==
0
)
{
if
(
adapterInfo
==
0
)
{
...
@@ -141,7 +133,7 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
...
@@ -141,7 +133,7 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
return
NULL
;
return
NULL
;
}
}
bufsize
=
len
;
bufsize
=
len
;
val
=
(
*
GetAdaptersAddresses_fn
)
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
val
=
GetAdaptersAddresses
(
AF_UNSPEC
,
flags
,
NULL
,
adapterInfo
,
&
len
);
}
}
if
(
val
!=
ERROR_SUCCESS
)
{
if
(
val
!=
ERROR_SUCCESS
)
{
free
(
adapterInfo
);
free
(
adapterInfo
);
...
@@ -182,7 +174,7 @@ int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
...
@@ -182,7 +174,7 @@ int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
* as what previous JDK versions would return.
* as what previous JDK versions would return.
*/
*/
ret
=
enumInterfaces
_win
(
env
,
netifPP
);
ret
=
enumInterfaces
(
env
,
netifPP
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
return
-
1
;
return
-
1
;
}
else
{
}
else
{
...
@@ -221,7 +213,7 @@ int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
...
@@ -221,7 +213,7 @@ int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
* (b) IPv6 information for IPv6 only interfaces (probably tunnels)
* (b) IPv6 information for IPv6 only interfaces (probably tunnels)
*
*
* For compatibility with previous releases we use the naming
* For compatibility with previous releases we use the naming
* information gotten from enumInterfaces
_win
() for (a) entries
* information gotten from enumInterfaces() for (a) entries
* However, the index numbers are taken from the new API.
* However, the index numbers are taken from the new API.
*
*
* The procedure is to go through the list of adapters returned
* The procedure is to go through the list of adapters returned
...
@@ -439,7 +431,8 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
...
@@ -439,7 +431,8 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
netifObj
=
(
*
env
)
->
NewObject
(
env
,
ni_class
,
ni_ctor
);
netifObj
=
(
*
env
)
->
NewObject
(
env
,
ni_class
,
ni_ctor
);
name
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
name
);
name
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
name
);
if
(
ifs
->
dNameIsUnicode
)
{
if
(
ifs
->
dNameIsUnicode
)
{
displayName
=
(
*
env
)
->
NewString
(
env
,
(
PWCHAR
)
ifs
->
displayName
,
wcslen
((
PWCHAR
)
ifs
->
displayName
));
displayName
=
(
*
env
)
->
NewString
(
env
,
(
PWCHAR
)
ifs
->
displayName
,
(
jsize
)
wcslen
((
PWCHAR
)
ifs
->
displayName
));
}
else
{
}
else
{
displayName
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
displayName
);
displayName
=
(
*
env
)
->
NewStringUTF
(
env
,
ifs
->
displayName
);
}
}
...
...
src/windows/native/java/net/net_util_md.c
浏览文件 @
c872b120
...
@@ -39,10 +39,6 @@
...
@@ -39,10 +39,6 @@
/* true if SO_RCVTIMEO is supported */
/* true if SO_RCVTIMEO is supported */
jboolean
isRcvTimeoutSupported
=
JNI_TRUE
;
jboolean
isRcvTimeoutSupported
=
JNI_TRUE
;
LPFN_GETADDRINFO
getaddrinfo_ptr
=
NULL
;
LPFN_FREEADDRINFO
freaddrinfo_ptr
=
NULL
;
LPFN_GETNAMEINFO
getnameinfo_ptr
=
NULL
;
/*
/*
* Table of Windows Sockets errors, the specific exception we
* Table of Windows Sockets errors, the specific exception we
* throw for the error, and the error text.
* throw for the error, and the error text.
...
@@ -233,38 +229,15 @@ NET_GetFileDescriptorID(JNIEnv *env)
...
@@ -233,38 +229,15 @@ NET_GetFileDescriptorID(JNIEnv *env)
jint
IPv6_supported
()
jint
IPv6_supported
()
{
{
HMODULE
lib
;
SOCKET
s
=
socket
(
AF_INET6
,
SOCK_STREAM
,
0
)
;
int
fd
=
socket
(
AF_INET6
,
SOCK_STREAM
,
0
)
;
if
(
s
<
0
)
{
if
(
fd
<
0
)
{
return
JNI_FALSE
;
}
closesocket
(
fd
);
if
((
lib
=
LoadLibrary
(
"ws2_32.dll"
))
==
NULL
)
{
return
JNI_FALSE
;
}
if
((
getaddrinfo_ptr
=
(
LPFN_GETADDRINFO
)
GetProcAddress
(
lib
,
"getaddrinfo"
))
==
NULL
)
{
FreeLibrary
(
lib
);
return
JNI_FALSE
;
return
JNI_FALSE
;
}
}
if
((
freeaddrinfo_ptr
=
(
LPFN_FREEADDRINFO
)
GetProcAddress
(
lib
,
"freeaddrinfo"
))
==
NULL
)
{
closesocket
(
s
);
FreeLibrary
(
lib
);
return
JNI_FALSE
;
}
if
((
getnameinfo_ptr
=
(
LPFN_GETNAMEINFO
)
GetProcAddress
(
lib
,
"getnameinfo"
))
==
NULL
)
{
FreeLibrary
(
lib
);
return
JNI_FALSE
;
}
FreeLibrary
(
lib
);
return
JNI_TRUE
;
return
JNI_TRUE
;
}
}
jboolean
NET_addrtransAvailable
()
{
return
(
jboolean
)(
getaddrinfo_ptr
!=
NULL
);
}
/*
/*
* Return the default TOS value
* Return the default TOS value
*/
*/
...
@@ -664,7 +637,7 @@ NET_BindV6(struct ipv6bind* b) {
...
@@ -664,7 +637,7 @@ NET_BindV6(struct ipv6bind* b) {
if
(
family
==
AF_INET
&&
(
b
->
addr
->
him4
.
sin_addr
.
s_addr
!=
INADDR_ANY
))
{
if
(
family
==
AF_INET
&&
(
b
->
addr
->
him4
.
sin_addr
.
s_addr
!=
INADDR_ANY
))
{
/* bind to v4 only */
/* bind to v4 only */
int
ret
;
int
ret
;
ret
=
NET_Bind
(
b
->
ipv4_fd
,
(
struct
sockaddr
*
)
b
->
addr
,
ret
=
NET_Bind
(
(
int
)
b
->
ipv4_fd
,
(
struct
sockaddr
*
)
b
->
addr
,
sizeof
(
struct
sockaddr_in
));
sizeof
(
struct
sockaddr_in
));
if
(
ret
==
SOCKET_ERROR
)
{
if
(
ret
==
SOCKET_ERROR
)
{
CLOSE_SOCKETS_AND_RETURN
;
CLOSE_SOCKETS_AND_RETURN
;
...
@@ -676,7 +649,7 @@ NET_BindV6(struct ipv6bind* b) {
...
@@ -676,7 +649,7 @@ NET_BindV6(struct ipv6bind* b) {
if
(
family
==
AF_INET6
&&
(
!
IN6_IS_ADDR_ANY
(
&
b
->
addr
->
him6
.
sin6_addr
)))
{
if
(
family
==
AF_INET6
&&
(
!
IN6_IS_ADDR_ANY
(
&
b
->
addr
->
him6
.
sin6_addr
)))
{
/* bind to v6 only */
/* bind to v6 only */
int
ret
;
int
ret
;
ret
=
NET_Bind
(
b
->
ipv6_fd
,
(
struct
sockaddr
*
)
b
->
addr
,
ret
=
NET_Bind
(
(
int
)
b
->
ipv6_fd
,
(
struct
sockaddr
*
)
b
->
addr
,
sizeof
(
struct
SOCKADDR_IN6
));
sizeof
(
struct
SOCKADDR_IN6
));
if
(
ret
==
SOCKET_ERROR
)
{
if
(
ret
==
SOCKET_ERROR
)
{
CLOSE_SOCKETS_AND_RETURN
;
CLOSE_SOCKETS_AND_RETURN
;
...
@@ -691,15 +664,15 @@ NET_BindV6(struct ipv6bind* b) {
...
@@ -691,15 +664,15 @@ NET_BindV6(struct ipv6bind* b) {
memset
(
&
oaddr
,
0
,
sizeof
(
oaddr
));
memset
(
&
oaddr
,
0
,
sizeof
(
oaddr
));
if
(
family
==
AF_INET
)
{
if
(
family
==
AF_INET
)
{
ofamily
=
AF_INET6
;
ofamily
=
AF_INET6
;
fd
=
b
->
ipv4_fd
;
fd
=
(
int
)
b
->
ipv4_fd
;
ofd
=
b
->
ipv6_fd
;
ofd
=
(
int
)
b
->
ipv6_fd
;
port
=
(
u_short
)
GET_PORT
(
b
->
addr
);
port
=
(
u_short
)
GET_PORT
(
b
->
addr
);
IN6ADDR_SETANY
(
&
oaddr
.
him6
);
IN6ADDR_SETANY
(
&
oaddr
.
him6
);
oaddr
.
him6
.
sin6_port
=
port
;
oaddr
.
him6
.
sin6_port
=
port
;
}
else
{
}
else
{
ofamily
=
AF_INET
;
ofamily
=
AF_INET
;
ofd
=
b
->
ipv4_fd
;
ofd
=
(
int
)
b
->
ipv4_fd
;
fd
=
b
->
ipv6_fd
;
fd
=
(
int
)
b
->
ipv6_fd
;
port
=
(
u_short
)
GET_PORT
(
b
->
addr
);
port
=
(
u_short
)
GET_PORT
(
b
->
addr
);
oaddr
.
him4
.
sin_family
=
AF_INET
;
oaddr
.
him4
.
sin_family
=
AF_INET
;
oaddr
.
him4
.
sin_port
=
port
;
oaddr
.
him4
.
sin_port
=
port
;
...
@@ -744,11 +717,11 @@ NET_BindV6(struct ipv6bind* b) {
...
@@ -744,11 +717,11 @@ NET_BindV6(struct ipv6bind* b) {
b
->
ipv6_fd
=
SOCKET_ERROR
;
b
->
ipv6_fd
=
SOCKET_ERROR
;
/* create two new sockets */
/* create two new sockets */
fd
=
socket
(
family
,
sotype
,
0
);
fd
=
(
int
)
socket
(
family
,
sotype
,
0
);
if
(
fd
==
SOCKET_ERROR
)
{
if
(
fd
==
SOCKET_ERROR
)
{
CLOSE_SOCKETS_AND_RETURN
;
CLOSE_SOCKETS_AND_RETURN
;
}
}
ofd
=
socket
(
ofamily
,
sotype
,
0
);
ofd
=
(
int
)
socket
(
ofamily
,
sotype
,
0
);
if
(
ofd
==
SOCKET_ERROR
)
{
if
(
ofd
==
SOCKET_ERROR
)
{
CLOSE_SOCKETS_AND_RETURN
;
CLOSE_SOCKETS_AND_RETURN
;
}
}
...
@@ -1001,10 +974,10 @@ NET_Wait(JNIEnv *env, jint fd, jint flags, jint timeout)
...
@@ -1001,10 +974,10 @@ NET_Wait(JNIEnv *env, jint fd, jint flags, jint timeout)
}
}
int
NET_Socket
(
int
domain
,
int
type
,
int
protocol
)
{
int
NET_Socket
(
int
domain
,
int
type
,
int
protocol
)
{
int
sock
;
SOCKET
sock
;
sock
=
socket
(
domain
,
type
,
protocol
);
sock
=
socket
(
domain
,
type
,
protocol
);
if
(
sock
!=
INVALID_SOCKET
)
{
if
(
sock
!=
INVALID_SOCKET
)
{
SetHandleInformation
((
HANDLE
)(
uintptr_t
)
sock
,
HANDLE_FLAG_INHERIT
,
FALSE
);
SetHandleInformation
((
HANDLE
)(
uintptr_t
)
sock
,
HANDLE_FLAG_INHERIT
,
FALSE
);
}
}
return
sock
;
return
(
int
)
sock
;
}
}
src/windows/native/java/net/net_util_md.h
浏览文件 @
c872b120
...
@@ -209,10 +209,6 @@ int
...
@@ -209,10 +209,6 @@ int
);
);
#endif
#endif
LPFN_GETADDRINFO
getaddrinfo_ptr
;
LPFN_FREEADDRINFO
freeaddrinfo_ptr
;
LPFN_GETNAMEINFO
getnameinfo_ptr
;
/* used to disable connection reset messages on Windows XP */
/* used to disable connection reset messages on Windows XP */
#ifndef SIO_UDP_CONNRESET
#ifndef SIO_UDP_CONNRESET
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
...
@@ -302,8 +298,6 @@ void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name,
...
@@ -302,8 +298,6 @@ void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name,
void
NET_ThrowSocketException
(
JNIEnv
*
env
,
char
*
msg
);
void
NET_ThrowSocketException
(
JNIEnv
*
env
,
char
*
msg
);
jboolean
NET_addrtransAvailable
();
/*
/*
* differs from NET_Timeout() as follows:
* differs from NET_Timeout() as follows:
*
*
...
...
src/windows/native/sun/net/dns/ResolverConfigurationImpl.c
浏览文件 @
c872b120
/*
/*
* Copyright (c) 2002, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include <iprtrmib.h>
#include <iprtrmib.h>
#include <time.h>
#include <time.h>
#include <assert.h>
#include <assert.h>
#include <iphlpapi.h>
#include "jni_util.h"
#include "jni_util.h"
...
@@ -42,93 +43,17 @@
...
@@ -42,93 +43,17 @@
#define IS_SL_FOUND(sts) (sts & STS_SL_FOUND)
#define IS_SL_FOUND(sts) (sts & STS_SL_FOUND)
#define IS_NS_FOUND(sts) (sts & STS_NS_FOUND)
#define IS_NS_FOUND(sts) (sts & STS_NS_FOUND)
/*
/* JNI ids */
* Visual C++ SP3 (as required by J2SE 1.4.0) is missing some of
* the definitions required for the IP helper library routines that
* were added in Windows 98 & Windows 2000.
*/
#ifndef MAX_ADAPTER_NAME_LENGTH
#define MAX_ADAPTER_ADDRESS_LENGTH 8
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128
#define MAX_ADAPTER_NAME_LENGTH 256
#define MAX_HOSTNAME_LEN 128
#define MAX_DOMAIN_NAME_LEN 128
#define MAX_SCOPE_ID_LEN 256
typedef
struct
{
char
String
[
4
*
4
];
}
IP_ADDRESS_STRING
,
*
PIP_ADDRESS_STRING
,
IP_MASK_STRING
,
*
PIP_MASK_STRING
;
typedef
struct
_IP_ADDR_STRING
{
struct
_IP_ADDR_STRING
*
Next
;
IP_ADDRESS_STRING
IpAddress
;
IP_MASK_STRING
IpMask
;
DWORD
Context
;
}
IP_ADDR_STRING
,
*
PIP_ADDR_STRING
;
typedef
struct
_IP_ADAPTER_INFO
{
struct
_IP_ADAPTER_INFO
*
Next
;
DWORD
ComboIndex
;
char
AdapterName
[
MAX_ADAPTER_NAME_LENGTH
+
4
];
char
Description
[
MAX_ADAPTER_DESCRIPTION_LENGTH
+
4
];
UINT
AddressLength
;
BYTE
Address
[
MAX_ADAPTER_ADDRESS_LENGTH
];
DWORD
Index
;
UINT
Type
;
UINT
DhcpEnabled
;
PIP_ADDR_STRING
CurrentIpAddress
;
IP_ADDR_STRING
IpAddressList
;
IP_ADDR_STRING
GatewayList
;
IP_ADDR_STRING
DhcpServer
;
BOOL
HaveWins
;
IP_ADDR_STRING
PrimaryWinsServer
;
IP_ADDR_STRING
SecondaryWinsServer
;
time_t
LeaseObtained
;
time_t
LeaseExpires
;
}
IP_ADAPTER_INFO
,
*
PIP_ADAPTER_INFO
;
typedef
struct
_FIXED_INFO
{
char
HostName
[
MAX_HOSTNAME_LEN
+
4
]
;
char
DomainName
[
MAX_DOMAIN_NAME_LEN
+
4
];
PIP_ADDR_STRING
CurrentDnsServer
;
IP_ADDR_STRING
DnsServerList
;
UINT
NodeType
;
char
ScopeId
[
MAX_SCOPE_ID_LEN
+
4
];
UINT
EnableRouting
;
UINT
EnableProxy
;
UINT
EnableDns
;
}
FIXED_INFO
,
*
PFIXED_INFO
;
#endif
/* IP helper library routine used on 98/2000/XP */
static
int
(
PASCAL
FAR
*
GetNetworkParams_fn
)();
static
int
(
PASCAL
FAR
*
GetAdaptersInfo_fn
)();
static
int
(
PASCAL
FAR
*
NotifyAddrChange_fn
)();
/*
* Routines to obtain domain name and name servers are OS specific
*/
typedef
int
(
*
LoadConfig
)(
char
*
sl
,
char
*
ns
);
static
LoadConfig
loadconfig_fn
;
/*
* JNI ids
*/
static
jfieldID
searchlistID
;
static
jfieldID
searchlistID
;
static
jfieldID
nameserversID
;
static
jfieldID
nameserversID
;
/*
/*
* Utility routine to append s2 to s1 with a space delimiter.
* Utility routine to append s2 to s1 with a space delimiter.
* strappend(s1="abc", "def") => "abc def"
* strappend(s1="abc", "def") => "abc def"
* strappend(s1="", "def") => "def
* strappend(s1="", "def") => "def
*/
*/
void
strappend
(
char
*
s1
,
char
*
s2
)
{
void
strappend
(
char
*
s1
,
char
*
s2
)
{
in
t
len
;
size_
t
len
;
if
(
s2
[
0
]
==
'\0'
)
/* nothing to append */
if
(
s2
[
0
]
==
'\0'
)
/* nothing to append */
return
;
return
;
...
@@ -145,356 +70,6 @@ void strappend(char *s1, char *s2) {
...
@@ -145,356 +70,6 @@ void strappend(char *s1, char *s2) {
strcat
(
s1
,
s2
);
strcat
(
s1
,
s2
);
}
}
/*
* Windows 95/98/ME for static TCP/IP configuration.
*
* Use registry approach for statically configured TCP/IP settings.
* Registry entries described in "MS TCP/IP and Windows 95 Networking"
* (Microsoft TechNet site).
*/
static
int
loadStaticConfig9x
(
char
*
sl
,
char
*
ns
)
{
LONG
ret
;
HANDLE
hKey
;
DWORD
dwLen
;
ULONG
ulType
;
char
result
[
MAX_STR_LEN
];
int
sts
=
STS_NO_CONFIG
;
ret
=
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
"SYSTEM
\\
CurrentControlSet
\\
Services
\\
VxD
\\
MSTCP"
,
0
,
KEY_READ
,
(
PHKEY
)
&
hKey
);
if
(
ret
==
ERROR_SUCCESS
)
{
/*
* Determine suffix list
*/
result
[
0
]
=
'\0'
;
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"SearchList"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
if
((
ret
!=
ERROR_SUCCESS
)
||
(
strlen
(
result
)
==
0
))
{
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"Domain"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
}
if
(
ret
==
ERROR_SUCCESS
)
{
assert
(
ulType
==
REG_SZ
);
if
(
strlen
(
result
)
>
0
)
{
strappend
(
sl
,
result
);
sts
|=
STS_SL_FOUND
;
}
}
/*
* Determine DNS name server(s)
*/
result
[
0
]
=
'\0'
;
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"NameServer"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
if
(
ret
==
ERROR_SUCCESS
)
{
assert
(
ulType
==
REG_SZ
);
if
(
strlen
(
result
)
>
0
)
{
strappend
(
ns
,
result
);
sts
|=
STS_NS_FOUND
;
}
}
RegCloseKey
(
hKey
);
}
return
sts
;
}
/*
* Windows 95
*
* Use registry approach for statically configured TCP/IP settings
* (see loadStaticConfig9x).
*
* If DHCP is used we examine the DHCP vendor specific extensions. We parse
* this based on format described in RFC 2132.
*
* If Dial-up Networking (DUN) is used then this TCP/IP settings cannot
* be determined here.
*/
static
int
loadConfig95
(
char
*
sl
,
char
*
ns
)
{
int
sts
;
int
index
;
LONG
ret
;
HANDLE
hKey
;
DWORD
dwLen
;
ULONG
ulType
;
char
optionInfo
[
MAX_STR_LEN
];
/*
* First try static configuration - if found we are done.
*/
sts
=
loadStaticConfig9x
(
sl
,
ns
);
if
(
IS_SL_FOUND
(
sts
)
&&
IS_NS_FOUND
(
sts
))
{
return
sts
;
}
/*
* Try DHCP. DHCP information is stored in :-
* SYSTEM\CurrentControlSet\Services\VxD\DHCP\DhcpInfoXX
*
* The key is normally DhcpInfo00\OptionInfo (see Article Q255245 on
* Microsoft site). However when multiple cards are added & removed we
* have observed that it can be located in DhcpInfo{01,02, ...}.
* As a hack we search all DhcpInfoXX keys until we find OptionInfo.
*/
for
(
index
=
0
;
index
<
99
;
index
++
)
{
char
key
[
MAX_STR_LEN
];
sprintf
(
key
,
"SYSTEM
\\
CurrentControlSet
\\
Services
\\
VxD
\\
DHCP
\\
DhcpInfo%02d"
,
index
);
ret
=
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
key
,
0
,
KEY_READ
,
(
PHKEY
)
&
hKey
);
if
(
ret
!=
ERROR_SUCCESS
)
{
/* end of DhcpInfoXX entries */
break
;
}
dwLen
=
sizeof
(
optionInfo
);
ret
=
RegQueryValueEx
(
hKey
,
"OptionInfo"
,
NULL
,
&
ulType
,
(
LPBYTE
)
optionInfo
,
&
dwLen
);
RegCloseKey
(
hKey
);
if
(
ret
==
ERROR_SUCCESS
)
{
/* OptionInfo found */
break
;
}
}
/*
* If OptionInfo was found then we parse (as the 'options' field of
* the DHCP packet - see RFC 2132).
*/
if
(
ret
==
ERROR_SUCCESS
)
{
unsigned
int
pos
=
0
;
while
(
pos
<
dwLen
)
{
int
code
,
len
;
code
=
optionInfo
[
pos
];
pos
++
;
if
(
pos
>=
dwLen
)
break
;
/* bad packet */
len
=
optionInfo
[
pos
];
pos
++
;
if
(
pos
+
len
>
dwLen
)
break
;
/* bad packet */
/*
* Domain Name - see RFC 2132 section 3.17
*/
if
(
!
IS_SL_FOUND
(
sts
))
{
if
(
code
==
0xf
)
{
char
domain
[
MAX_STR_LEN
];
assert
(
len
<
MAX_STR_LEN
);
memcpy
((
void
*
)
domain
,
(
void
*
)
&
(
optionInfo
[
pos
]),
(
size_t
)
len
);
domain
[
len
]
=
'\0'
;
strappend
(
sl
,
domain
);
sts
|=
STS_SL_FOUND
;
}
}
/*
* DNS Option - see RFC 2132 section 3.8
*/
if
(
!
IS_NS_FOUND
(
sts
))
{
if
(
code
==
6
&&
(
len
%
4
)
==
0
)
{
while
(
len
>
0
&&
pos
<
dwLen
)
{
char
addr
[
32
];
sprintf
(
addr
,
"%d.%d.%d.%d"
,
(
unsigned
char
)
optionInfo
[
pos
],
(
unsigned
char
)
optionInfo
[
pos
+
1
],
(
unsigned
char
)
optionInfo
[
pos
+
2
],
(
unsigned
char
)
optionInfo
[
pos
+
3
]);
pos
+=
4
;
len
-=
4
;
/*
* Append to list of name servers
*/
strappend
(
ns
,
addr
);
sts
|=
STS_NS_FOUND
;
}
}
}
/*
* Onto the next options
*/
pos
+=
len
;
}
}
return
sts
;
}
/*
* Windows 98/ME
*
* Use registry approach for statically configured TCP/IP settings
* (see loadStaticConfig9x).
*
* If configuration is not static then use IP helper library routine
* GetNetworkParams to obtain the network settings which include the
* domain name and the DNS servers. Note that we use the registry in
* preference to GetNetworkParams as the domain name is not populated
* by GetNetworkParams if the configuration is static.
*/
static
int
loadConfig98
(
char
*
sl
,
char
*
ns
)
{
FIXED_INFO
*
infoP
;
ULONG
size
;
DWORD
ret
;
int
sts
;
/*
* Use registry approach to pick up static configuation.
*/
sts
=
loadStaticConfig9x
(
sl
,
ns
);
if
(
IS_SL_FOUND
(
sts
)
&&
IS_NS_FOUND
(
sts
))
{
return
sts
;
}
/*
* Use IP helper library to obtain dynamic configuration (DHCP and
* DUN).
*/
size
=
sizeof
(
FIXED_INFO
);
infoP
=
(
FIXED_INFO
*
)
malloc
(
size
);
if
(
infoP
)
{
ret
=
(
*
GetNetworkParams_fn
)(
infoP
,
&
size
);
if
(
ret
==
ERROR_BUFFER_OVERFLOW
)
{
infoP
=
(
FIXED_INFO
*
)
realloc
(
infoP
,
size
);
if
(
infoP
!=
NULL
)
ret
=
(
*
GetNetworkParams_fn
)(
infoP
,
&
size
);
}
}
if
(
infoP
==
NULL
)
{
return
sts
;
}
if
(
ret
==
ERROR_SUCCESS
)
{
/*
* Use DomainName if search-list not specified.
*/
if
(
!
IS_SL_FOUND
(
sts
))
{
strappend
(
sl
,
infoP
->
DomainName
);
sts
|=
STS_SL_FOUND
;
}
/*
* Use DnsServerList if not statically configured.
*/
if
(
!
IS_NS_FOUND
(
sts
))
{
PIP_ADDR_STRING
dnsP
=
&
(
infoP
->
DnsServerList
);
do
{
strappend
(
ns
,
(
char
*
)
&
(
dnsP
->
IpAddress
));
dnsP
=
dnsP
->
Next
;
}
while
(
dnsP
!=
NULL
);
sts
|=
STS_NS_FOUND
;
}
}
free
(
infoP
);
return
sts
;
}
/*
* Windows NT
*
* Use registry approach based on settings described in "TCP/IP and
* NBT Configuration Parameters for Windows" - Article Q12062 on
* Microsoft site.
*
* All non-RAS TCP/IP settings are stored in HKEY_LOCAL_MACHINE in
* the SYSTEM\CurrentControlSet\Services\Tcpip\Parameters key.
*
* If SearchList if not provided then return Domain or DhcpDomain.
* If Domain is specified it overrides DhcpDomain even if DHCP is
* enabled.
*
* DNS name servers based on NameServer or DhcpNameServer settings.
* NameServer overrides DhcpNameServer even if DHCP is enabled.
*/
static
int
loadConfigNT
(
char
*
sl
,
char
*
ns
)
{
LONG
ret
;
HANDLE
hKey
;
DWORD
dwLen
;
ULONG
ulType
;
char
result
[
MAX_STR_LEN
];
int
sts
=
STS_NO_CONFIG
;
ret
=
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
"SYSTEM
\\
CurrentControlSet
\\
Services
\\
Tcpip
\\
Parameters"
,
0
,
KEY_READ
,
(
PHKEY
)
&
hKey
);
if
(
ret
!=
ERROR_SUCCESS
)
{
return
sts
;
}
/*
* Determine search list
*/
result
[
0
]
=
'\0'
;
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"SearchList"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
if
((
ret
!=
ERROR_SUCCESS
)
||
(
strlen
(
result
)
==
0
))
{
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"Domain"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
if
((
ret
!=
ERROR_SUCCESS
)
||
(
strlen
(
result
)
==
0
))
{
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"DhcpDomain"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
}
}
if
(
ret
==
ERROR_SUCCESS
)
{
assert
(
ulType
==
REG_SZ
);
if
(
strlen
(
result
)
>
0
)
{
strappend
(
sl
,
result
);
sts
|=
STS_SL_FOUND
;
}
}
/*
* Determine DNS name server(s)
*/
result
[
0
]
=
'\0'
;
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"NameServer"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
if
((
ret
!=
ERROR_SUCCESS
)
||
(
strlen
(
result
)
==
0
))
{
dwLen
=
sizeof
(
result
);
ret
=
RegQueryValueEx
(
hKey
,
"DhcpNameServer"
,
NULL
,
&
ulType
,
(
LPBYTE
)
&
result
,
&
dwLen
);
}
if
(
ret
==
ERROR_SUCCESS
)
{
assert
(
ulType
==
REG_SZ
);
if
(
strlen
(
result
)
>
0
)
{
strappend
(
ns
,
result
);
sts
|=
STS_NS_FOUND
;
}
}
RegCloseKey
(
hKey
);
return
sts
;
}
/*
/*
* Windows 2000/XP
* Windows 2000/XP
*
*
...
@@ -510,7 +85,7 @@ static int loadConfigNT(char *sl, char *ns) {
...
@@ -510,7 +85,7 @@ static int loadConfigNT(char *sl, char *ns) {
* names of each adapter and then query the corresponding registry
* names of each adapter and then query the corresponding registry
* settings to obtain NameServer/DhcpNameServer and Domain/DhcpDomain.
* settings to obtain NameServer/DhcpNameServer and Domain/DhcpDomain.
*/
*/
static
int
loadConfig
2000
(
char
*
sl
,
char
*
ns
)
{
static
int
loadConfig
(
char
*
sl
,
char
*
ns
)
{
IP_ADAPTER_INFO
*
adapterP
;
IP_ADAPTER_INFO
*
adapterP
;
ULONG
size
;
ULONG
size
;
DWORD
ret
;
DWORD
ret
;
...
@@ -547,10 +122,10 @@ static int loadConfig2000(char *sl, char *ns) {
...
@@ -547,10 +122,10 @@ static int loadConfig2000(char *sl, char *ns) {
*/
*/
size
=
sizeof
(
IP_ADAPTER_INFO
);
size
=
sizeof
(
IP_ADAPTER_INFO
);
adapterP
=
(
IP_ADAPTER_INFO
*
)
malloc
(
size
);
adapterP
=
(
IP_ADAPTER_INFO
*
)
malloc
(
size
);
ret
=
(
*
GetAdaptersInfo_fn
)
(
adapterP
,
&
size
);
ret
=
GetAdaptersInfo
(
adapterP
,
&
size
);
if
(
ret
==
ERROR_BUFFER_OVERFLOW
)
{
if
(
ret
==
ERROR_BUFFER_OVERFLOW
)
{
adapterP
=
(
IP_ADAPTER_INFO
*
)
realloc
(
adapterP
,
size
);
adapterP
=
(
IP_ADAPTER_INFO
*
)
realloc
(
adapterP
,
size
);
ret
=
(
*
GetAdaptersInfo_fn
)
(
adapterP
,
&
size
);
ret
=
GetAdaptersInfo
(
adapterP
,
&
size
);
}
}
/*
/*
...
@@ -648,87 +223,15 @@ static int loadConfig2000(char *sl, char *ns) {
...
@@ -648,87 +223,15 @@ static int loadConfig2000(char *sl, char *ns) {
/*
/*
* Initialization :-
* Initialize JNI field IDs.
*
* 1. Based on OS version set the function pointer for OS specific load
* configuration routine.
*
* 2. On 98/2000/XP load the IP helper library.
*
* 3. Initialize JNI field IDs.
*
*/
*/
JNIEXPORT
void
JNICALL
JNIEXPORT
void
JNICALL
Java_sun_net_dns_ResolverConfigurationImpl_init0
(
JNIEnv
*
env
,
jclass
cls
)
Java_sun_net_dns_ResolverConfigurationImpl_init0
(
JNIEnv
*
env
,
jclass
cls
)
{
{
OSVERSIONINFO
ver
;
jboolean
loadHelperLibrary
=
JNI_TRUE
;
/*
* First we figure out which OS is running
*/
ver
.
dwOSVersionInfoSize
=
sizeof
(
ver
);
GetVersionEx
(
&
ver
);
if
(
ver
.
dwPlatformId
==
VER_PLATFORM_WIN32_WINDOWS
)
{
if
((
ver
.
dwMajorVersion
==
4
)
&&
(
ver
.
dwMinorVersion
==
0
))
{
/*
* Windows 95
*/
loadHelperLibrary
=
JNI_FALSE
;
loadconfig_fn
=
loadConfig95
;
}
else
{
/*
* Windows 98/ME
*/
loadHelperLibrary
=
JNI_TRUE
;
loadconfig_fn
=
loadConfig98
;
}
}
if
(
ver
.
dwPlatformId
==
VER_PLATFORM_WIN32_NT
)
{
if
(
ver
.
dwMajorVersion
<=
4
)
{
/*
* Windows NT
*/
loadHelperLibrary
=
JNI_FALSE
;
loadconfig_fn
=
loadConfigNT
;
}
else
{
/*
* Windows 2000/XP
*/
loadHelperLibrary
=
JNI_TRUE
;
loadconfig_fn
=
loadConfig2000
;
}
}
/*
* On 98/2000/XP we load the IP Helper Library.
*/
if
(
loadHelperLibrary
)
{
HANDLE
h
=
LoadLibrary
(
"iphlpapi.dll"
);
if
(
h
!=
NULL
)
{
GetNetworkParams_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetNetworkParams"
);
GetAdaptersInfo_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"GetAdaptersInfo"
);
NotifyAddrChange_fn
=
(
int
(
PASCAL
FAR
*
)())
GetProcAddress
(
h
,
"NotifyAddrChange"
);
}
if
(
GetNetworkParams_fn
==
NULL
||
GetAdaptersInfo_fn
==
NULL
)
{
JNU_ThrowByName
(
env
,
"java/lang/UnsatisfiedLinkError"
,
"iphlpapi.dll"
);
return
;
}
}
/*
* Get JNI ids
*/
searchlistID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
cls
,
"os_searchlist"
,
searchlistID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
cls
,
"os_searchlist"
,
"Ljava/lang/String;"
);
"Ljava/lang/String;"
);
nameserversID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
cls
,
"os_nameservers"
,
nameserversID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
cls
,
"os_nameservers"
,
"Ljava/lang/String;"
);
"Ljava/lang/String;"
);
}
}
/*
/*
...
@@ -746,8 +249,7 @@ Java_sun_net_dns_ResolverConfigurationImpl_loadDNSconfig0(JNIEnv *env, jclass cl
...
@@ -746,8 +249,7 @@ Java_sun_net_dns_ResolverConfigurationImpl_loadDNSconfig0(JNIEnv *env, jclass cl
searchlist
[
0
]
=
'\0'
;
searchlist
[
0
]
=
'\0'
;
nameservers
[
0
]
=
'\0'
;
nameservers
[
0
]
=
'\0'
;
/* call OS specific routine */
loadConfig
(
searchlist
,
nameservers
);
(
void
)(
*
loadconfig_fn
)(
searchlist
,
nameservers
);
/*
/*
* Populate static fields in sun.net.DefaultResolverConfiguration
* Populate static fields in sun.net.DefaultResolverConfiguration
...
@@ -772,17 +274,15 @@ Java_sun_net_dns_ResolverConfigurationImpl_notifyAddrChange0(JNIEnv *env, jclass
...
@@ -772,17 +274,15 @@ Java_sun_net_dns_ResolverConfigurationImpl_notifyAddrChange0(JNIEnv *env, jclass
HANDLE
h
;
HANDLE
h
;
DWORD
rc
,
xfer
;
DWORD
rc
,
xfer
;
if
(
NotifyAddrChange_fn
!=
NULL
)
{
ol
.
hEvent
=
(
HANDLE
)
0
;
ol
.
hEvent
=
(
HANDLE
)
0
;
rc
=
NotifyAddrChange
(
&
h
,
&
ol
);
rc
=
(
*
NotifyAddrChange_fn
)(
&
h
,
&
ol
);
if
(
rc
==
ERROR_IO_PENDING
)
{
if
(
rc
==
ERROR_IO_PENDING
)
{
rc
=
GetOverlappedResult
(
h
,
&
ol
,
&
xfer
,
TRUE
);
rc
=
GetOverlappedResult
(
h
,
&
ol
,
&
xfer
,
TRUE
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
return
0
;
/* address changed */
return
0
;
/* address changed */
}
}
}
}
}
/*
NotifyAddrChange not support or
error */
/* error */
return
-
1
;
return
-
1
;
}
}
src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c
浏览文件 @
c872b120
...
@@ -41,18 +41,6 @@
...
@@ -41,18 +41,6 @@
#define SECURITY_WIN32
#define SECURITY_WIN32
#include "sspi.h"
#include "sspi.h"
/*
* OS calls loaded from DLL on intialization
*/
static
FREE_CREDENTIALS_HANDLE_FN
pFreeCredentialsHandle
;
static
ACQUIRE_CREDENTIALS_HANDLE_FN
pAcquireCredentialsHandle
;
static
FREE_CONTEXT_BUFFER_FN
pFreeContextBuffer
;
static
INITIALIZE_SECURITY_CONTEXT_FN
pInitializeSecurityContext
;
static
COMPLETE_AUTH_TOKEN_FN
pCompleteAuthToken
;
static
DELETE_SECURITY_CONTEXT_FN
pDeleteSecurityContext
;
static
void
endSequence
(
PCredHandle
credHand
,
PCtxtHandle
ctxHandle
);
static
void
endSequence
(
PCredHandle
credHand
,
PCtxtHandle
ctxHandle
);
static
jfieldID
ntlm_ctxHandleID
;
static
jfieldID
ntlm_ctxHandleID
;
...
@@ -63,48 +51,8 @@ static HINSTANCE lib = NULL;
...
@@ -63,48 +51,8 @@ static HINSTANCE lib = NULL;
JNIEXPORT
void
JNICALL
Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_initFirst
JNIEXPORT
void
JNICALL
Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_initFirst
(
JNIEnv
*
env
,
jclass
clazz
)
(
JNIEnv
*
env
,
jclass
clazz
)
{
{
OSVERSIONINFO
version
;
UCHAR
libName
[
MAX_PATH
];
ntlm_ctxHandleID
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"ctxHandle"
,
"J"
);
ntlm_ctxHandleID
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"ctxHandle"
,
"J"
);
ntlm_crdHandleID
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"crdHandle"
,
"J"
);
ntlm_crdHandleID
=
(
*
env
)
->
GetFieldID
(
env
,
clazz
,
"crdHandle"
,
"J"
);
version
.
dwOSVersionInfoSize
=
sizeof
(
OSVERSIONINFO
);
GetVersionEx
(
&
version
);
if
(
version
.
dwPlatformId
==
VER_PLATFORM_WIN32_NT
)
{
strcpy
(
libName
,
"security.dll"
);
}
else
if
(
version
.
dwPlatformId
==
VER_PLATFORM_WIN32_WINDOWS
)
{
strcpy
(
libName
,
"secur32.dll"
);
}
lib
=
LoadLibrary
(
libName
);
pFreeCredentialsHandle
=
(
FREE_CREDENTIALS_HANDLE_FN
)
GetProcAddress
(
lib
,
"FreeCredentialsHandle"
);
pAcquireCredentialsHandle
=
(
ACQUIRE_CREDENTIALS_HANDLE_FN
)
GetProcAddress
(
lib
,
"AcquireCredentialsHandleA"
);
pFreeContextBuffer
=
(
FREE_CONTEXT_BUFFER_FN
)
GetProcAddress
(
lib
,
"FreeContextBuffer"
);
pInitializeSecurityContext
=
(
INITIALIZE_SECURITY_CONTEXT_FN
)
GetProcAddress
(
lib
,
"InitializeSecurityContextA"
);
pCompleteAuthToken
=
(
COMPLETE_AUTH_TOKEN_FN
)
GetProcAddress
(
lib
,
"CompleteAuthToken"
);
pDeleteSecurityContext
=
(
DELETE_SECURITY_CONTEXT_FN
)
GetProcAddress
(
lib
,
"DeleteSecurityContext"
);
}
}
/*
/*
...
@@ -158,17 +106,17 @@ JNIEXPORT jlong JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_get
...
@@ -158,17 +106,17 @@ JNIEXPORT jlong JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_get
if
(
pUser
!=
NULL
)
{
if
(
pUser
!=
NULL
)
{
AuthId
.
User
=
(
unsigned
char
*
)
pUser
;
AuthId
.
User
=
(
unsigned
char
*
)
pUser
;
AuthId
.
UserLength
=
strlen
(
pUser
);
AuthId
.
UserLength
=
(
unsigned
long
)
strlen
(
pUser
);
}
}
if
(
pPassword
!=
NULL
)
{
if
(
pPassword
!=
NULL
)
{
AuthId
.
Password
=
(
unsigned
char
*
)
pPassword
;
AuthId
.
Password
=
(
unsigned
char
*
)
pPassword
;
AuthId
.
PasswordLength
=
strlen
(
pPassword
);
AuthId
.
PasswordLength
=
(
unsigned
long
)
strlen
(
pPassword
);
}
}
if
(
pDomain
!=
NULL
)
{
if
(
pDomain
!=
NULL
)
{
AuthId
.
Domain
=
(
unsigned
char
*
)
pDomain
;
AuthId
.
Domain
=
(
unsigned
char
*
)
pDomain
;
AuthId
.
DomainLength
=
strlen
(
pDomain
);
AuthId
.
DomainLength
=
(
unsigned
long
)
strlen
(
pDomain
);
}
}
AuthId
.
Flags
=
SEC_WINNT_AUTH_IDENTITY_ANSI
;
AuthId
.
Flags
=
SEC_WINNT_AUTH_IDENTITY_ANSI
;
...
@@ -176,7 +124,7 @@ JNIEXPORT jlong JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_get
...
@@ -176,7 +124,7 @@ JNIEXPORT jlong JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequence_get
pAuthId
=
NULL
;
pAuthId
=
NULL
;
}
}
ss
=
pAcquireCredentialsHandle
(
ss
=
AcquireCredentialsHandleA
(
NULL
,
"NTLM"
,
SECPKG_CRED_OUTBOUND
,
NULL
,
"NTLM"
,
SECPKG_CRED_OUTBOUND
,
NULL
,
pAuthId
,
NULL
,
NULL
,
NULL
,
pAuthId
,
NULL
,
NULL
,
pCred
,
&
ltime
pCred
,
&
ltime
...
@@ -258,7 +206,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
...
@@ -258,7 +206,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
* need to send the out buffer if there are bytes to send
* need to send the out buffer if there are bytes to send
*/
*/
ss
=
pInitializeSecurityContext
(
ss
=
InitializeSecurityContextA
(
pCred
,
pCtx
,
NULL
,
0
,
0
,
SECURITY_NATIVE_DREP
,
pCred
,
pCtx
,
NULL
,
0
,
0
,
SECURITY_NATIVE_DREP
,
lastToken
?
&
InBuffDesc
:
NULL
,
0
,
newContext
,
&
OutBuffDesc
,
lastToken
?
&
InBuffDesc
:
NULL
,
0
,
newContext
,
&
OutBuffDesc
,
&
ContextAttributes
,
&
ltime
&
ContextAttributes
,
&
ltime
...
@@ -274,7 +222,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
...
@@ -274,7 +222,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
}
}
if
((
ss
==
SEC_I_COMPLETE_NEEDED
)
||
(
ss
==
SEC_I_COMPLETE_AND_CONTINUE
)
)
{
if
((
ss
==
SEC_I_COMPLETE_NEEDED
)
||
(
ss
==
SEC_I_COMPLETE_AND_CONTINUE
)
)
{
ss
=
p
CompleteAuthToken
(
pCtx
,
&
OutBuffDesc
);
ss
=
CompleteAuthToken
(
pCtx
,
&
OutBuffDesc
);
if
(
ss
<
0
)
{
if
(
ss
<
0
)
{
endSequence
(
pCred
,
pCtx
);
endSequence
(
pCred
,
pCtx
);
...
@@ -300,12 +248,12 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
...
@@ -300,12 +248,12 @@ JNIEXPORT jbyteArray JNICALL Java_sun_net_www_protocol_http_ntlm_NTLMAuthSequenc
static
void
endSequence
(
PCredHandle
credHand
,
PCtxtHandle
ctxHandle
)
{
static
void
endSequence
(
PCredHandle
credHand
,
PCtxtHandle
ctxHandle
)
{
if
(
credHand
!=
0
)
{
if
(
credHand
!=
0
)
{
pFreeCredentialsHandle
(
credHand
);
FreeCredentialsHandle
(
credHand
);
free
(
credHand
);
free
(
credHand
);
}
}
if
(
ctxHandle
!=
0
)
{
if
(
ctxHandle
!=
0
)
{
p
DeleteSecurityContext
(
ctxHandle
);
DeleteSecurityContext
(
ctxHandle
);
free
(
ctxHandle
);
free
(
ctxHandle
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录