PlainDatagramSocketImpl.java (ttl): Removed.
* java/net/PlainDatagramSocketImpl.java (ttl): Removed. * java/net/natPlainDatagramSocketImpl.cc (setTimeToLive): Implemented. (getTimeToLive): Implemented. (setOption): Implemented IP_MULTICAST_IF. From-SVN: r27922
This commit is contained in:
parent
84d5945325
commit
e75a9d7719
|
@ -1,3 +1,10 @@
|
||||||
|
1999-07-02 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/net/PlainDatagramSocketImpl.java (ttl): Removed.
|
||||||
|
* java/net/natPlainDatagramSocketImpl.cc (setTimeToLive): Implemented.
|
||||||
|
(getTimeToLive): Implemented.
|
||||||
|
(setOption): Implemented IP_MULTICAST_IF.
|
||||||
|
|
||||||
1999-07-01 Bryce McKinlay <bryce@albatross.co.nz>
|
1999-07-01 Bryce McKinlay <bryce@albatross.co.nz>
|
||||||
|
|
||||||
* java/lang/String.java (toString): Check for this == null and throw
|
* java/lang/String.java (toString): Check for this == null and throw
|
||||||
|
|
|
@ -43,10 +43,8 @@ class PlainDatagramSocketImpl extends DatagramSocketImpl
|
||||||
// localAddress cache
|
// localAddress cache
|
||||||
InetAddress localAddress;
|
InetAddress localAddress;
|
||||||
|
|
||||||
// These values are set/read by setOption/getOption.
|
// 'timeout' is set/read by setOption/getOption.
|
||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
/* InetAddress iface = null; */
|
|
||||||
int ttl = -1;
|
|
||||||
|
|
||||||
// FIXME: Probably should have bind (and create?) calls from DatagramSocket
|
// FIXME: Probably should have bind (and create?) calls from DatagramSocket
|
||||||
// constuctor. If so, then same change should be made to the corresponding
|
// constuctor. If so, then same change should be made to the corresponding
|
||||||
|
|
|
@ -51,6 +51,14 @@ union McastReq
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union InAddr
|
||||||
|
{
|
||||||
|
struct in_addr addr;
|
||||||
|
#ifdef HAVE_INET6
|
||||||
|
struct in6_addr addr6;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// FIXME: routines here and/or in natPlainSocketImpl.cc could throw
|
// FIXME: routines here and/or in natPlainSocketImpl.cc could throw
|
||||||
// NoRouteToHostException; also consider UnknownHostException, ConnectException.
|
// NoRouteToHostException; also consider UnknownHostException, ConnectException.
|
||||||
|
@ -268,17 +276,31 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
|
||||||
void
|
void
|
||||||
java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
|
java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
|
||||||
{
|
{
|
||||||
this->ttl = ttl;
|
// Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4.
|
||||||
// throws IOException;
|
char val = (char) ttl;
|
||||||
// FIXME: TODO - PlainDatagramSocketImpl::setTimeToLive
|
socklen_t val_len = sizeof(val);
|
||||||
|
if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char msg[100];
|
||||||
|
char* strerr = strerror (errno);
|
||||||
|
sprintf (msg, "DatagramSocketImpl.setTimeToLime: %.*s", 80, strerr);
|
||||||
|
JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
|
||||||
}
|
}
|
||||||
|
|
||||||
jint
|
jint
|
||||||
java::net::PlainDatagramSocketImpl::getTimeToLive ()
|
java::net::PlainDatagramSocketImpl::getTimeToLive ()
|
||||||
{
|
{
|
||||||
// throws IOException;
|
// Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4.
|
||||||
// FIXME: TODO - PlainDatagramSocketImpl::getTimeToLive
|
char val;
|
||||||
return ttl;
|
socklen_t val_len = sizeof(val);
|
||||||
|
if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0)
|
||||||
|
return ((int) val) & 0xFF;
|
||||||
|
|
||||||
|
char msg[100];
|
||||||
|
char* strerr = strerror (errno);
|
||||||
|
sprintf (msg, "DatagramSocketImpl.setTimeToLime: %.*s", 80, strerr);
|
||||||
|
JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -385,9 +407,38 @@ java::net::PlainDatagramSocketImpl::setOption (jint optID,
|
||||||
JvNewStringUTF ("SO_BINDADDR: read only option")));
|
JvNewStringUTF ("SO_BINDADDR: read only option")));
|
||||||
return;
|
return;
|
||||||
case _Jv_IP_MULTICAST_IF_ :
|
case _Jv_IP_MULTICAST_IF_ :
|
||||||
// FIXME: TODO - Implement IP_MULTICAST_IF.
|
union InAddr u;
|
||||||
JvThrow (new java::lang::InternalError (
|
jbyteArray haddress;
|
||||||
JvNewStringUTF ("IP_MULTICAST_IF: option not implemented")));
|
jbyte *bytes;
|
||||||
|
int len;
|
||||||
|
int level, opname;
|
||||||
|
const char *ptr;
|
||||||
|
|
||||||
|
haddress = ((java::net::InetAddress *) value)->address;
|
||||||
|
bytes = elements (haddress);
|
||||||
|
len = haddress->length;
|
||||||
|
if (len == 4)
|
||||||
|
{
|
||||||
|
level = IPPROTO_IP;
|
||||||
|
opname = IP_MULTICAST_IF;
|
||||||
|
memcpy (&u.addr, bytes, len);
|
||||||
|
len = sizeof (struct in_addr);
|
||||||
|
ptr = (const char *) &u.addr;
|
||||||
|
}
|
||||||
|
#ifdef HAVE_INET6
|
||||||
|
else if (len == 16)
|
||||||
|
{
|
||||||
|
level = IPPROTO_IPV6;
|
||||||
|
opname = IPV6_MULTICAST_IF;
|
||||||
|
memcpy (&u.addr6, bytes, len);
|
||||||
|
len = sizeof (struct in_addr6);
|
||||||
|
ptr = (const char *) &u.addr6;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
goto error;
|
||||||
|
if (::setsockopt (fnum, level, opname, ptr, len) != 0)
|
||||||
|
goto error;
|
||||||
return;
|
return;
|
||||||
case _Jv_SO_TIMEOUT_ :
|
case _Jv_SO_TIMEOUT_ :
|
||||||
timeout = val;
|
timeout = val;
|
||||||
|
|
Loading…
Reference in New Issue