Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
72748b02
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看板
提交
72748b02
编写于
2月 13, 2013
作者:
M
michaelm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8000724: Improve networking serialization
Summary: delegate InetAddress fields to a holder object Reviewed-by: alanb, chegar
上级
406bc60c
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
289 addition
and
219 deletion
+289
-219
src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
...are/classes/java/net/AbstractPlainDatagramSocketImpl.java
+1
-1
src/share/classes/java/net/Inet4Address.java
src/share/classes/java/net/Inet4Address.java
+23
-16
src/share/classes/java/net/Inet4AddressImpl.java
src/share/classes/java/net/Inet4AddressImpl.java
+1
-1
src/share/classes/java/net/Inet6Address.java
src/share/classes/java/net/Inet6Address.java
+12
-7
src/share/classes/java/net/Inet6AddressImpl.java
src/share/classes/java/net/Inet6AddressImpl.java
+1
-1
src/share/classes/java/net/InetAddress.java
src/share/classes/java/net/InetAddress.java
+97
-24
src/share/classes/java/net/InetSocketAddress.java
src/share/classes/java/net/InetSocketAddress.java
+2
-2
src/share/native/java/net/InetAddress.c
src/share/native/java/net/InetAddress.c
+17
-6
src/share/native/java/net/net_util.c
src/share/native/java/net/net_util.c
+60
-10
src/share/native/java/net/net_util.h
src/share/native/java/net/net_util.h
+10
-2
src/solaris/native/java/net/Inet4AddressImpl.c
src/solaris/native/java/net/Inet4AddressImpl.c
+4
-15
src/solaris/native/java/net/Inet6AddressImpl.c
src/solaris/native/java/net/Inet6AddressImpl.c
+3
-10
src/solaris/native/java/net/NetworkInterface.c
src/solaris/native/java/net/NetworkInterface.c
+4
-9
src/solaris/native/java/net/PlainDatagramSocketImpl.c
src/solaris/native/java/net/PlainDatagramSocketImpl.c
+17
-34
src/solaris/native/java/net/net_util_md.c
src/solaris/native/java/net/net_util_md.c
+3
-3
src/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java
...ws/classes/java/net/TwoStacksPlainDatagramSocketImpl.java
+1
-1
src/windows/native/java/net/Inet4AddressImpl.c
src/windows/native/java/net/Inet4AddressImpl.c
+3
-11
src/windows/native/java/net/Inet6AddressImpl.c
src/windows/native/java/net/Inet6AddressImpl.c
+3
-10
src/windows/native/java/net/NetworkInterface.c
src/windows/native/java/net/NetworkInterface.c
+3
-6
src/windows/native/java/net/NetworkInterface.h
src/windows/native/java/net/NetworkInterface.h
+0
-1
src/windows/native/java/net/NetworkInterface_winXP.c
src/windows/native/java/net/NetworkInterface_winXP.c
+3
-3
src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
...indows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
+14
-38
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
+4
-5
src/windows/native/java/net/net_util_md.c
src/windows/native/java/net/net_util_md.c
+3
-3
未找到文件。
src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
浏览文件 @
72748b02
...
...
@@ -122,7 +122,7 @@ abstract class AbstractPlainDatagramSocketImpl extends DatagramSocketImpl
* not connected already.
*/
protected
void
disconnect
()
{
disconnect0
(
connectedAddress
.
family
);
disconnect0
(
connectedAddress
.
holder
().
getFamily
()
);
connected
=
false
;
connectedAddress
=
null
;
connectedPort
=
-
1
;
...
...
src/share/classes/java/net/Inet4Address.java
浏览文件 @
72748b02
...
...
@@ -100,27 +100,28 @@ class Inet4Address extends InetAddress {
Inet4Address
()
{
super
();
hostName
=
null
;
address
=
0
;
family
=
IPv4
;
ho
lder
().
ho
stName
=
null
;
holder
().
address
=
0
;
holder
().
family
=
IPv4
;
}
Inet4Address
(
String
hostName
,
byte
addr
[])
{
this
.
hostName
=
hostName
;
this
.
family
=
IPv4
;
holder
()
.
hostName
=
hostName
;
holder
()
.
family
=
IPv4
;
if
(
addr
!=
null
)
{
if
(
addr
.
length
==
INADDRSZ
)
{
address
=
addr
[
3
]
&
0xFF
;
int
address
=
addr
[
3
]
&
0xFF
;
address
|=
((
addr
[
2
]
<<
8
)
&
0xFF00
);
address
|=
((
addr
[
1
]
<<
16
)
&
0xFF0000
);
address
|=
((
addr
[
0
]
<<
24
)
&
0xFF000000
);
holder
().
address
=
address
;
}
}
}
Inet4Address
(
String
hostName
,
int
address
)
{
this
.
hostName
=
hostName
;
this
.
family
=
IPv4
;
this
.
address
=
address
;
holder
()
.
hostName
=
hostName
;
holder
()
.
family
=
IPv4
;
holder
()
.
address
=
address
;
}
/**
...
...
@@ -134,8 +135,8 @@ class Inet4Address extends InetAddress {
private
Object
writeReplace
()
throws
ObjectStreamException
{
// will replace the to be serialized 'this' object
InetAddress
inet
=
new
InetAddress
();
inet
.
ho
stName
=
this
.
hostName
;
inet
.
address
=
this
.
address
;
inet
.
ho
lder
().
hostName
=
holder
().
getHostName
()
;
inet
.
holder
().
address
=
holder
().
getAddress
()
;
/**
* Prior to 1.4 an InetAddress was created with a family
...
...
@@ -143,7 +144,7 @@ class Inet4Address extends InetAddress {
* For compatibility reasons we must therefore write the
* the InetAddress with this family.
*/
inet
.
family
=
2
;
inet
.
holder
().
family
=
2
;
return
inet
;
}
...
...
@@ -157,7 +158,7 @@ class Inet4Address extends InetAddress {
* @since JDK1.1
*/
public
boolean
isMulticastAddress
()
{
return
((
address
&
0xf0000000
)
==
0xe0000000
);
return
((
holder
().
getAddress
()
&
0xf0000000
)
==
0xe0000000
);
}
/**
...
...
@@ -167,7 +168,7 @@ class Inet4Address extends InetAddress {
* @since 1.4
*/
public
boolean
isAnyLocalAddress
()
{
return
address
==
0
;
return
holder
().
getAddress
()
==
0
;
}
/**
...
...
@@ -195,6 +196,7 @@ class Inet4Address extends InetAddress {
// defined in "Documenting Special Use IPv4 Address Blocks
// that have been Registered with IANA" by Bill Manning
// draft-manning-dsua-06.txt
int
address
=
holder
().
getAddress
();
return
(((
address
>>>
24
)
&
0xFF
)
==
169
)
&&
(((
address
>>>
16
)
&
0xFF
)
==
254
);
}
...
...
@@ -211,6 +213,7 @@ class Inet4Address extends InetAddress {
// 10/8 prefix
// 172.16/12 prefix
// 192.168/16 prefix
int
address
=
holder
().
getAddress
();
return
(((
address
>>>
24
)
&
0xFF
)
==
10
)
||
((((
address
>>>
24
)
&
0xFF
)
==
172
)
&&
(((
address
>>>
16
)
&
0xF0
)
==
16
))
...
...
@@ -257,6 +260,7 @@ class Inet4Address extends InetAddress {
*/
public
boolean
isMCLinkLocal
()
{
// 224.0.0/24 prefix and ttl == 1
int
address
=
holder
().
getAddress
();
return
(((
address
>>>
24
)
&
0xFF
)
==
224
)
&&
(((
address
>>>
16
)
&
0xFF
)
==
0
)
&&
(((
address
>>>
8
)
&
0xFF
)
==
0
);
...
...
@@ -272,6 +276,7 @@ class Inet4Address extends InetAddress {
*/
public
boolean
isMCSiteLocal
()
{
// 239.255/16 prefix or ttl < 32
int
address
=
holder
().
getAddress
();
return
(((
address
>>>
24
)
&
0xFF
)
==
239
)
&&
(((
address
>>>
16
)
&
0xFF
)
==
255
);
}
...
...
@@ -287,6 +292,7 @@ class Inet4Address extends InetAddress {
*/
public
boolean
isMCOrgLocal
()
{
// 239.192 - 239.195
int
address
=
holder
().
getAddress
();
return
(((
address
>>>
24
)
&
0xFF
)
==
239
)
&&
(((
address
>>>
16
)
&
0xFF
)
>=
192
)
&&
(((
address
>>>
16
)
&
0xFF
)
<=
195
);
...
...
@@ -300,6 +306,7 @@ class Inet4Address extends InetAddress {
* @return the raw IP address of this object.
*/
public
byte
[]
getAddress
()
{
int
address
=
holder
().
getAddress
();
byte
[]
addr
=
new
byte
[
INADDRSZ
];
addr
[
0
]
=
(
byte
)
((
address
>>>
24
)
&
0xFF
);
...
...
@@ -325,7 +332,7 @@ class Inet4Address extends InetAddress {
* @return a hash code value for this IP address.
*/
public
int
hashCode
()
{
return
address
;
return
holder
().
getAddress
()
;
}
/**
...
...
@@ -346,7 +353,7 @@ class Inet4Address extends InetAddress {
*/
public
boolean
equals
(
Object
obj
)
{
return
(
obj
!=
null
)
&&
(
obj
instanceof
Inet4Address
)
&&
(((
InetAddress
)
obj
).
address
==
address
);
(((
InetAddress
)
obj
).
holder
().
getAddress
()
==
holder
().
getAddress
()
);
}
// Utilities
...
...
src/share/classes/java/net/Inet4AddressImpl.java
浏览文件 @
72748b02
...
...
@@ -40,7 +40,7 @@ class Inet4AddressImpl implements InetAddressImpl {
public
synchronized
InetAddress
anyLocalAddress
()
{
if
(
anyLocalAddress
==
null
)
{
anyLocalAddress
=
new
Inet4Address
();
// {0x00,0x00,0x00,0x00}
anyLocalAddress
.
hostName
=
"0.0.0.0"
;
anyLocalAddress
.
ho
lder
().
ho
stName
=
"0.0.0.0"
;
}
return
anyLocalAddress
;
}
...
...
src/share/classes/java/net/Inet6Address.java
浏览文件 @
72748b02
...
...
@@ -210,18 +210,18 @@ class Inet6Address extends InetAddress {
Inet6Address
()
{
super
();
hostName
=
null
;
ho
lder
().
ho
stName
=
null
;
ipaddress
=
new
byte
[
INADDRSZ
];
family
=
IPv6
;
holder
().
family
=
IPv6
;
}
/* checking of value for scope_id should be done by caller
* scope_id must be >= 0, or -1 to indicate not being set
*/
Inet6Address
(
String
hostName
,
byte
addr
[],
int
scope_id
)
{
this
.
hostName
=
hostName
;
holder
()
.
hostName
=
hostName
;
if
(
addr
.
length
==
INADDRSZ
)
{
// normal IPv6 address
family
=
IPv6
;
holder
().
family
=
IPv6
;
ipaddress
=
addr
.
clone
();
}
if
(
scope_id
>=
0
)
{
...
...
@@ -335,9 +335,9 @@ class Inet6Address extends InetAddress {
private
void
initif
(
String
hostName
,
byte
addr
[],
NetworkInterface
nif
)
throws
UnknownHostException
{
this
.
hostName
=
hostName
;
holder
()
.
hostName
=
hostName
;
if
(
addr
.
length
==
INADDRSZ
)
{
// normal IPv6 address
family
=
IPv6
;
holder
().
family
=
IPv6
;
ipaddress
=
addr
.
clone
();
}
if
(
nif
!=
null
)
{
...
...
@@ -420,6 +420,11 @@ class Inet6Address extends InetAddress {
*/
private
void
readObject
(
ObjectInputStream
s
)
throws
IOException
,
ClassNotFoundException
{
if
(
getClass
().
getClassLoader
()
!=
null
)
{
throw
new
SecurityException
(
"invalid address type"
);
}
s
.
defaultReadObject
();
if
(
ifname
!=
null
&&
!
ifname
.
equals
(
""
))
{
...
...
@@ -447,7 +452,7 @@ class Inet6Address extends InetAddress {
ipaddress
.
length
);
}
if
(
family
!=
IPv6
)
{
if
(
holder
().
getFamily
()
!=
IPv6
)
{
throw
new
InvalidObjectException
(
"invalid address family type"
);
}
}
...
...
src/share/classes/java/net/Inet6AddressImpl.java
浏览文件 @
72748b02
...
...
@@ -81,7 +81,7 @@ class Inet6AddressImpl implements InetAddressImpl {
if
(
anyLocalAddress
==
null
)
{
if
(
InetAddress
.
preferIPv6Address
)
{
anyLocalAddress
=
new
Inet6Address
();
anyLocalAddress
.
hostName
=
"::"
;
anyLocalAddress
.
ho
lder
().
ho
stName
=
"::"
;
}
else
{
anyLocalAddress
=
(
new
Inet4AddressImpl
()).
anyLocalAddress
();
}
...
...
src/share/classes/java/net/InetAddress.java
浏览文件 @
72748b02
...
...
@@ -35,8 +35,12 @@ import java.util.ArrayList;
import
java.util.ServiceLoader
;
import
java.security.AccessController
;
import
java.io.ObjectStreamException
;
import
java.io.ObjectStreamField
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectInputStream.GetField
;
import
java.io.ObjectOutputStream
;
import
java.io.ObjectOutputStream.PutField
;
import
sun.security.action.*
;
import
sun.net.InetAddressCachePolicy
;
import
sun.net.util.IPAddressUtil
;
...
...
@@ -199,25 +203,48 @@ class InetAddress implements java.io.Serializable {
/* Specify address family preference */
static
transient
boolean
preferIPv6Address
=
false
;
/**
* @serial
*/
String
hostName
;
static
class
InetAddressHolder
{
/**
* Holds a 32-bit IPv4 address.
*
* @serial
*/
int
address
;
InetAddressHolder
()
{}
/**
* Specifies the address family type, for instance, '1' for IPv4
* addresses, and '2' for IPv6 addresses.
*
* @serial
*/
int
family
;
InetAddressHolder
(
String
hostName
,
int
address
,
int
family
)
{
this
.
hostName
=
hostName
;
this
.
address
=
address
;
this
.
family
=
family
;
}
String
hostName
;
String
getHostName
()
{
return
hostName
;
}
/**
* Holds a 32-bit IPv4 address.
*/
int
address
;
int
getAddress
()
{
return
address
;
}
/**
* Specifies the address family type, for instance, '1' for IPv4
* addresses, and '2' for IPv6 addresses.
*/
int
family
;
int
getFamily
()
{
return
family
;
}
}
/* Used to store the serializable fields of InetAddress */
private
final
transient
InetAddressHolder
holder
;
InetAddressHolder
holder
()
{
return
holder
;
}
/* Used to store the name service provider */
private
static
List
<
NameService
>
nameServices
=
null
;
...
...
@@ -251,6 +278,7 @@ class InetAddress implements java.io.Serializable {
* put in the address cache, since it is not created by name.
*/
InetAddress
()
{
holder
=
new
InetAddressHolder
();
}
/**
...
...
@@ -263,7 +291,7 @@ class InetAddress implements java.io.Serializable {
*/
private
Object
readResolve
()
throws
ObjectStreamException
{
// will replace the deserialized 'this' object
return
new
Inet4Address
(
this
.
hostName
,
this
.
address
);
return
new
Inet4Address
(
holder
().
getHostName
(),
holder
().
getAddress
()
);
}
/**
...
...
@@ -500,10 +528,10 @@ class InetAddress implements java.io.Serializable {
* @see SecurityManager#checkConnect
*/
String
getHostName
(
boolean
check
)
{
if
(
ho
stName
==
null
)
{
hostName
=
InetAddress
.
getHostFromNameService
(
this
,
check
);
if
(
ho
lder
().
getHostName
()
==
null
)
{
ho
lder
().
ho
stName
=
InetAddress
.
getHostFromNameService
(
this
,
check
);
}
return
ho
stName
;
return
ho
lder
().
getHostName
()
;
}
/**
...
...
@@ -666,6 +694,7 @@ class InetAddress implements java.io.Serializable {
* @return a string representation of this IP address.
*/
public
String
toString
()
{
String
hostName
=
holder
().
getHostName
();
return
((
hostName
!=
null
)
?
hostName
:
""
)
+
"/"
+
getHostAddress
();
}
...
...
@@ -1522,14 +1551,58 @@ class InetAddress implements java.io.Serializable {
}
}
private
static
final
long
FIELDS_OFFSET
;
private
static
final
sun
.
misc
.
Unsafe
UNSAFE
;
static
{
try
{
sun
.
misc
.
Unsafe
unsafe
=
sun
.
misc
.
Unsafe
.
getUnsafe
();
FIELDS_OFFSET
=
unsafe
.
objectFieldOffset
(
InetAddress
.
class
.
getDeclaredField
(
"holder"
)
);
UNSAFE
=
unsafe
;
}
catch
(
ReflectiveOperationException
e
)
{
throw
new
Error
(
e
);
}
}
private
void
readObject
(
ObjectInputStream
s
)
throws
IOException
,
ClassNotFoundException
{
s
.
defaultReadObject
();
if
(
getClass
().
getClassLoader
()
!=
null
)
{
hostName
=
null
;
address
=
0
;
throw
new
SecurityException
(
"invalid address type"
);
}
GetField
gf
=
s
.
readFields
();
String
host
=
(
String
)
gf
.
get
(
"hostName"
,
null
);
int
address
=
gf
.
get
(
"address"
,
0
);
int
family
=
gf
.
get
(
"family"
,
0
);
InetAddressHolder
h
=
new
InetAddressHolder
(
host
,
address
,
family
);
UNSAFE
.
putObject
(
this
,
FIELDS_OFFSET
,
h
);
}
/* needed because the serializable fields no longer exist */
/**
* @serialField hostName String
* @serialField address int
* @serialField family int
*/
private
static
final
ObjectStreamField
[]
serialPersistentFields
=
{
new
ObjectStreamField
(
"hostName"
,
String
.
class
),
new
ObjectStreamField
(
"address"
,
int
.
class
),
new
ObjectStreamField
(
"family"
,
int
.
class
),
};
private
void
writeObject
(
ObjectOutputStream
s
)
throws
IOException
{
if
(
getClass
().
getClassLoader
()
!=
null
)
{
throw
new
SecurityException
(
"invalid address type"
);
}
PutField
pf
=
s
.
putFields
();
pf
.
put
(
"hostName"
,
holder
().
getHostName
());
pf
.
put
(
"address"
,
holder
().
getAddress
());
pf
.
put
(
"family"
,
holder
().
getFamily
());
s
.
writeFields
();
s
.
flush
();
}
}
...
...
src/share/classes/java/net/InetSocketAddress.java
浏览文件 @
72748b02
...
...
@@ -87,8 +87,8 @@ public class InetSocketAddress
if
(
hostname
!=
null
)
return
hostname
;
if
(
addr
!=
null
)
{
if
(
addr
.
ho
stName
!=
null
)
return
addr
.
ho
stName
;
if
(
addr
.
ho
lder
().
getHostName
()
!=
null
)
return
addr
.
ho
lder
().
getHostName
()
;
else
return
addr
.
getHostAddress
();
}
...
...
src/share/native/java/net/InetAddress.c
浏览文件 @
72748b02
...
...
@@ -33,8 +33,11 @@
*/
jclass
ia_class
;
jfieldID
ia_addressID
;
jfieldID
ia_familyID
;
jclass
iac_class
;
jfieldID
ia_holderID
;
jfieldID
iac_addressID
;
jfieldID
iac_familyID
;
jfieldID
iac_hostNameID
;
jfieldID
ia_preferIPv6AddressID
;
/*
...
...
@@ -48,10 +51,18 @@ Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) {
CHECK_NULL
(
c
);
ia_class
=
(
*
env
)
->
NewGlobalRef
(
env
,
c
);
CHECK_NULL
(
ia_class
);
ia_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
ia_class
,
"address"
,
"I"
);
CHECK_NULL
(
ia_addressID
);
ia_familyID
=
(
*
env
)
->
GetFieldID
(
env
,
ia_class
,
"family"
,
"I"
);
CHECK_NULL
(
ia_familyID
);
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress$InetAddressHolder"
);
CHECK_NULL
(
c
);
iac_class
=
(
*
env
)
->
NewGlobalRef
(
env
,
c
);
ia_holderID
=
(
*
env
)
->
GetFieldID
(
env
,
ia_class
,
"holder"
,
"Ljava/net/InetAddress$InetAddressHolder;"
);
CHECK_NULL
(
ia_holderID
);
ia_preferIPv6AddressID
=
(
*
env
)
->
GetStaticFieldID
(
env
,
ia_class
,
"preferIPv6Address"
,
"Z"
);
CHECK_NULL
(
ia_preferIPv6AddressID
);
iac_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
iac_class
,
"address"
,
"I"
);
CHECK_NULL
(
iac_addressID
);
iac_familyID
=
(
*
env
)
->
GetFieldID
(
env
,
iac_class
,
"family"
,
"I"
);
CHECK_NULL
(
iac_familyID
);
iac_hostNameID
=
(
*
env
)
->
GetFieldID
(
env
,
iac_class
,
"hostName"
,
"Ljava/lang/String;"
);
CHECK_NULL
(
iac_hostNameID
);
}
src/share/native/java/net/net_util.c
浏览文件 @
72748b02
...
...
@@ -84,6 +84,58 @@ void init(JNIEnv *env) {
}
}
/* The address, and family fields used to be in InetAddress
* but are now in an implementation object. So, there is an extra
* level of indirection to access them now.
*/
extern
jclass
iac_class
;
extern
jfieldID
ia_holderID
;
extern
jfieldID
iac_addressID
;
extern
jfieldID
iac_familyID
;
void
setInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
,
int
address
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
(
*
env
)
->
SetIntField
(
env
,
holder
,
iac_addressID
,
address
);
}
void
setInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
,
int
family
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
(
*
env
)
->
SetIntField
(
env
,
holder
,
iac_familyID
,
family
);
}
void
setInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
,
jobject
host
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
(
*
env
)
->
SetObjectField
(
env
,
holder
,
iac_hostNameID
,
host
);
}
int
getInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
return
(
*
env
)
->
GetIntField
(
env
,
holder
,
iac_addressID
);
}
int
getInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
return
(
*
env
)
->
GetIntField
(
env
,
holder
,
iac_familyID
);
}
jobject
getInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
)
{
jobject
holder
;
init
(
env
);
holder
=
(
*
env
)
->
GetObjectField
(
env
,
iaObj
,
ia_holderID
);
return
(
*
env
)
->
GetObjectField
(
env
,
holder
,
iac_hostNameID
);
}
JNIEXPORT
jobject
JNICALL
NET_SockaddrToInetAddress
(
JNIEnv
*
env
,
struct
sockaddr
*
him
,
int
*
port
)
{
jobject
iaObj
;
...
...
@@ -110,8 +162,8 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
iaObj
=
(
*
env
)
->
NewObject
(
env
,
inet4Cls
,
ia4_ctrID
);
CHECK_NULL_RETURN
(
iaObj
,
NULL
);
address
=
NET_IPv4MappedToIPv4
(
caddr
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia_addressID
,
address
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia_familyID
,
IPv4
);
setInetAddress_addr
(
env
,
iaObj
,
address
);
setInetAddress_family
(
env
,
iaObj
,
IPv4
);
}
else
{
static
jclass
inet6Cls
=
0
;
jint
scope
;
...
...
@@ -131,7 +183,7 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ia6_ipaddressID
,
ipaddress
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia_familyID
,
IPv6
);
setInetAddress_family
(
env
,
iaObj
,
IPv6
);
scope
=
getScopeID
(
him
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia6_scopeidID
,
scope
);
if
(
scope
>
0
)
...
...
@@ -153,9 +205,8 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
}
iaObj
=
(
*
env
)
->
NewObject
(
env
,
inet4Cls
,
ia4_ctrID
);
CHECK_NULL_RETURN
(
iaObj
,
NULL
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia_familyID
,
IPv4
);
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ia_addressID
,
ntohl
(
him4
->
sin_addr
.
s_addr
));
setInetAddress_family
(
env
,
iaObj
,
IPv4
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
him4
->
sin_addr
.
s_addr
));
*
port
=
ntohs
(
him4
->
sin_port
);
}
return
iaObj
;
...
...
@@ -167,8 +218,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
jint
family
=
AF_INET
;
#ifdef AF_INET6
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
)
==
IPv4
?
AF_INET
:
AF_INET6
;
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
if
(
him
->
sa_family
==
AF_INET6
)
{
#ifdef WIN32
struct
SOCKADDR_IN6
*
him6
=
(
struct
SOCKADDR_IN6
*
)
him
;
...
...
@@ -183,7 +233,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
return
JNI_FALSE
;
}
addrNew
=
NET_IPv4MappedToIPv4
(
caddrNew
);
addrCur
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
addrCur
=
getInetAddress_addr
(
env
,
iaObj
);
if
(
addrNew
==
addrCur
)
{
return
JNI_TRUE
;
}
else
{
...
...
@@ -215,7 +265,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
return
JNI_FALSE
;
}
addrNew
=
ntohl
(
him4
->
sin_addr
.
s_addr
);
addrCur
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
addrCur
=
getInetAddress_addr
(
env
,
iaObj
);
if
(
addrNew
==
addrCur
)
{
return
JNI_TRUE
;
}
else
{
...
...
src/share/native/java/net/net_util.h
浏览文件 @
72748b02
...
...
@@ -53,10 +53,18 @@
* i.e. psi_timeoutID is PlainSocketImpl's timeout field's ID.
*/
extern
jclass
ia_class
;
extern
jfieldID
ia_addressID
;
extern
jfieldID
ia_familyID
;
extern
jfieldID
iac_addressID
;
extern
jfieldID
iac_familyID
;
extern
jfieldID
iac_hostNameID
;
extern
jfieldID
ia_preferIPv6AddressID
;
extern
void
setInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
,
int
address
);
extern
void
setInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
,
int
family
);
extern
void
setInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
,
jobject
h
);
extern
int
getInetAddress_addr
(
JNIEnv
*
env
,
jobject
iaObj
);
extern
int
getInetAddress_family
(
JNIEnv
*
env
,
jobject
iaObj
);
extern
jobject
getInetAddress_hostName
(
JNIEnv
*
env
,
jobject
iaObj
);
extern
jclass
ia4_class
;
extern
jmethodID
ia4_ctrID
;
...
...
src/solaris/native/java/net/Inet4AddressImpl.c
浏览文件 @
72748b02
...
...
@@ -135,9 +135,6 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ni_ia4cls
=
(
*
env
)
->
FindClass
(
env
,
"java/net/Inet4Address"
);
ni_ia4cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia4cls
);
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_iahostID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"hostName"
,
"Ljava/lang/String;"
);
initialized
=
1
;
}
...
...
@@ -238,9 +235,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
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
,
name
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)(
iterator
->
ai_addr
))
->
sin_addr
.
s_addr
));
setInetAddress_hostName
(
env
,
iaObj
,
name
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
retLen
-
i
-
1
,
iaObj
);
i
++
;
iterator
=
iterator
->
ai_next
;
...
...
@@ -372,9 +368,6 @@ Java_java_net_Inet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
static
jclass
ni_iacls
;
static
jclass
ni_ia4cls
;
static
jmethodID
ni_ia4ctrID
;
static
jfieldID
ni_iaaddressID
;
static
jfieldID
ni_iahostID
;
static
jfieldID
ni_iafamilyID
;
static
int
initialized
=
0
;
/*
...
...
@@ -403,9 +396,6 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ni_ia4cls
=
(
*
env
)
->
FindClass
(
env
,
"java/net/Inet4Address"
);
ni_ia4cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia4cls
);
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_iahostID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"hostName"
,
"Ljava/lang/String;"
);
initialized
=
1
;
}
...
...
@@ -499,9 +489,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
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
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
i
++
,
iaObj
);
iterator
=
iterator
->
ai_next
;
}
...
...
src/solaris/native/java/net/Inet6AddressImpl.c
浏览文件 @
72748b02
...
...
@@ -120,9 +120,6 @@ static jclass ni_ia4cls;
static
jclass
ni_ia6cls
;
static
jmethodID
ni_ia4ctrID
;
static
jmethodID
ni_ia6ctrID
;
static
jfieldID
ni_iaaddressID
;
static
jfieldID
ni_iahostID
;
static
jfieldID
ni_iafamilyID
;
static
jfieldID
ni_ia6ipaddressID
;
static
int
initialized
=
0
;
...
...
@@ -159,9 +156,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ni_ia6cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia6cls
);
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_ia6ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia6cls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_iahostID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"hostName"
,
"Ljava/lang/String;"
);
ni_ia6ipaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_ia6cls
,
"ipaddress"
,
"[B"
);
initialized
=
1
;
}
...
...
@@ -315,9 +309,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
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
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
inetIndex
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
...
...
@@ -342,7 +335,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
(
*
env
)
->
SetBooleanField
(
env
,
iaObj
,
ia6_scopeidsetID
,
JNI_TRUE
);
}
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_ia6ipaddressID
,
ipaddress
);
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
...
...
src/solaris/native/java/net/NetworkInterface.c
浏览文件 @
72748b02
...
...
@@ -118,8 +118,6 @@ static jclass ni_ibcls;
static
jmethodID
ni_ia4ctrID
;
static
jmethodID
ni_ia6ctrID
;
static
jmethodID
ni_ibctrID
;
static
jfieldID
ni_iaaddressID
;
static
jfieldID
ni_iafamilyID
;
static
jfieldID
ni_ia6ipaddressID
;
static
jfieldID
ni_ibaddressID
;
static
jfieldID
ni_ib4broadcastID
;
...
...
@@ -195,8 +193,6 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) {
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_ia6ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia6cls
,
"<init>"
,
"()V"
);
ni_ibctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ibcls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_ia6ipaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_ia6cls
,
"ipaddress"
,
"[B"
);
ni_ibaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_ibcls
,
"address"
,
"Ljava/net/InetAddress;"
);
ni_ib4broadcastID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_ibcls
,
"broadcast"
,
"Ljava/net/Inet4Address;"
);
...
...
@@ -300,7 +296,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
netif
*
ifs
,
*
curr
;
#ifdef AF_INET6
int
family
=
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ni_iafamilyID
)
==
IPv4
)
?
AF_INET
:
AF_INET6
;
int
family
=
(
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
)
?
AF_INET
:
AF_INET6
;
#else
int
family
=
AF_INET
;
#endif
...
...
@@ -325,7 +321,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
if
(
family
==
addrP
->
family
)
{
if
(
family
==
AF_INET
)
{
int
address1
=
htonl
(((
struct
sockaddr_in
*
)
addrP
->
addr
)
->
sin_addr
.
s_addr
);
int
address2
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ni_iaaddressID
);
int
address2
=
getInetAddress_addr
(
env
,
iaObj
);
if
(
address1
==
address2
)
{
match
=
JNI_TRUE
;
...
...
@@ -651,7 +647,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) {
if
(
addrP
->
family
==
AF_INET
)
{
iaObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia4cls
,
ni_ia4ctrID
);
if
(
iaObj
)
{
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaaddressID
,
htonl
(((
struct
sockaddr_in
*
)
addrP
->
addr
)
->
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
iaObj
,
htonl
(((
struct
sockaddr_in
*
)
addrP
->
addr
)
->
sin_addr
.
s_addr
));
}
ibObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ibcls
,
ni_ibctrID
);
if
(
ibObj
)
{
...
...
@@ -660,8 +656,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) {
jobject
ia2Obj
=
NULL
;
ia2Obj
=
(
*
env
)
->
NewObject
(
env
,
ni_ia4cls
,
ni_ia4ctrID
);
if
(
ia2Obj
)
{
(
*
env
)
->
SetIntField
(
env
,
ia2Obj
,
ni_iaaddressID
,
htonl
(((
struct
sockaddr_in
*
)
addrP
->
brdcast
)
->
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
ia2Obj
,
htonl
(((
struct
sockaddr_in
*
)
addrP
->
brdcast
)
->
sin_addr
.
s_addr
));
(
*
env
)
->
SetObjectField
(
env
,
ibObj
,
ni_ib4broadcastID
,
ia2Obj
);
(
*
env
)
->
SetShortField
(
env
,
ibObj
,
ni_ib4maskID
,
addrP
->
mask
);
}
...
...
src/solaris/native/java/net/PlainDatagramSocketImpl.c
浏览文件 @
72748b02
...
...
@@ -552,14 +552,13 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
iaObj
=
NET_SockaddrToInetAddress
(
env
,
(
struct
sockaddr
*
)
&
remote_addr
,
&
port
);
#ifdef AF_INET6
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
)
==
IPv4
?
AF_INET
:
AF_INET6
;
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
#else
family
=
AF_INET
;
#endif
if
(
family
==
AF_INET
)
{
/* this API can't handle IPV6 addresses */
int
address
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
(
*
env
)
->
SetIntField
(
env
,
addressObj
,
ia_addressID
,
address
);
int
address
=
getInetAddress_addr
(
env
,
iaObj
);
setInetAddress_addr
(
env
,
addressObj
,
address
);
}
return
port
;
}
...
...
@@ -1028,23 +1027,18 @@ Java_java_net_PlainDatagramSocketImpl_datagramSocketClose(JNIEnv *env,
*/
static
void
mcast_set_if_by_if_v4
(
JNIEnv
*
env
,
jobject
this
,
int
fd
,
jobject
value
)
{
static
jfieldID
ni_addrsID
;
static
jfieldID
ia_addressID
;
struct
in_addr
in
;
jobjectArray
addrArray
;
jsize
len
;
jobject
addr
;
int
i
;
if
(
ni_addrsID
==
NULL
||
ia_addressID
==
NULL
)
{
if
(
ni_addrsID
==
NULL
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/NetworkInterface"
);
CHECK_NULL
(
c
);
ni_addrsID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"addrs"
,
"[Ljava/net/InetAddress;"
);
CHECK_NULL
(
ni_addrsID
);
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
CHECK_NULL
(
c
);
ia_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL
(
ia_addressID
);
}
addrArray
=
(
*
env
)
->
GetObjectField
(
env
,
value
,
ni_addrsID
);
...
...
@@ -1065,8 +1059,8 @@ 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
(
(
*
env
)
->
GetIntField
(
env
,
addr
,
ia_familyID
)
==
IPv4
)
{
in
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
addr
,
ia_addressID
));
if
(
getInetAddress_family
(
env
,
addr
)
==
IPv4
)
{
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
break
;
}
}
...
...
@@ -1116,17 +1110,9 @@ static void mcast_set_if_by_if_v6(JNIEnv *env, jobject this, int fd, jobject val
* Throw exception if failed.
*/
static
void
mcast_set_if_by_addr_v4
(
JNIEnv
*
env
,
jobject
this
,
int
fd
,
jobject
value
)
{
static
jfieldID
ia_addressID
;
struct
in_addr
in
;
if
(
ia_addressID
==
NULL
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
CHECK_NULL
(
c
);
ia_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL
(
ia_addressID
);
}
in
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
value
,
ia_addressID
)
);
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
value
)
);
if
(
JVM_SetSockOpt
(
fd
,
IPPROTO_IP
,
IP_MULTICAST_IF
,
(
const
char
*
)
&
in
,
sizeof
(
in
))
<
0
)
{
...
...
@@ -1456,7 +1442,6 @@ jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, jint opt) {
if
(
isIPV4
)
{
static
jclass
inet4_class
;
static
jmethodID
inet4_ctrID
;
static
jfieldID
inet4_addrID
;
static
jclass
ni_class
;
static
jmethodID
ni_ctrID
;
...
...
@@ -1486,15 +1471,13 @@ jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, jint opt) {
CHECK_NULL_RETURN
(
c
,
NULL
);
inet4_ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
c
,
"<init>"
,
"()V"
);
CHECK_NULL_RETURN
(
inet4_ctrID
,
NULL
);
inet4_addrID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL_RETURN
(
inet4_addrID
,
NULL
);
inet4_class
=
(
*
env
)
->
NewGlobalRef
(
env
,
c
);
CHECK_NULL_RETURN
(
inet4_class
,
NULL
);
}
addr
=
(
*
env
)
->
NewObject
(
env
,
inet4_class
,
inet4_ctrID
,
0
);
CHECK_NULL_RETURN
(
addr
,
NULL
);
(
*
env
)
->
SetIntField
(
env
,
addr
,
inet4_addrID
,
ntohl
(
in
.
s_addr
));
setInetAddress_addr
(
env
,
addr
,
ntohl
(
in
.
s_addr
));
/*
* For IP_MULTICAST_IF return InetAddress
...
...
@@ -1942,7 +1925,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
ipv6_join_leave
=
ipv6_available
();
#ifdef __linux__
if
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
)
==
IPv4
)
{
if
(
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
)
{
ipv6_join_leave
=
JNI_FALSE
;
}
#endif
...
...
@@ -1989,7 +1972,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
CHECK_NULL
(
ni_indexID
);
}
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
));
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
mname
.
imr_address
.
s_addr
=
0
;
mname
.
imr_ifindex
=
(
*
env
)
->
GetIntField
(
env
,
niObj
,
ni_indexID
);
mname_len
=
sizeof
(
struct
ip_mreqn
);
...
...
@@ -2007,11 +1990,11 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
}
addr
=
(
*
env
)
->
GetObjectArrayElement
(
env
,
addrArray
,
0
);
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
));
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
#ifdef __linux__
mname
.
imr_address
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
addr
,
ia_addressID
));
mname
.
imr_address
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
#else
mname
.
imr_interface
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
addr
,
ia_addressID
));
mname
.
imr_interface
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
#endif
mname_len
=
sizeof
(
struct
ip_mreq
);
}
...
...
@@ -2046,7 +2029,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
return
;
}
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
));
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
mname
.
imr_address
.
s_addr
=
0
;
mname
.
imr_ifindex
=
index
;
mname_len
=
sizeof
(
struct
ip_mreqn
);
...
...
@@ -2068,7 +2051,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
#else
mname
.
imr_interface
.
s_addr
=
in
.
s_addr
;
#endif
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
));
mname
.
imr_multiaddr
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
iaObj
));
mname_len
=
sizeof
(
struct
ip_mreq
);
}
}
...
...
@@ -2133,10 +2116,10 @@ static void mcast_join_leave(JNIEnv *env, jobject this,
jbyte
caddr
[
16
];
jint
family
;
jint
address
;
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
)
==
IPv4
?
AF_INET
:
AF_INET6
;
family
=
getInetAddress_family
(
env
,
iaObj
)
==
IPv4
?
AF_INET
:
AF_INET6
;
if
(
family
==
AF_INET
)
{
/* will convert to IPv4-mapped address */
memset
((
char
*
)
caddr
,
0
,
16
);
address
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
caddr
[
10
]
=
0xff
;
caddr
[
11
]
=
0xff
;
...
...
src/solaris/native/java/net/net_util_md.c
浏览文件 @
72748b02
...
...
@@ -777,7 +777,7 @@ JNIEXPORT int JNICALL
NET_InetAddressToSockaddr
(
JNIEnv
*
env
,
jobject
iaObj
,
int
port
,
struct
sockaddr
*
him
,
int
*
len
,
jboolean
v4MappedAddress
)
{
jint
family
;
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
);
family
=
getInetAddress_family
(
env
,
iaObj
);
#ifdef AF_INET6
/* needs work. 1. family 2. clean up him6 etc deallocate memory */
if
(
ipv6_available
()
&&
!
(
family
==
IPv4
&&
v4MappedAddress
==
JNI_FALSE
))
{
...
...
@@ -789,7 +789,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
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
if
(
address
==
INADDR_ANY
)
{
/* we would always prefer IPv6 wildcard address
caddr[10] = 0xff;
...
...
@@ -898,7 +898,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
return
-
1
;
}
memset
((
char
*
)
him4
,
0
,
sizeof
(
struct
sockaddr_in
));
address
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
him4
->
sin_port
=
htons
((
short
)
port
);
him4
->
sin_addr
.
s_addr
=
(
uint32_t
)
htonl
(
address
);
him4
->
sin_family
=
AF_INET
;
...
...
src/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java
浏览文件 @
72748b02
...
...
@@ -102,7 +102,7 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl
if
((
fd
!=
null
&&
fd1
!=
null
)
&&
!
connected
)
{
return
anyLocalBoundAddr
;
}
int
family
=
connectedAddress
==
null
?
-
1
:
connectedAddress
.
family
;
int
family
=
connectedAddress
==
null
?
-
1
:
connectedAddress
.
holder
().
getFamily
()
;
return
socketLocalAddress
(
family
);
}
else
return
super
.
getOption
(
optID
);
...
...
src/windows/native/java/net/Inet4AddressImpl.c
浏览文件 @
72748b02
...
...
@@ -114,9 +114,6 @@ Java_java_net_Inet4AddressImpl_getLocalHostName (JNIEnv *env, jobject this) {
static
jclass
ni_iacls
;
static
jclass
ni_ia4cls
;
static
jmethodID
ni_ia4ctrID
;
static
jfieldID
ni_iaaddressID
;
static
jfieldID
ni_iahostID
;
static
jfieldID
ni_iafamilyID
;
static
int
initialized
=
0
;
/*
...
...
@@ -149,9 +146,6 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ni_ia4cls
=
(
*
env
)
->
FindClass
(
env
,
"java/net/Inet4Address"
);
ni_ia4cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia4cls
);
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_iahostID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"hostName"
,
"Ljava/lang/String;"
);
initialized
=
1
;
}
...
...
@@ -208,8 +202,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ret
=
NULL
;
goto
cleanupAndReturn
;
}
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaaddressID
,
ntohl
(
address
));
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
address
));
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
0
,
iaObj
);
JNU_ReleaseStringPlatformChars
(
env
,
host
,
hostname
);
return
ret
;
...
...
@@ -242,9 +235,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ret
=
NULL
;
goto
cleanupAndReturn
;
}
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaaddressID
,
ntohl
((
*
addrp
)
->
s_addr
));
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
((
*
addrp
)
->
s_addr
));
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
i
,
iaObj
);
addrp
++
;
i
++
;
...
...
src/windows/native/java/net/Inet6AddressImpl.c
浏览文件 @
72748b02
...
...
@@ -77,9 +77,6 @@ static jclass ni_ia4cls;
static
jclass
ni_ia6cls
;
static
jmethodID
ni_ia4ctrID
;
static
jmethodID
ni_ia6ctrID
;
static
jfieldID
ni_iaaddressID
;
static
jfieldID
ni_iahostID
;
static
jfieldID
ni_iafamilyID
;
static
jfieldID
ni_ia6ipaddressID
;
static
int
initialized
=
0
;
...
...
@@ -104,9 +101,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
ni_ia6cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia6cls
);
ni_ia4ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia4cls
,
"<init>"
,
"()V"
);
ni_ia6ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
ni_ia6cls
,
"<init>"
,
"()V"
);
ni_iaaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_iafamilyID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"family"
,
"I"
);
ni_iahostID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"hostName"
,
"Ljava/lang/String;"
);
ni_ia6ipaddressID
=
(
*
env
)
->
GetFieldID
(
env
,
ni_ia6cls
,
"ipaddress"
,
"[B"
);
initialized
=
1
;
}
...
...
@@ -243,9 +237,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
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
);
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(((
struct
sockaddr_in
*
)
iterator
->
ai_addr
)
->
sin_addr
.
s_addr
));
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inetIndex
,
iaObj
);
inetIndex
++
;
}
else
if
(
iterator
->
ai_family
==
AF_INET6
)
{
...
...
@@ -269,7 +262,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
(
*
env
)
->
SetBooleanField
(
env
,
iaObj
,
ia6_scopeidsetID
,
JNI_TRUE
);
}
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_ia6ipaddressID
,
ipaddress
);
(
*
env
)
->
SetObjectField
(
env
,
iaObj
,
ni_iahostID
,
host
);
setInetAddress_hostName
(
env
,
iaObj
,
host
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
ret
,
inet6Index
,
iaObj
);
inet6Index
++
;
}
...
...
src/windows/native/java/net/NetworkInterface.c
浏览文件 @
72748b02
...
...
@@ -66,7 +66,6 @@ jfieldID ni_nameID; /* NetworkInterface.name */
jfieldID
ni_displayNameID
;
/* NetworkInterface.displayName */
jfieldID
ni_childsID
;
/* NetworkInterface.childs */
jclass
ni_iacls
;
/* InetAddress */
jfieldID
ni_iaAddr
;
/* InetAddress.address */
jclass
ni_ia4cls
;
/* Inet4Address */
jmethodID
ni_ia4Ctor
;
/* Inet4Address() */
...
...
@@ -480,7 +479,6 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls)
ni_iacls
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
ni_iacls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_iacls
);
ni_iaAddr
=
(
*
env
)
->
GetFieldID
(
env
,
ni_iacls
,
"address"
,
"I"
);
ni_ia4cls
=
(
*
env
)
->
FindClass
(
env
,
"java/net/Inet4Address"
);
ni_ia4cls
=
(
*
env
)
->
NewGlobalRef
(
env
,
ni_ia4cls
);
...
...
@@ -568,7 +566,7 @@ jobject createNetworkInterface
}
/* default ctor will set family to AF_INET */
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaAddr
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
if
(
addrs
->
mask
!=
-
1
)
{
ibObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ibcls
,
ni_ibctrID
);
if
(
ibObj
==
NULL
)
{
...
...
@@ -581,8 +579,7 @@ jobject createNetworkInterface
free_netaddr
(
netaddrP
);
return
NULL
;
}
(
*
env
)
->
SetIntField
(
env
,
ia2Obj
,
ni_iaAddr
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
ia2Obj
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
(
*
env
)
->
SetObjectField
(
env
,
ibObj
,
ni_ibbroadcastID
,
ia2Obj
);
(
*
env
)
->
SetShortField
(
env
,
ibObj
,
ni_ibmaskID
,
addrs
->
mask
);
(
*
env
)
->
SetObjectArrayElement
(
env
,
bindsArr
,
bind_index
++
,
ibObj
);
...
...
@@ -736,7 +733,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
(
JNIEnv
*
env
,
jclass
cls
,
jobject
iaObj
)
{
netif
*
ifList
,
*
curr
;
jint
addr
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ni_iaAddr
);
jint
addr
=
getInetAddress_addr
(
env
,
iaObj
);
jobject
netifObj
=
NULL
;
// Retained for now to support IPv4 only stack, java.net.preferIPv4Stack
...
...
src/windows/native/java/net/NetworkInterface.h
浏览文件 @
72748b02
...
...
@@ -71,7 +71,6 @@ extern jfieldID ni_displayNameID; /* NetworkInterface.displayName */
extern
jfieldID
ni_childsID
;
/* NetworkInterface.childs */
extern
jclass
ni_iacls
;
/* InetAddress */
extern
jfieldID
ni_iaAddr
;
/* InetAddress.address */
extern
jclass
ni_ia4cls
;
/* Inet4Address */
extern
jmethodID
ni_ia4Ctor
;
/* Inet4Address() */
...
...
src/windows/native/java/net/NetworkInterface_winXP.c
浏览文件 @
72748b02
...
...
@@ -33,6 +33,7 @@
#include "jni_util.h"
#include "NetworkInterface.h"
#include "net_util.h"
/*
* Windows implementation of the java.net.NetworkInterface native methods.
...
...
@@ -477,7 +478,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
}
/* default ctor will set family to AF_INET */
(
*
env
)
->
SetIntField
(
env
,
iaObj
,
ni_iaAddr
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
iaObj
,
ntohl
(
addrs
->
addr
.
him4
.
sin_addr
.
s_addr
));
ibObj
=
(
*
env
)
->
NewObject
(
env
,
ni_ibcls
,
ni_ibctrID
);
if
(
ibObj
==
NULL
)
{
...
...
@@ -490,8 +491,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
free_netaddr
(
netaddrP
);
return
NULL
;
}
(
*
env
)
->
SetIntField
(
env
,
ia2Obj
,
ni_iaAddr
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
setInetAddress_addr
(
env
,
ia2Obj
,
ntohl
(
addrs
->
brdcast
.
him4
.
sin_addr
.
s_addr
));
(
*
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
浏览文件 @
72748b02
...
...
@@ -432,7 +432,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
int
lcladdrlen
;
int
address
;
family
=
(
*
env
)
->
GetIntField
(
env
,
addressObj
,
ia_familyID
);
family
=
getInetAddress_family
(
env
,
addressObj
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Protocol family not supported"
);
...
...
@@ -452,7 +452,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
JNU_ThrowNullPointerException
(
env
,
"argument address"
);
return
;
}
else
{
address
=
(
*
env
)
->
GetIntField
(
env
,
addressObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
addressObj
);
}
if
(
NET_InetAddressToSockaddr
(
env
,
addressObj
,
port
,
(
struct
sockaddr
*
)
&
lcladdr
,
&
lcladdrlen
,
JNI_FALSE
)
!=
0
)
{
...
...
@@ -552,9 +552,9 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_connect0(JNIEnv *env, jobject thi
return
;
}
addr
=
(
*
env
)
->
GetIntField
(
env
,
address
,
ia_addressID
);
addr
=
getInetAddress_addr
(
env
,
address
);
family
=
(
*
env
)
->
GetIntField
(
env
,
address
,
ia_familyID
);
family
=
getInetAddress_family
(
env
,
address
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Protocol family not supported"
);
...
...
@@ -670,7 +670,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
return
;
}
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
);
family
=
getInetAddress_family
(
env
,
iaObj
);
if
(
family
==
IPv4
)
{
fdObj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
pdsi_fdID
);
}
else
{
...
...
@@ -714,7 +714,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
if
(
!
w2k_or_later
)
{
/* avoid this check on Win 2K or better. Does not work with IPv6.
* Check is not necessary on these OSes */
if
(
connected
)
{
address
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
}
else
{
address
=
ntohl
(
rmtaddr
.
him4
.
sin_addr
.
s_addr
);
}
...
...
@@ -823,7 +823,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
if
(
IS_NULL
(
addressObj
))
{
JNU_ThrowNullPointerException
(
env
,
"Null address in peek()"
);
}
else
{
address
=
(
*
env
)
->
GetIntField
(
env
,
addressObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
addressObj
);
/* We only handle IPv4 for now. Will support IPv6 once its in the os */
family
=
AF_INET
;
}
...
...
@@ -905,9 +905,8 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
JNU_ThrowByName
(
env
,
JNU_JAVAIOPKG
"InterruptedIOException"
,
0
);
return
0
;
}
(
*
env
)
->
SetIntField
(
env
,
addressObj
,
ia_addressID
,
ntohl
(
remote_addr
.
sin_addr
.
s_addr
));
(
*
env
)
->
SetIntField
(
env
,
addressObj
,
ia_familyID
,
IPv4
);
setInetAddress_addr
(
env
,
addressObj
,
ntohl
(
remote_addr
.
sin_addr
.
s_addr
));
setInetAddress_family
(
env
,
addressObj
,
IPv4
);
/* return port */
return
ntohs
(
remote_addr
.
sin_port
);
...
...
@@ -1574,21 +1573,16 @@ static int getInetAddrFromIf (JNIEnv *env, int family, jobject nif, jobject *iad
{
jobjectArray
addrArray
;
static
jfieldID
ni_addrsID
=
0
;
static
jfieldID
ia_familyID
=
0
;
jsize
len
;
jobject
addr
;
int
i
;
if
(
ni_addrsID
==
NULL
||
ia_familyID
==
NULL
)
{
if
(
ni_addrsID
==
NULL
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/NetworkInterface"
);
CHECK_NULL_RETURN
(
c
,
-
1
);
ni_addrsID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"addrs"
,
"[Ljava/net/InetAddress;"
);
CHECK_NULL_RETURN
(
ni_addrsID
,
-
1
);
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
CHECK_NULL_RETURN
(
c
,
-
1
);
ia_familyID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"family"
,
"I"
);
CHECK_NULL_RETURN
(
ia_familyID
,
-
1
);
}
addrArray
=
(
*
env
)
->
GetObjectField
(
env
,
nif
,
ni_addrsID
);
...
...
@@ -1606,7 +1600,7 @@ static int getInetAddrFromIf (JNIEnv *env, int family, jobject nif, jobject *iad
for
(
i
=
0
;
i
<
len
;
i
++
)
{
int
fam
;
addr
=
(
*
env
)
->
GetObjectArrayElement
(
env
,
addrArray
,
i
);
fam
=
(
*
env
)
->
GetIntField
(
env
,
addr
,
ia_familyID
);
fam
=
getInetAddress_family
(
env
,
addr
);
if
(
fam
==
family
)
{
*
iaddr
=
addr
;
return
0
;
...
...
@@ -1618,20 +1612,13 @@ static int getInetAddrFromIf (JNIEnv *env, int family, jobject nif, jobject *iad
static
int
getInet4AddrFromIf
(
JNIEnv
*
env
,
jobject
nif
,
struct
in_addr
*
iaddr
)
{
jobject
addr
;
static
jfieldID
ia_addressID
;
int
ret
=
getInetAddrFromIf
(
env
,
IPv4
,
nif
,
&
addr
);
if
(
ret
==
-
1
)
{
return
-
1
;
}
if
(
ia_addressID
==
0
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
CHECK_NULL_RETURN
(
c
,
-
1
);
ia_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL_RETURN
(
ia_addressID
,
-
1
);
}
iaddr
->
s_addr
=
htonl
((
*
env
)
->
GetIntField
(
env
,
addr
,
ia_addressID
));
iaddr
->
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
addr
));
return
0
;
}
...
...
@@ -1706,17 +1693,9 @@ static void setMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1,
}
opt
=
java_net_SocketOptions_IP_MULTICAST_IF2
;
}
else
{
static
jfieldID
ia_addressID
;
struct
in_addr
in
;
if
(
ia_addressID
==
NULL
)
{
jclass
c
=
(
*
env
)
->
FindClass
(
env
,
"java/net/InetAddress"
);
CHECK_NULL
(
c
);
ia_addressID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL
(
ia_addressID
);
}
in
.
s_addr
=
htonl
((
*
env
)
->
GetIntField
(
env
,
value
,
ia_addressID
));
in
.
s_addr
=
htonl
(
getInetAddress_addr
(
env
,
value
));
if
(
setsockopt
(
fd
,
IPPROTO_IP
,
IP_MULTICAST_IF
,
(
const
char
*
)
&
in
,
sizeof
(
in
))
<
0
)
{
...
...
@@ -1945,7 +1924,6 @@ jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint o
if
(
isIPV4
)
{
static
jclass
inet4_class
;
static
jmethodID
inet4_ctrID
;
static
jfieldID
inet4_addrID
;
static
jclass
ni_class
;
static
jmethodID
ni_ctrID
;
...
...
@@ -1975,15 +1953,13 @@ jobject getMulticastInterface(JNIEnv *env, jobject this, int fd, int fd1, jint o
CHECK_NULL_RETURN
(
c
,
NULL
);
inet4_ctrID
=
(
*
env
)
->
GetMethodID
(
env
,
c
,
"<init>"
,
"()V"
);
CHECK_NULL_RETURN
(
inet4_ctrID
,
NULL
);
inet4_addrID
=
(
*
env
)
->
GetFieldID
(
env
,
c
,
"address"
,
"I"
);
CHECK_NULL_RETURN
(
inet4_addrID
,
NULL
);
inet4_class
=
(
*
env
)
->
NewGlobalRef
(
env
,
c
);
CHECK_NULL_RETURN
(
inet4_class
,
NULL
);
}
addr
=
(
*
env
)
->
NewObject
(
env
,
inet4_class
,
inet4_ctrID
,
0
);
CHECK_NULL_RETURN
(
addr
,
NULL
);
(
*
env
)
->
SetIntField
(
env
,
addr
,
inet4_addrID
,
ntohl
(
in
.
s_addr
));
setInetAddress_addr
(
env
,
addr
,
ntohl
(
in
.
s_addr
));
/*
* For IP_MULTICAST_IF return InetAddress
...
...
src/windows/native/java/net/TwoStacksPlainSocketImpl.c
浏览文件 @
72748b02
...
...
@@ -411,7 +411,7 @@ Java_java_net_TwoStacksPlainSocketImpl_socketBind(JNIEnv *env, jobject this,
fdObj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
psi_fdID
);
fd1Obj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
psi_fd1ID
);
family
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
);
family
=
getInetAddress_family
(
env
,
iaObj
);
if
(
family
==
IPv6
&&
!
ipv6_supported
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
...
...
@@ -724,9 +724,8 @@ Java_java_net_TwoStacksPlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
return
;
}
(
*
env
)
->
SetIntField
(
env
,
socketAddressObj
,
ia_addressID
,
ntohl
(
him
.
him4
.
sin_addr
.
s_addr
));
(
*
env
)
->
SetIntField
(
env
,
socketAddressObj
,
ia_familyID
,
IPv4
);
setInetAddress_addr
(
env
,
socketAddressObj
,
ntohl
(
him
.
him4
.
sin_addr
.
s_addr
));
setInetAddress_family
(
env
,
socketAddressObj
,
IPv4
);
(
*
env
)
->
SetObjectField
(
env
,
socket
,
psi_addressID
,
socketAddressObj
);
}
else
{
jbyteArray
addr
;
...
...
@@ -754,7 +753,7 @@ Java_java_net_TwoStacksPlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
}
addr
=
(
*
env
)
->
GetObjectField
(
env
,
socketAddressObj
,
ia6_ipaddressID
);
(
*
env
)
->
SetByteArrayRegion
(
env
,
addr
,
0
,
16
,
(
const
char
*
)
&
him
.
him6
.
sin6_addr
);
(
*
env
)
->
SetIntField
(
env
,
socketAddressObj
,
ia_familyID
,
IPv6
);
setInetAddress_family
(
env
,
socketAddressObj
,
IPv6
);
scope
=
him
.
him6
.
sin6_scope_id
;
(
*
env
)
->
SetIntField
(
env
,
socketAddressObj
,
ia6_scopeidID
,
scope
);
if
(
scope
>
0
)
{
...
...
src/windows/native/java/net/net_util_md.c
浏览文件 @
72748b02
...
...
@@ -804,7 +804,7 @@ JNIEXPORT int JNICALL
NET_InetAddressToSockaddr
(
JNIEnv
*
env
,
jobject
iaObj
,
int
port
,
struct
sockaddr
*
him
,
int
*
len
,
jboolean
v4MappedAddress
)
{
jint
family
,
iafam
;
iafam
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_familyID
);
iafam
=
getInetAddress_family
(
env
,
iaObj
);
family
=
(
iafam
==
IPv4
)
?
AF_INET
:
AF_INET6
;
if
(
ipv6_available
()
&&
!
(
family
==
AF_INET
&&
v4MappedAddress
==
JNI_FALSE
))
{
struct
SOCKADDR_IN6
*
him6
=
(
struct
SOCKADDR_IN6
*
)
him
;
...
...
@@ -815,7 +815,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
=
(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
if
(
address
==
INADDR_ANY
)
{
/* we would always prefer IPv6 wildcard address
caddr[10] = 0xff;
...
...
@@ -854,7 +854,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr
return
-
1
;
}
memset
((
char
*
)
him4
,
0
,
sizeof
(
struct
sockaddr_in
));
address
=
(
int
)(
*
env
)
->
GetIntField
(
env
,
iaObj
,
ia_addressID
);
address
=
getInetAddress_addr
(
env
,
iaObj
);
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录