summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/UdpEndpointI.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/UdpEndpointI.java')
-rw-r--r--java/src/IceInternal/UdpEndpointI.java607
1 files changed, 186 insertions, 421 deletions
diff --git a/java/src/IceInternal/UdpEndpointI.java b/java/src/IceInternal/UdpEndpointI.java
index 24a0fcaf29f..43b5ba48d50 100644
--- a/java/src/IceInternal/UdpEndpointI.java
+++ b/java/src/IceInternal/UdpEndpointI.java
@@ -9,208 +9,28 @@
package IceInternal;
-final class UdpEndpointI extends EndpointI
+final class UdpEndpointI extends IPEndpointI
{
- public
- UdpEndpointI(Instance instance, String ho, int po, String mif, int mttl, boolean conn, String conId, boolean co)
+ public UdpEndpointI(ProtocolInstance instance, String ho, int po, String mif, int mttl, boolean conn, String conId,
+ boolean co)
{
- super(conId);
- _instance = instance;
- _host = ho;
- _port = po;
+ super(instance, ho, po, conId);
_mcastInterface = mif;
_mcastTtl = mttl;
_connect = conn;
_compress = co;
- calcHashValue();
}
- public
- UdpEndpointI(Instance instance, String str, boolean oaEndpoint)
+ public UdpEndpointI(ProtocolInstance instance)
{
- super("");
- _instance = instance;
- _host = null;
- _port = 0;
+ super(instance);
_connect = false;
_compress = false;
-
- String[] arr = str.split("[ \t\n\r]+");
-
- int i = 0;
- while(i < arr.length)
- {
- if(arr[i].length() == 0)
- {
- i++;
- continue;
- }
-
- String option = arr[i++];
- if(option.charAt(0) != '-')
- {
- throw new Ice.EndpointParseException("expected an endpoint option but found `" + option +
- "' in endpoint `udp " + str + "'");
- }
-
- String argument = null;
- if(i < arr.length && arr[i].charAt(0) != '-')
- {
- argument = arr[i++];
- if(argument.charAt(0) == '\"' && argument.charAt(argument.length() - 1) == '\"')
- {
- argument = argument.substring(1, argument.length() - 1);
- }
- }
-
- if(option.equals("-h"))
- {
- if(argument == null)
- {
- throw new Ice.EndpointParseException("no argument provided for -h option in endpoint `udp "
- + str + "'");
- }
-
- _host = argument;
- }
- else if(option.equals("-p"))
- {
- if(argument == null)
- {
- throw new Ice.EndpointParseException("no argument provided for -p option in endpoint `udp "
- + str + "'");
- }
-
- try
- {
- _port = Integer.parseInt(argument);
- }
- catch(NumberFormatException ex)
- {
- throw new Ice.EndpointParseException("invalid port value `" + argument + "' in endpoint `udp " +
- str + "'");
- }
-
- if(_port < 0 || _port > 65535)
- {
- throw new Ice.EndpointParseException("port value `" + argument +
- "' out of range in endpoint `udp " + str + "'");
- }
- }
- else if(option.equals("-c"))
- {
- if(argument != null)
- {
- throw new Ice.EndpointParseException("unexpected argument `" + argument +
- "' provided for -c option in `udp " + str + "'");
- }
-
- _connect = true;
- }
- else if(option.equals("-z"))
- {
- if(argument != null)
- {
- throw new Ice.EndpointParseException("unexpected argument `" + argument +
- "' provided for -z option in `udp " + str + "'");
- }
-
- _compress = true;
- }
- else if(option.equals("-v") || option.equals("-e"))
- {
- if(argument == null)
- {
- throw new Ice.EndpointParseException("no argument provided for " + option + " option in endpoint " +
- "`udp " + str + "'");
- }
-
- try
- {
- Ice.EncodingVersion v = Ice.Util.stringToEncodingVersion(argument);
- if(v.major != 1 || v.minor != 0)
- {
- _instance.initializationData().logger.warning("deprecated udp endpoint option: " + option);
- }
- }
- catch(Ice.VersionParseException e)
- {
- throw new Ice.EndpointParseException("invalid version `" + argument + "' in endpoint `udp " +
- str + "':\n" + e.str);
- }
- }
- else if(option.equals("--interface"))
- {
- if(argument == null)
- {
- throw new Ice.EndpointParseException("no argument provided for --interface option in endpoint `udp "
- + str + "'");
- }
-
- _mcastInterface = argument;
- }
- else if(option.equals("--ttl"))
- {
- if(argument == null)
- {
- throw new Ice.EndpointParseException("no argument provided for --ttl option in endpoint `udp "
- + str + "'");
- }
-
- try
- {
- _mcastTtl = Integer.parseInt(argument);
- }
- catch(NumberFormatException ex)
- {
- throw new Ice.EndpointParseException("invalid TTL value `" + argument + "' in endpoint `udp " +
- str + "'");
- }
-
- if(_mcastTtl < 0)
- {
- throw new Ice.EndpointParseException("TTL value `" + argument +
- "' out of range in endpoint `udp " + str + "'");
- }
- }
- else
- {
- throw new Ice.EndpointParseException("unknown option `" + option + "' in `udp " + str + "'");
- }
- }
-
- if(_host == null)
- {
- _host = _instance.defaultsAndOverrides().defaultHost;
- }
- else if(_host.equals("*"))
- {
- if(oaEndpoint)
- {
- _host = null;
- }
- else
- {
- throw new Ice.EndpointParseException("`-h *' not valid for proxy endpoint `udp " + str + "'");
- }
- }
-
- if(_host == null)
- {
- _host = "";
- }
-
- calcHashValue();
}
- public
- UdpEndpointI(BasicStream s)
+ public UdpEndpointI(ProtocolInstance instance, BasicStream s)
{
- super("");
- _instance = s.instance();
- s.startReadEncaps();
- _host = s.readString();
- _port = s.readInt();
+ super(instance, s);
if(s.getReadEncoding().equals(Ice.Util.Encoding_1_0))
{
s.readByte();
@@ -222,145 +42,59 @@ final class UdpEndpointI extends EndpointI
//_connect = s.readBool();
_connect = false;
_compress = s.readBool();
- s.endReadEncaps();
- calcHashValue();
- }
-
- //
- // Marshal the endpoint
- //
- public void
- streamWrite(BasicStream s)
- {
- s.writeShort(Ice.UDPEndpointType.value);
- s.startWriteEncaps();
- s.writeString(_host);
- s.writeInt(_port);
- if(s.getWriteEncoding().equals(Ice.Util.Encoding_1_0))
- {
- Ice.Util.Protocol_1_0.__write(s);
- Ice.Util.Encoding_1_0.__write(s);
- }
- // Not transmitted.
- //s.writeBool(_connect);
- s.writeBool(_compress);
- s.endWriteEncaps();
- }
-
- //
- // Convert the endpoint to its string form
- //
- public String
- _toString()
- {
- //
- // WARNING: Certain features, such as proxy validation in Glacier2,
- // depend on the format of proxy strings. Changes to toString() and
- // methods called to generate parts of the reference string could break
- // these features. Please review for all features that depend on the
- // format of proxyToString() before changing this and related code.
- //
- String s = "udp";
-
- if(_host != null && _host.length() > 0)
- {
- s += " -h ";
- boolean addQuote = _host.indexOf(':') != -1;
- if(addQuote)
- {
- s += "\"";
- }
- s += _host;
- if(addQuote)
- {
- s += "\"";
- }
- }
-
- s += " -p " + _port;
-
- if(_mcastInterface.length() != 0)
- {
- s += " --interface " + _mcastInterface;
- }
-
- if(_mcastTtl != -1)
- {
- s += " --ttl " + _mcastTtl;
- }
-
- if(_connect)
- {
- s += " -c";
- }
-
- if(_compress)
- {
- s += " -z";
- }
-
- return s;
}
//
// Return the endpoint information.
//
- public Ice.EndpointInfo
- getInfo()
+ public Ice.EndpointInfo getInfo()
{
- return new Ice.UDPEndpointInfo(-1, _compress, _host, _port, _mcastInterface, _mcastTtl)
+ Ice.UDPEndpointInfo info = new Ice.UDPEndpointInfo()
{
public short type()
{
- return Ice.UDPEndpointType.value;
+ return UdpEndpointI.this.type();
}
-
+
public boolean datagram()
{
- return true;
+ return UdpEndpointI.this.datagram();
}
-
+
public boolean secure()
{
- return false;
+ return UdpEndpointI.this.secure();
}
};
- }
- //
- // Return the endpoint type
- //
- public short
- type()
- {
- return Ice.UDPEndpointType.value;
+ fillEndpointInfo(info);
+ return info;
}
//
- // Return the protocol name
+ // Return the timeout for the endpoint in milliseconds. 0 means
+ // non-blocking, -1 means no timeout.
//
- public String
- protocol()
+ public int timeout()
{
- return "udp";
+ return -1;
}
//
- // Return the timeout for the endpoint in milliseconds. 0 means
- // non-blocking, -1 means no timeout.
+ // Return a new endpoint with a different timeout value, provided
+ // that timeouts are supported by the endpoint. Otherwise the same
+ // endpoint is returned.
//
- public int
- timeout()
+ public EndpointI timeout(int timeout)
{
- return -1;
+ return this;
}
//
// Return true if the endpoints support bzip2 compress, or false
// otherwise.
//
- public boolean
- compress()
+ public boolean compress()
{
return _compress;
}
@@ -370,8 +104,7 @@ final class UdpEndpointI extends EndpointI
// provided that compression is supported by the
// endpoint. Otherwise the same endpoint is returned.
//
- public EndpointI
- compress(boolean compress)
+ public EndpointI compress(boolean compress)
{
if(compress == _compress)
{
@@ -385,38 +118,9 @@ final class UdpEndpointI extends EndpointI
}
//
- // Return a new endpoint with a different connection id.
- //
- public EndpointI
- connectionId(String connectionId)
- {
- if(connectionId.equals(_connectionId))
- {
- return this;
- }
- else
- {
- return new UdpEndpointI(_instance, _host, _port, _mcastInterface, _mcastTtl, _connect, connectionId,
- _compress);
- }
- }
-
- //
- // Return a new endpoint with a different timeout value, provided
- // that timeouts are supported by the endpoint. Otherwise the same
- // endpoint is returned.
- //
- public EndpointI
- timeout(int timeout)
- {
- return this;
- }
-
- //
// Return true if the endpoint is datagram-based.
//
- public boolean
- datagram()
+ public boolean datagram()
{
return true;
}
@@ -424,8 +128,7 @@ final class UdpEndpointI extends EndpointI
//
// Return true if the endpoint is secure.
//
- public boolean
- secure()
+ public boolean secure()
{
return false;
}
@@ -437,103 +140,64 @@ final class UdpEndpointI extends EndpointI
// "effective" endpoint, which might differ from this endpoint,
// for example, if a dynamic port number is assigned.
//
- public Transceiver
- transceiver(EndpointIHolder endpoint)
+ public Transceiver transceiver(EndpointIHolder endpoint)
{
UdpTransceiver p = new UdpTransceiver(_instance, _host, _port, _mcastInterface, _connect);
- endpoint.value = new UdpEndpointI(_instance, _host, p.effectivePort(), _mcastInterface, _mcastTtl,
- _connect, _connectionId, _compress);
+ endpoint.value = createEndpoint(_host, p.effectivePort(), _connectionId);
return p;
}
//
- // Return connectors for this endpoint, or empty list if no connector
- // is available.
- //
- public java.util.List<Connector>
- connectors(Ice.EndpointSelectionType selType)
- {
- return _instance.endpointHostResolver().resolve(_host, _port, selType, this);
- }
-
- public void
- connectors_async(Ice.EndpointSelectionType selType, EndpointI_connectors callback)
- {
- _instance.endpointHostResolver().resolve(_host, _port, selType, this, callback);
- }
-
- //
// Return an acceptor for this endpoint, or null if no acceptors
// is available. In case an acceptor is created, this operation
// also returns a new "effective" endpoint, which might differ
// from this endpoint, for example, if a dynamic port number is
// assigned.
//
- public Acceptor
- acceptor(EndpointIHolder endpoint, String adapterName)
+ public Acceptor acceptor(EndpointIHolder endpoint, String adapterName)
{
endpoint.value = this;
return null;
}
//
- // Expand endpoint out in to separate endpoints for each local
- // host if listening on INADDR_ANY.
+ // Convert the endpoint to its string form
//
- public java.util.List<EndpointI>
- expand()
+ public String options()
{
- java.util.ArrayList<EndpointI> endps = new java.util.ArrayList<EndpointI>();
- java.util.ArrayList<String> hosts =
- Network.getHostsForEndpointExpand(_host, _instance.protocolSupport(), false);
- if(hosts == null || hosts.isEmpty())
+ //
+ // WARNING: Certain features, such as proxy validation in Glacier2,
+ // depend on the format of proxy strings. Changes to toString() and
+ // methods called to generate parts of the reference string could break
+ // these features. Please review for all features that depend on the
+ // format of proxyToString() before changing this and related code.
+ //
+ String s = super.options();
+
+ if(_mcastInterface.length() != 0)
{
- endps.add(this);
+ s += " --interface " + _mcastInterface;
}
- else
+
+ if(_mcastTtl != -1)
{
- for(String host : hosts)
- {
- endps.add(new UdpEndpointI(_instance, host, _port, _mcastInterface, _mcastTtl, _connect, _connectionId,
- _compress));
- }
+ s += " --ttl " + _mcastTtl;
}
- return endps;
- }
- //
- // Check whether the endpoint is equivalent to another one.
- //
- public boolean
- equivalent(EndpointI endpoint)
- {
- if(!(endpoint instanceof UdpEndpointI))
+ if(_connect)
{
- return false;
+ s += " -c";
}
- UdpEndpointI udpEndpointI = (UdpEndpointI)endpoint;
- return udpEndpointI._host.equals(_host) && udpEndpointI._port == _port;
- }
- public java.util.List<Connector>
- connectors(java.util.List<java.net.InetSocketAddress> addresses, NetworkProxy proxy)
- {
- java.util.ArrayList<Connector> connectors = new java.util.ArrayList<Connector>();
- for(java.net.InetSocketAddress p : addresses)
+ if(_compress)
{
- connectors.add(new UdpConnector(_instance, p, _mcastInterface, _mcastTtl, _connectionId));
+ s += " -z";
}
- return connectors;
- }
- public int
- hashCode()
- {
- return _hashCode;
+ return s;
}
- public int
- compareTo(EndpointI obj) // From java.lang.Comparable
+ public int compareTo(EndpointI obj) // From java.lang.Comparable
{
if(!(obj instanceof UdpEndpointI))
{
@@ -545,23 +209,6 @@ final class UdpEndpointI extends EndpointI
{
return 0;
}
- else
- {
- int r = super.compareTo(p);
- if(r != 0)
- {
- return r;
- }
- }
-
- if(_port < p._port)
- {
- return -1;
- }
- else if(p._port < _port)
- {
- return 1;
- }
if(!_connect && p._connect)
{
@@ -596,30 +243,148 @@ final class UdpEndpointI extends EndpointI
return rc;
}
- return _host.compareTo(p._host);
+ return super.compareTo(obj);
}
- private void
- calcHashValue()
+ //
+ // Marshal the endpoint
+ //
+ protected void streamWriteImpl(BasicStream s)
{
- int h = 5381;
- h = IceInternal.HashUtil.hashAdd(h, Ice.UDPEndpointType.value);
- h = IceInternal.HashUtil.hashAdd(h, _host);
- h = IceInternal.HashUtil.hashAdd(h, _port);
+ super.streamWriteImpl(s);
+ if(s.getWriteEncoding().equals(Ice.Util.Encoding_1_0))
+ {
+ Ice.Util.Protocol_1_0.__write(s);
+ Ice.Util.Encoding_1_0.__write(s);
+ }
+ // Not transmitted.
+ //s.writeBool(_connect);
+ s.writeBool(_compress);
+ }
+
+ protected int hashInit(int h)
+ {
+ h = super.hashInit(h);
h = IceInternal.HashUtil.hashAdd(h, _mcastInterface);
h = IceInternal.HashUtil.hashAdd(h, _mcastTtl);
h = IceInternal.HashUtil.hashAdd(h, _connect);
- h = IceInternal.HashUtil.hashAdd(h, _connectionId);
h = IceInternal.HashUtil.hashAdd(h, _compress);
- _hashCode = h;
+ return h;
+ }
+
+ protected void fillEndpointInfo(Ice.IPEndpointInfo info)
+ {
+ super.fillEndpointInfo(info);
+ if(info instanceof Ice.UDPEndpointInfo)
+ {
+ Ice.UDPEndpointInfo udpInfo = (Ice.UDPEndpointInfo)info;
+ udpInfo.timeout = -1;
+ udpInfo.compress = _compress;
+ udpInfo.mcastInterface = _mcastInterface;
+ udpInfo.mcastTtl = _mcastTtl;
+ }
+ }
+
+ protected boolean checkOption(String option, String argument, String endpoint)
+ {
+ if(super.checkOption(option, argument, endpoint))
+ {
+ return true;
+ }
+
+ if(option.equals("-c"))
+ {
+ if(argument != null)
+ {
+ throw new Ice.EndpointParseException("unexpected argument `" + argument +
+ "' provided for -c option in " + endpoint);
+ }
+
+ _connect = true;
+ }
+ else if(option.equals("-z"))
+ {
+ if(argument != null)
+ {
+ throw new Ice.EndpointParseException("unexpected argument `" + argument +
+ "' provided for -z option in " + endpoint);
+ }
+
+ _compress = true;
+ }
+ else if(option.equals("-v") || option.equals("-e"))
+ {
+ if(argument == null)
+ {
+ throw new Ice.EndpointParseException("no argument provided for " + option + " option in endpoint " +
+ endpoint);
+ }
+
+ try
+ {
+ Ice.EncodingVersion v = Ice.Util.stringToEncodingVersion(argument);
+ if(v.major != 1 || v.minor != 0)
+ {
+ _instance.logger().warning("deprecated udp endpoint option: " + option);
+ }
+ }
+ catch(Ice.VersionParseException e)
+ {
+ throw new Ice.EndpointParseException("invalid version `" + argument + "' in endpoint " +
+ endpoint + ":\n" + e.str);
+ }
+ }
+ else if(option.equals("--interface"))
+ {
+ if(argument == null)
+ {
+ throw new Ice.EndpointParseException("no argument provided for --interface option in endpoint "
+ + endpoint);
+ }
+
+ _mcastInterface = argument;
+ }
+ else if(option.equals("--ttl"))
+ {
+ if(argument == null)
+ {
+ throw new Ice.EndpointParseException("no argument provided for --ttl option in endpoint " + endpoint);
+ }
+
+ try
+ {
+ _mcastTtl = Integer.parseInt(argument);
+ }
+ catch(NumberFormatException ex)
+ {
+ throw new Ice.EndpointParseException("invalid TTL value `" + argument + "' in endpoint " + endpoint);
+ }
+
+ if(_mcastTtl < 0)
+ {
+ throw new Ice.EndpointParseException("TTL value `" + argument + "' out of range in endpoint " +
+ endpoint);
+ }
+ }
+ else
+ {
+ return false;
+ }
+ return true;
+ }
+
+ protected Connector createConnector(java.net.InetSocketAddress addr, NetworkProxy proxy)
+ {
+ return new UdpConnector(_instance, addr, _mcastInterface, _mcastTtl, _connectionId);
+ }
+
+ protected IPEndpointI createEndpoint(String host, int port, String connectionId)
+ {
+ return new UdpEndpointI(_instance, host, port, _mcastInterface, _mcastTtl, _connect, connectionId, _compress);
}
- private Instance _instance;
- private String _host;
- private int _port;
private String _mcastInterface = "";
private int _mcastTtl = -1;
private boolean _connect;
private boolean _compress;
- private int _hashCode;
}