summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/Ice/ConnectionI.cpp4
-rw-r--r--cpp/src/Ice/TcpAcceptor.cpp8
-rw-r--r--cpp/src/Ice/TcpAcceptor.h5
-rw-r--r--cpp/src/Ice/TcpConnector.cpp12
-rw-r--r--cpp/src/Ice/TcpConnector.h5
-rw-r--r--cpp/src/Ice/TcpEndpointI.cpp5
-rw-r--r--cpp/src/Ice/TcpTransceiver.cpp7
-rw-r--r--cpp/src/Ice/TcpTransceiver.h3
-rw-r--r--cpp/src/Ice/UdpConnector.cpp51
-rw-r--r--cpp/src/Ice/UdpConnector.h12
-rw-r--r--cpp/src/Ice/UdpEndpointI.cpp6
-rw-r--r--cpp/src/Ice/UdpTransceiver.cpp25
-rw-r--r--cpp/src/Ice/UdpTransceiver.h5
-rw-r--r--cpp/src/IceSSL/AcceptorI.cpp8
-rw-r--r--cpp/src/IceSSL/AcceptorI.h4
-rw-r--r--cpp/src/IceSSL/ConnectorI.cpp15
-rw-r--r--cpp/src/IceSSL/ConnectorI.h6
-rw-r--r--cpp/src/IceSSL/EndpointI.cpp5
-rw-r--r--cpp/src/IceSSL/TransceiverI.cpp11
-rw-r--r--cpp/src/IceSSL/TransceiverI.h8
-rw-r--r--cs/src/Ice/ConnectionI.cs4
-rw-r--r--cs/src/Ice/TcpAcceptor.cs9
-rw-r--r--cs/src/Ice/TcpConnector.cs12
-rw-r--r--cs/src/Ice/TcpEndpointI.cs4
-rw-r--r--cs/src/Ice/TcpTransceiver.cs6
-rw-r--r--cs/src/Ice/UdpConnector.cs36
-rw-r--r--cs/src/Ice/UdpEndpointI.cs5
-rw-r--r--cs/src/Ice/UdpTransceiver.cs28
-rw-r--r--cs/src/IceSSL/AcceptorI.cs9
-rw-r--r--cs/src/IceSSL/ConnectorI.cs13
-rw-r--r--cs/src/IceSSL/EndpointI.cs4
-rw-r--r--cs/src/IceSSL/TransceiverI.cs13
-rw-r--r--java/src/Ice/ConnectionI.java4
-rw-r--r--java/src/IceInternal/TcpAcceptor.java8
-rw-r--r--java/src/IceInternal/TcpConnector.java13
-rw-r--r--java/src/IceInternal/TcpEndpointI.java4
-rw-r--r--java/src/IceInternal/TcpTransceiver.java6
-rw-r--r--java/src/IceInternal/UdpConnector.java36
-rw-r--r--java/src/IceInternal/UdpEndpointI.java6
-rw-r--r--java/src/IceInternal/UdpTransceiver.java18
-rw-r--r--java/src/IceSSL/AcceptorI.java9
-rw-r--r--java/src/IceSSL/ConnectorI.java14
-rw-r--r--java/src/IceSSL/EndpointI.java4
-rw-r--r--java/src/IceSSL/TransceiverI.java11
-rw-r--r--rb/src/IceRuby/ConnectionInfo.cpp281
-rw-r--r--rb/src/IceRuby/ConnectionInfo.h26
-rw-r--r--rb/src/IceRuby/Init.cpp2
-rw-r--r--rb/src/IceRuby/Makefile3
-rw-r--r--rb/src/IceRuby/Makefile.mak3
-rw-r--r--rb/src/IceRuby/Proxy.cpp41
-rw-r--r--rb/test/Ice/proxy/AllTests.rb42
51 files changed, 608 insertions, 271 deletions
diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp
index 696c966b591..b8942d42aec 100644
--- a/cpp/src/Ice/ConnectionI.cpp
+++ b/cpp/src/Ice/ConnectionI.cpp
@@ -1434,7 +1434,9 @@ Ice::ConnectionI::getInfo() const
{
_exception->ice_throw();
}
- return _transceiver->getInfo();
+ ConnectionInfoPtr info = _transceiver->getInfo();
+ info->endpoint = _endpoint->getInfo();
+ return info;
}
//
diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp
index 9574f7bce0a..1b0e4251ba5 100644
--- a/cpp/src/Ice/TcpAcceptor.cpp
+++ b/cpp/src/Ice/TcpAcceptor.cpp
@@ -9,7 +9,6 @@
#include <Ice/TcpAcceptor.h>
#include <Ice/TcpTransceiver.h>
-#include <Ice/Endpoint.h>
#include <Ice/Instance.h>
#include <Ice/TraceLevels.h>
#include <Ice/LoggerUtil.h>
@@ -169,7 +168,7 @@ IceInternal::TcpAcceptor::accept()
Trace out(_logger, _traceLevels->networkCat);
out << "accepted tcp connection\n" << fdToString(fd);
}
- return new TcpTransceiver(_instance, _endpointInfo, fd, true);
+ return new TcpTransceiver(_instance, fd, true);
}
string
@@ -184,12 +183,11 @@ IceInternal::TcpAcceptor::effectivePort() const
return getPort(_addr);
}
-IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const TcpEndpointInfoPtr& endpointInfo) :
+IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const string& host, int port) :
_instance(instance),
- _endpointInfo(endpointInfo),
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
- _addr(getAddressForServer(endpointInfo->host, endpointInfo->port, instance->protocolSupport()))
+ _addr(getAddressForServer(host, port, instance->protocolSupport()))
#ifdef ICE_USE_IOCP
, _acceptFd(INVALID_SOCKET),
_info(SocketOperationRead)
diff --git a/cpp/src/Ice/TcpAcceptor.h b/cpp/src/Ice/TcpAcceptor.h
index b4067c9a711..64406b330be 100644
--- a/cpp/src/Ice/TcpAcceptor.h
+++ b/cpp/src/Ice/TcpAcceptor.h
@@ -23,6 +23,8 @@
namespace IceInternal
{
+class TcpEndpoint;
+
class TcpAcceptor : public Acceptor, public NativeInfo
{
public:
@@ -45,12 +47,11 @@ public:
private:
- TcpAcceptor(const InstancePtr&, const Ice::TcpEndpointInfoPtr&);
+ TcpAcceptor(const InstancePtr&, const std::string&, int);
virtual ~TcpAcceptor();
friend class TcpEndpointI;
const InstancePtr _instance;
- const Ice::TcpEndpointInfoPtr _endpointInfo;
const TraceLevelsPtr _traceLevels;
const ::Ice::LoggerPtr _logger;
const struct sockaddr_storage _addr;
diff --git a/cpp/src/Ice/TcpConnector.cpp b/cpp/src/Ice/TcpConnector.cpp
index e1fdf982cdc..9d45fdf82bd 100644
--- a/cpp/src/Ice/TcpConnector.cpp
+++ b/cpp/src/Ice/TcpConnector.cpp
@@ -31,8 +31,7 @@ IceInternal::TcpConnector::connect()
try
{
- TransceiverPtr transceiver =
- new TcpTransceiver(_instance, _endpointInfo, createSocket(false, _addr.ss_family), false);
+ TransceiverPtr transceiver = new TcpTransceiver(_instance, createSocket(false, _addr.ss_family), false);
dynamic_cast<TcpTransceiver*>(transceiver.get())->connect(_addr);
return transceiver;
}
@@ -121,16 +120,13 @@ IceInternal::TcpConnector::operator<(const Connector& r) const
return compareAddress(_addr, p->_addr) == -1;
}
-IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance,
- const TcpEndpointInfoPtr& endpointInfo,
- const struct sockaddr_storage& addr,
- const string& connectionId) :
+IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance, const struct sockaddr_storage& addr,
+ Ice::Int timeout, const string& connectionId) :
_instance(instance),
- _endpointInfo(endpointInfo),
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
_addr(addr),
- _timeout(_endpointInfo->timeout),
+ _timeout(timeout),
_connectionId(connectionId)
{
}
diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h
index 72453a40c80..6f83719cdb8 100644
--- a/cpp/src/Ice/TcpConnector.h
+++ b/cpp/src/Ice/TcpConnector.h
@@ -11,7 +11,6 @@
#define ICE_TCP_CONNECTOR_H
#include <Ice/TransceiverF.h>
-#include <Ice/EndpointF.h>
#include <Ice/InstanceF.h>
#include <Ice/TraceLevelsF.h>
#include <Ice/LoggerF.h>
@@ -41,13 +40,11 @@ public:
private:
- TcpConnector(const InstancePtr&, const Ice::TcpEndpointInfoPtr&, const struct sockaddr_storage&,
- const std::string&);
+ TcpConnector(const InstancePtr&, const struct sockaddr_storage&, Ice::Int, const std::string&);
virtual ~TcpConnector();
friend class TcpEndpointI;
const InstancePtr _instance;
- const Ice::TcpEndpointInfoPtr _endpointInfo;
const TraceLevelsPtr _traceLevels;
const ::Ice::LoggerPtr _logger;
const struct sockaddr_storage _addr;
diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp
index 9b18fc3c4ac..9d8c761231f 100644
--- a/cpp/src/Ice/TcpEndpointI.cpp
+++ b/cpp/src/Ice/TcpEndpointI.cpp
@@ -351,7 +351,7 @@ IceInternal::TcpEndpointI::connectors_async(const EndpointI_connectorsPtr& callb
AcceptorPtr
IceInternal::TcpEndpointI::acceptor(EndpointIPtr& endp, const string&) const
{
- TcpAcceptor* p = new TcpAcceptor(_instance, TcpEndpointInfoPtr::dynamicCast(getInfo()));
+ TcpAcceptor* p = new TcpAcceptor(_instance, _host, _port);
endp = new TcpEndpointI(_instance, _host, p->effectivePort(), _timeout, _connectionId, _compress);
return p;
}
@@ -503,8 +503,7 @@ IceInternal::TcpEndpointI::connectors(const vector<struct sockaddr_storage>& add
vector<ConnectorPtr> connectors;
for(unsigned int i = 0; i < addresses.size(); ++i)
{
- connectors.push_back(new TcpConnector(_instance, TcpEndpointInfoPtr::dynamicCast(getInfo()), addresses[i],
- _connectionId));
+ connectors.push_back(new TcpConnector(_instance, addresses[i], _timeout, _connectionId));
}
return connectors;
}
diff --git a/cpp/src/Ice/TcpTransceiver.cpp b/cpp/src/Ice/TcpTransceiver.cpp
index 33ffb3f9e43..959c3ce6f87 100644
--- a/cpp/src/Ice/TcpTransceiver.cpp
+++ b/cpp/src/Ice/TcpTransceiver.cpp
@@ -459,7 +459,6 @@ IceInternal::TcpTransceiver::getInfo() const
{
assert(_fd != INVALID_SOCKET);
Ice::TcpConnectionInfoPtr info = new Ice::TcpConnectionInfo();
- info->endpoint = _endpointInfo;
fdToAddressAndPort(_fd, info->localAddress, info->localPort, info->remoteAddress, info->remotePort);
return info;
}
@@ -473,12 +472,8 @@ IceInternal::TcpTransceiver::checkSendSize(const Buffer& buf, size_t messageSize
}
}
-IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance,
- const TcpEndpointInfoPtr& endpointInfo,
- SOCKET fd,
- bool connected) :
+IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance, SOCKET fd, bool connected) :
NativeInfo(fd),
- _endpointInfo(endpointInfo),
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
_stats(instance->initializationData().stats),
diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h
index 81ca7d07c30..2f131531d0a 100644
--- a/cpp/src/Ice/TcpTransceiver.h
+++ b/cpp/src/Ice/TcpTransceiver.h
@@ -55,7 +55,7 @@ public:
private:
- TcpTransceiver(const InstancePtr&, const Ice::TcpEndpointInfoPtr&, SOCKET, bool);
+ TcpTransceiver(const InstancePtr&, SOCKET, bool);
virtual ~TcpTransceiver();
void connect(const struct sockaddr_storage&);
@@ -63,7 +63,6 @@ private:
friend class TcpConnector;
friend class TcpAcceptor;
- const Ice::TcpEndpointInfoPtr _endpointInfo;
const TraceLevelsPtr _traceLevels;
const Ice::LoggerPtr _logger;
const Ice::StatsPtr _stats;
diff --git a/cpp/src/Ice/UdpConnector.cpp b/cpp/src/Ice/UdpConnector.cpp
index 6f6f9b6b8ff..d8a4c5588df 100644
--- a/cpp/src/Ice/UdpConnector.cpp
+++ b/cpp/src/Ice/UdpConnector.cpp
@@ -20,7 +20,7 @@ using namespace IceInternal;
TransceiverPtr
IceInternal::UdpConnector::connect()
{
- return new UdpTransceiver(_instance, _endpointInfo, _addr);
+ return new UdpTransceiver(_instance, _addr, _mcastInterface, _mcastTtl);
}
Short
@@ -54,32 +54,32 @@ IceInternal::UdpConnector::operator==(const Connector& r) const
return false;
}
- if(_endpointInfo->protocolMajor != p->_endpointInfo->protocolMajor)
+ if(_protocolMajor != p->_protocolMajor)
{
return false;
}
- if(_endpointInfo->protocolMinor != p->_endpointInfo->protocolMinor)
+ if(_protocolMinor != p->_protocolMinor)
{
return false;
}
- if(_endpointInfo->encodingMajor != p->_endpointInfo->encodingMajor)
+ if(_encodingMajor != p->_encodingMajor)
{
return false;
}
- if(_endpointInfo->encodingMinor != p->_endpointInfo->encodingMinor)
+ if(_encodingMinor != p->_encodingMinor)
{
return false;
}
- if(_endpointInfo->mcastTtl != p->_endpointInfo->mcastTtl)
+ if(_mcastTtl != p->_mcastTtl)
{
return false;
}
- if(_endpointInfo->mcastInterface != p->_endpointInfo->mcastInterface)
+ if(_mcastInterface != p->_mcastInterface)
{
return false;
}
@@ -111,56 +111,56 @@ IceInternal::UdpConnector::operator<(const Connector& r) const
return false;
}
- if(_endpointInfo->protocolMajor < p->_endpointInfo->protocolMajor)
+ if(_protocolMajor < p->_protocolMajor)
{
return true;
}
- else if(p->_endpointInfo->protocolMajor < _endpointInfo->protocolMajor)
+ else if(p->_protocolMajor < _protocolMajor)
{
return false;
}
- if(_endpointInfo->protocolMinor < p->_endpointInfo->protocolMinor)
+ if(_protocolMinor < p->_protocolMinor)
{
return true;
}
- else if(p->_endpointInfo->protocolMinor < _endpointInfo->protocolMinor)
+ else if(p->_protocolMinor < _protocolMinor)
{
return false;
}
- if(_endpointInfo->encodingMajor < p->_endpointInfo->encodingMajor)
+ if(_encodingMajor < p->_encodingMajor)
{
return true;
}
- else if(p->_endpointInfo->encodingMajor < _endpointInfo->encodingMajor)
+ else if(p->_encodingMajor < _encodingMajor)
{
return false;
}
- if(_endpointInfo->encodingMinor < p->_endpointInfo->encodingMinor)
+ if(_encodingMinor < p->_encodingMinor)
{
return true;
}
- else if(p->_endpointInfo->encodingMinor < _endpointInfo->encodingMinor)
+ else if(p->_encodingMinor < _encodingMinor)
{
return false;
}
- if(_endpointInfo->mcastTtl < p->_endpointInfo->mcastTtl)
+ if(_mcastTtl < p->_mcastTtl)
{
return true;
}
- else if(p->_endpointInfo->mcastTtl < _endpointInfo->mcastTtl)
+ else if(p->_mcastTtl < _mcastTtl)
{
return false;
}
- if(_endpointInfo->mcastInterface < p->_endpointInfo->mcastInterface)
+ if(_mcastInterface < p->_mcastInterface)
{
return true;
}
- else if(p->_endpointInfo->mcastInterface < _endpointInfo->mcastInterface)
+ else if(p->_mcastInterface < _mcastInterface)
{
return false;
}
@@ -169,13 +169,18 @@ IceInternal::UdpConnector::operator<(const Connector& r) const
}
-IceInternal::UdpConnector::UdpConnector(const InstancePtr& instance,
- const UdpEndpointInfoPtr& endpointInfo,
- const struct sockaddr_storage& addr,
+IceInternal::UdpConnector::UdpConnector(const InstancePtr& instance, const struct sockaddr_storage& addr,
+ const string& mcastInterface, int mcastTtl, Ice::Byte protocolMajor,
+ Ice::Byte protocolMinor, Ice::Byte encodingMajor, Ice::Byte encodingMinor,
const std::string& connectionId) :
_instance(instance),
- _endpointInfo(endpointInfo),
_addr(addr),
+ _mcastInterface(mcastInterface),
+ _mcastTtl(mcastTtl),
+ _protocolMajor(protocolMajor),
+ _protocolMinor(protocolMinor),
+ _encodingMajor(encodingMajor),
+ _encodingMinor(encodingMinor),
_connectionId(connectionId)
{
}
diff --git a/cpp/src/Ice/UdpConnector.h b/cpp/src/Ice/UdpConnector.h
index 924d02bba7c..4e27190ac1e 100644
--- a/cpp/src/Ice/UdpConnector.h
+++ b/cpp/src/Ice/UdpConnector.h
@@ -11,7 +11,6 @@
#define ICE_UDP_CONNECTOR_H
#include <Ice/TransceiverF.h>
-#include <Ice/EndpointF.h>
#include <Ice/InstanceF.h>
#include <Ice/Connector.h>
#include <Ice/Protocol.h>
@@ -40,14 +39,19 @@ public:
private:
- UdpConnector(const InstancePtr&, const Ice::UdpEndpointInfoPtr&, const struct sockaddr_storage&,
- const std::string&);
+ UdpConnector(const InstancePtr&, const struct sockaddr_storage&, const std::string&, int, Ice::Byte, Ice::Byte,
+ Ice::Byte, Ice::Byte, const std::string&);
virtual ~UdpConnector();
friend class UdpEndpointI;
const InstancePtr _instance;
- const Ice::UdpEndpointInfoPtr _endpointInfo;
struct sockaddr_storage _addr;
+ const std::string _mcastInterface;
+ const int _mcastTtl;
+ const Ice::Byte _protocolMajor;
+ const Ice::Byte _protocolMinor;
+ const Ice::Byte _encodingMajor;
+ const Ice::Byte _encodingMinor;
const std::string _connectionId;
};
diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp
index 298bb72b800..bbd273cfa54 100644
--- a/cpp/src/Ice/UdpEndpointI.cpp
+++ b/cpp/src/Ice/UdpEndpointI.cpp
@@ -536,7 +536,7 @@ IceInternal::UdpEndpointI::secure() const
TransceiverPtr
IceInternal::UdpEndpointI::transceiver(EndpointIPtr& endp) const
{
- UdpTransceiver* p = new UdpTransceiver(_instance, UdpEndpointInfoPtr::dynamicCast(getInfo()), _connect);
+ UdpTransceiver* p = new UdpTransceiver(_instance, _host, _port, _mcastInterface, _connect);
endp = new UdpEndpointI(_instance, _host, p->effectivePort(), _mcastInterface, _mcastTtl, _protocolMajor,
_protocolMinor, _encodingMajor, _encodingMinor, _connect, _connectionId,
_compress);
@@ -794,8 +794,8 @@ IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_storage>& add
vector<ConnectorPtr> connectors;
for(unsigned int i = 0; i < addresses.size(); ++i)
{
- connectors.push_back(new UdpConnector(_instance, UdpEndpointInfoPtr::dynamicCast(getInfo()), addresses[i],
- _connectionId));
+ connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor,
+ _protocolMinor, _encodingMajor, _encodingMinor, _connectionId));
}
return connectors;
}
diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp
index 8cd68d76edb..fbf00a1048a 100644
--- a/cpp/src/Ice/UdpTransceiver.cpp
+++ b/cpp/src/Ice/UdpTransceiver.cpp
@@ -457,7 +457,6 @@ IceInternal::UdpTransceiver::getInfo() const
{
assert(_fd != INVALID_SOCKET);
Ice::UdpConnectionInfoPtr info = new Ice::UdpConnectionInfo();
- info->endpoint = _endpointInfo;
fdToAddressAndPort(_fd, info->localAddress, info->localPort, info->remoteAddress, info->remotePort);
addrToAddressAndPort(_mcastAddr, info->mcastAddress, info->mcastPort);
return info;
@@ -483,10 +482,8 @@ IceInternal::UdpTransceiver::effectivePort() const
return getPort(_addr);
}
-IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance,
- const Ice::UdpEndpointInfoPtr& endpointInfo,
- const struct sockaddr_storage& addr) :
- _endpointInfo(endpointInfo),
+IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const struct sockaddr_storage& addr,
+ const string& mcastInterface, int mcastTtl) :
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
_stats(instance->initializationData().stats),
@@ -513,26 +510,24 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance,
if(isMulticast(_addr))
{
- if(endpointInfo->mcastInterface.length() > 0)
+ if(mcastInterface.length() > 0)
{
- setMcastInterface(_fd, endpointInfo->mcastInterface, _addr.ss_family == AF_INET);
+ setMcastInterface(_fd, mcastInterface, _addr.ss_family == AF_INET);
}
- if(endpointInfo->mcastTtl != -1)
+ if(mcastTtl != -1)
{
- setMcastTtl(_fd, endpointInfo->mcastTtl, _addr.ss_family == AF_INET);
+ setMcastTtl(_fd, mcastTtl, _addr.ss_family == AF_INET);
}
}
}
-IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance,
- const Ice::UdpEndpointInfoPtr& endpointInfo,
- bool connect) :
- _endpointInfo(endpointInfo),
+IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const string& host, int port,
+ const string& mcastInterface, bool connect) :
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
_stats(instance->initializationData().stats),
_incoming(true),
- _addr(getAddressForServer(_endpointInfo->host, _endpointInfo->port, instance->protocolSupport())),
+ _addr(getAddressForServer(host, port, instance->protocolSupport())),
_connect(connect),
_warn(instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0)
#ifdef ICE_USE_IOCP
@@ -569,7 +564,7 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance,
{
setPort(_mcastAddr, getPort(_addr));
}
- setMcastGroup(_fd, _mcastAddr, _endpointInfo->mcastInterface);
+ setMcastGroup(_fd, _mcastAddr, mcastInterface);
}
else
{
diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h
index a8a3194a607..f7c918184a8 100644
--- a/cpp/src/Ice/UdpTransceiver.h
+++ b/cpp/src/Ice/UdpTransceiver.h
@@ -61,8 +61,8 @@ public:
private:
- UdpTransceiver(const InstancePtr&, const Ice::UdpEndpointInfoPtr&, const struct sockaddr_storage&);
- UdpTransceiver(const InstancePtr&, const Ice::UdpEndpointInfoPtr&, bool);
+ UdpTransceiver(const InstancePtr&, const struct sockaddr_storage&, const std::string&, int);
+ UdpTransceiver(const InstancePtr&, const std::string&, int, const std::string&, bool);
virtual ~UdpTransceiver();
void setBufSize(const InstancePtr&);
@@ -70,7 +70,6 @@ private:
friend class UdpEndpointI;
friend class UdpConnector;
- const Ice::UdpEndpointInfoPtr _endpointInfo;
const TraceLevelsPtr _traceLevels;
const Ice::LoggerPtr _logger;
const Ice::StatsPtr _stats;
diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp
index e8de9f97a87..c82a77dc4dc 100644
--- a/cpp/src/IceSSL/AcceptorI.cpp
+++ b/cpp/src/IceSSL/AcceptorI.cpp
@@ -188,7 +188,7 @@ IceSSL::AcceptorI::accept()
// SSL handshaking is performed in TransceiverI::initialize, since
// accept must not block.
//
- return new TransceiverI(_instance, _endpointInfo, fd, _adapterName);
+ return new TransceiverI(_instance, fd, _adapterName);
}
string
@@ -210,13 +210,11 @@ IceSSL::AcceptorI::effectivePort() const
}
}
-IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const SSLEndpointInfoPtr& endpointInfo,
- const string& adapterName) :
+IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const string& adapterName, const string& host, int port) :
_instance(instance),
- _endpointInfo(endpointInfo),
_adapterName(adapterName),
_logger(instance->communicator()->getLogger()),
- _addr(IceInternal::getAddressForServer(_endpointInfo->host, _endpointInfo->port, instance->protocolSupport()))
+ _addr(IceInternal::getAddressForServer(host, port, instance->protocolSupport()))
#ifdef ICE_USE_IOCP
, _acceptFd(INVALID_SOCKET),
_info(IceInternal::SocketOperationRead)
diff --git a/cpp/src/IceSSL/AcceptorI.h b/cpp/src/IceSSL/AcceptorI.h
index df84201cd9f..71ce3991b2b 100644
--- a/cpp/src/IceSSL/AcceptorI.h
+++ b/cpp/src/IceSSL/AcceptorI.h
@@ -15,7 +15,6 @@
#include <Ice/Acceptor.h>
#include <Ice/Protocol.h>
#include <IceSSL/InstanceF.h>
-#include <IceSSL/EndpointInfo.h>
#ifndef _WIN32
# include <sys/socket.h> // For struct sockaddr_storage
@@ -50,12 +49,11 @@ public:
private:
- AcceptorI(const InstancePtr&, const SSLEndpointInfoPtr&, const std::string&);
+ AcceptorI(const InstancePtr&, const std::string&, const std::string&, int);
virtual ~AcceptorI();
friend class EndpointI;
const InstancePtr _instance;
- const SSLEndpointInfoPtr _endpointInfo;
const std::string _adapterName;
const Ice::LoggerPtr _logger;
const struct sockaddr_storage _addr;
diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp
index fad1c651c13..9b5e14a6fe9 100644
--- a/cpp/src/IceSSL/ConnectorI.cpp
+++ b/cpp/src/IceSSL/ConnectorI.cpp
@@ -42,7 +42,7 @@ IceSSL::ConnectorI::connect()
try
{
- return new TransceiverI(_instance, _endpointInfo, IceInternal::createSocket(false, _addr.ss_family), _addr);
+ return new TransceiverI(_instance, IceInternal::createSocket(false, _addr.ss_family), _host, _addr);
}
catch(const Ice::LocalException& ex)
{
@@ -81,7 +81,7 @@ IceSSL::ConnectorI::operator==(const IceInternal::Connector& r) const
return false;
}
- if(_endpointInfo->timeout != p->_endpointInfo->timeout)
+ if(_timeout != p->_timeout)
{
return false;
}
@@ -109,11 +109,11 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const
return type() < r.type();
}
- if(_endpointInfo->timeout < p->_endpointInfo->timeout)
+ if(_timeout < p->_timeout)
{
return true;
}
- else if(p->_endpointInfo->timeout < _endpointInfo->timeout)
+ else if(p->_timeout < _timeout)
{
return false;
}
@@ -130,12 +130,13 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const
return IceInternal::compareAddress(_addr, p->_addr) == -1;
}
-IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const SSLEndpointInfoPtr& endpointInfo,
- const struct sockaddr_storage& addr, const string& connectionId) :
+IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const string& host, const struct sockaddr_storage& addr,
+ Ice::Int timeout, const string& connectionId) :
_instance(instance),
- _endpointInfo(endpointInfo),
_logger(instance->communicator()->getLogger()),
+ _host(host),
_addr(addr),
+ _timeout(timeout),
_connectionId(connectionId)
{
}
diff --git a/cpp/src/IceSSL/ConnectorI.h b/cpp/src/IceSSL/ConnectorI.h
index 163f87d5add..d8c79a6e0c4 100644
--- a/cpp/src/IceSSL/ConnectorI.h
+++ b/cpp/src/IceSSL/ConnectorI.h
@@ -14,7 +14,6 @@
#include <Ice/TransceiverF.h>
#include <Ice/Connector.h>
#include <IceSSL/InstanceF.h>
-#include <IceSSL/EndpointInfo.h>
#ifdef _WIN32
# include <winsock2.h>
@@ -42,14 +41,15 @@ public:
private:
- ConnectorI(const InstancePtr&, const SSLEndpointInfoPtr&, const struct sockaddr_storage&, const std::string&);
+ ConnectorI(const InstancePtr&, const std::string&, const struct sockaddr_storage&, Ice::Int, const std::string&);
virtual ~ConnectorI();
friend class EndpointI;
const InstancePtr _instance;
- const SSLEndpointInfoPtr _endpointInfo;
const Ice::LoggerPtr _logger;
+ const std::string _host;
struct sockaddr_storage _addr;
+ const Ice::Int _timeout;
const std::string _connectionId;
};
diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp
index 8166574bf65..c21db89353c 100644
--- a/cpp/src/IceSSL/EndpointI.cpp
+++ b/cpp/src/IceSSL/EndpointI.cpp
@@ -351,7 +351,7 @@ IceSSL::EndpointI::connectors_async(const IceInternal::EndpointI_connectorsPtr&
IceInternal::AcceptorPtr
IceSSL::EndpointI::acceptor(IceInternal::EndpointIPtr& endp, const string& adapterName) const
{
- AcceptorI* p = new AcceptorI(_instance, SSLEndpointInfoPtr::dynamicCast(getInfo()), adapterName);
+ AcceptorI* p = new AcceptorI(_instance, adapterName, _host, _port);
endp = new EndpointI(_instance, _host, p->effectivePort(), _timeout, _connectionId, _compress);
return p;
}
@@ -502,8 +502,7 @@ IceSSL::EndpointI::connectors(const vector<struct sockaddr_storage>& addresses)
vector<IceInternal::ConnectorPtr> connectors;
for(unsigned int i = 0; i < addresses.size(); ++i)
{
- connectors.push_back(new ConnectorI(_instance, SSLEndpointInfoPtr::dynamicCast(getInfo()), addresses[i],
- _connectionId));
+ connectors.push_back(new ConnectorI(_instance, _host, addresses[i], _timeout, _connectionId));
}
return connectors;
}
diff --git a/cpp/src/IceSSL/TransceiverI.cpp b/cpp/src/IceSSL/TransceiverI.cpp
index 1c95553e46a..28f59e93756 100644
--- a/cpp/src/IceSSL/TransceiverI.cpp
+++ b/cpp/src/IceSSL/TransceiverI.cpp
@@ -234,7 +234,7 @@ IceSSL::TransceiverI::initialize()
}
}
- _instance->verifyPeer(_ssl, _fd, _endpointInfo->host, _adapterName, _incoming);
+ _instance->verifyPeer(_ssl, _fd, _host, _adapterName, _incoming);
_state = StateHandshakeComplete;
}
catch(const Ice::LocalException& ex)
@@ -784,7 +784,6 @@ IceSSL::TransceiverI::getInfo() const
assert(_fd != INVALID_SOCKET && _ssl != 0);
SSLConnectionInfoPtr info = new SSLConnectionInfo();
- info->endpoint = _endpointInfo;
IceInternal::fdToAddressAndPort(_fd, info->localAddress, info->localPort, info->remoteAddress, info->remotePort);
//
@@ -842,14 +841,14 @@ IceSSL::TransceiverI::getConnectionInfo() const
return populateConnectionInfo(_ssl, _fd, _adapterName, _incoming);
}
-IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, const SSLEndpointInfoPtr& endpointInfo, SOCKET fd,
+IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const string& host,
const struct sockaddr_storage& addr) :
IceInternal::NativeInfo(fd),
_instance(instance),
- _endpointInfo(endpointInfo),
_logger(instance->communicator()->getLogger()),
_stats(instance->communicator()->getStats()),
_ssl(0),
+ _host(host),
_incoming(false),
_state(StateNeedConnect)
#ifdef ICE_USE_IOCP
@@ -880,11 +879,9 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, const SSLEndpoin
#endif
}
-IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, const SSLEndpointInfoPtr& endpointInfo, SOCKET fd,
- const string& adapterName) :
+IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const string& adapterName) :
IceInternal::NativeInfo(fd),
_instance(instance),
- _endpointInfo(endpointInfo),
_logger(instance->communicator()->getLogger()),
_stats(instance->communicator()->getStats()),
_ssl(0),
diff --git a/cpp/src/IceSSL/TransceiverI.h b/cpp/src/IceSSL/TransceiverI.h
index 526e5b9d47c..f852d7df7c6 100644
--- a/cpp/src/IceSSL/TransceiverI.h
+++ b/cpp/src/IceSSL/TransceiverI.h
@@ -12,7 +12,6 @@
#include <IceSSL/InstanceF.h>
#include <IceSSL/Plugin.h>
-#include <IceSSL/EndpointInfo.h>
#include <Ice/LoggerF.h>
#include <Ice/StatsF.h>
@@ -63,8 +62,8 @@ public:
private:
- TransceiverI(const InstancePtr&, const SSLEndpointInfoPtr&, SOCKET, const struct sockaddr_storage&);
- TransceiverI(const InstancePtr&, const SSLEndpointInfoPtr&, SOCKET, const std::string&);
+ TransceiverI(const InstancePtr&, SOCKET, const std::string&, const struct sockaddr_storage&);
+ TransceiverI(const InstancePtr&, SOCKET, const std::string&);
virtual ~TransceiverI();
#ifdef ICE_USE_IOCP
@@ -76,12 +75,13 @@ private:
friend class AcceptorI;
const InstancePtr _instance;
- const SSLEndpointInfoPtr _endpointInfo;
const Ice::LoggerPtr _logger;
const Ice::StatsPtr _stats;
SSL* _ssl;
+ const std::string _host;
+
const bool _incoming;
const std::string _adapterName;
diff --git a/cs/src/Ice/ConnectionI.cs b/cs/src/Ice/ConnectionI.cs
index bebb5152582..29bfd692f4f 100644
--- a/cs/src/Ice/ConnectionI.cs
+++ b/cs/src/Ice/ConnectionI.cs
@@ -1340,7 +1340,9 @@ namespace Ice
{
throw _exception;
}
- return _transceiver.getInfo();
+ ConnectionInfo info = _transceiver.getInfo();
+ info.endpoint = _endpoint.getInfo();
+ return info;
}
}
diff --git a/cs/src/Ice/TcpAcceptor.cs b/cs/src/Ice/TcpAcceptor.cs
index 7d12737792a..d87c6220c16 100644
--- a/cs/src/Ice/TcpAcceptor.cs
+++ b/cs/src/Ice/TcpAcceptor.cs
@@ -101,7 +101,7 @@ namespace IceInternal
Socket acceptFd = _acceptFd;
_acceptFd = null;
_acceptError = null;
- return new TcpTransceiver(instance_, _endpointInfo, acceptFd, null, true);
+ return new TcpTransceiver(instance_, acceptFd, null, true);
}
public override string ToString()
@@ -114,18 +114,16 @@ namespace IceInternal
return _addr.Port;
}
- internal TcpAcceptor(Instance instance, Ice.TcpEndpointInfo endpointInfo)
+ internal TcpAcceptor(Instance instance, string host, int port)
{
instance_ = instance;
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_backlog = instance.initializationData().properties.getPropertyAsIntWithDefault("Ice.TCP.Backlog", 511);
try
{
- _addr =
- Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port, instance_.protocolSupport());
+ _addr = Network.getAddressForServer(host, port, instance_.protocolSupport());
_fd = Network.createSocket(false, _addr.AddressFamily);
Network.setBlock(_fd, false);
Network.setTcpBufSize(_fd, instance_.initializationData().properties, _logger);
@@ -161,7 +159,6 @@ namespace IceInternal
}
private Instance instance_;
- private Ice.TcpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private Socket _fd;
diff --git a/cs/src/Ice/TcpConnector.cs b/cs/src/Ice/TcpConnector.cs
index 3841f3416f5..8a4659c953a 100644
--- a/cs/src/Ice/TcpConnector.cs
+++ b/cs/src/Ice/TcpConnector.cs
@@ -35,7 +35,7 @@ namespace IceInternal
//
// Nonblocking connect is handled by the transceiver.
//
- return new TcpTransceiver(_instance, _endpointInfo, fd, _addr, false);
+ return new TcpTransceiver(_instance, fd, _addr, false);
}
catch(Ice.LocalException ex)
{
@@ -56,17 +56,17 @@ namespace IceInternal
//
// Only for use by TcpEndpoint
//
- internal TcpConnector(Instance instance, Ice.TcpEndpointInfo endpointInfo, IPEndPoint addr, string connectionId)
+ internal TcpConnector(Instance instance, IPEndPoint addr, int timeout, string connectionId)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_addr = addr;
+ _timeout = timeout;
_connectionId = connectionId;
_hashCode = _addr.GetHashCode();
- _hashCode = 5 * _hashCode + _endpointInfo.timeout;
+ _hashCode = 5 * _hashCode + _timeout;
_hashCode = 5 * _hashCode + _connectionId.GetHashCode();
}
@@ -88,7 +88,7 @@ namespace IceInternal
return true;
}
- if(_endpointInfo.timeout != p._endpointInfo.timeout)
+ if(_timeout != p._timeout)
{
return false;
}
@@ -112,10 +112,10 @@ namespace IceInternal
}
private Instance _instance;
- private Ice.TcpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private IPEndPoint _addr;
+ private int _timeout;
private string _connectionId;
private int _hashCode;
}
diff --git a/cs/src/Ice/TcpEndpointI.cs b/cs/src/Ice/TcpEndpointI.cs
index 48dc20fbcd2..26e5fd1de8e 100644
--- a/cs/src/Ice/TcpEndpointI.cs
+++ b/cs/src/Ice/TcpEndpointI.cs
@@ -404,7 +404,7 @@ namespace IceInternal
//
public override Acceptor acceptor(ref EndpointI endpoint, string adapterName)
{
- TcpAcceptor p = new TcpAcceptor(_instance, (Ice.TcpEndpointInfo)getInfo());
+ TcpAcceptor p = new TcpAcceptor(_instance, _host, _port);
endpoint = new TcpEndpointI(_instance, _host, p.effectivePort(), _timeout, _connectionId, _compress);
return p;
}
@@ -453,7 +453,7 @@ namespace IceInternal
List<Connector> connectors = new List<Connector>();
foreach(IPEndPoint addr in addresses)
{
- connectors.Add(new TcpConnector(_instance, (Ice.TcpEndpointInfo)getInfo(), addr, _connectionId));
+ connectors.Add(new TcpConnector(_instance, addr, _timeout, _connectionId));
}
return connectors;
}
diff --git a/cs/src/Ice/TcpTransceiver.cs b/cs/src/Ice/TcpTransceiver.cs
index 7bb7cd23b23..64e3f91bae5 100644
--- a/cs/src/Ice/TcpTransceiver.cs
+++ b/cs/src/Ice/TcpTransceiver.cs
@@ -424,7 +424,6 @@ namespace IceInternal
{
Debug.Assert(_fd != null);
Ice.TcpConnectionInfo info = new Ice.TcpConnectionInfo();
- info.endpoint = _endpointInfo;
IPEndPoint localEndpoint = Network.getLocalAddress(_fd);
info.localAddress = localEndpoint.Address.ToString();
info.localPort = localEndpoint.Port;
@@ -458,10 +457,8 @@ namespace IceInternal
//
// Only for use by TcpConnector, TcpAcceptor
//
- internal TcpTransceiver(Instance instance, Ice.TcpEndpointInfo endpointInfo, Socket fd, IPEndPoint addr,
- bool connected)
+ internal TcpTransceiver(Instance instance, Socket fd, IPEndPoint addr, bool connected)
{
- _endpointInfo = endpointInfo;
_fd = fd;
_addr = addr;
_traceLevels = instance.traceLevels();
@@ -483,7 +480,6 @@ namespace IceInternal
}
}
- private Ice.TcpEndpointInfo _endpointInfo;
private Socket _fd;
private IPEndPoint _addr;
private TraceLevels _traceLevels;
diff --git a/cs/src/Ice/UdpConnector.cs b/cs/src/Ice/UdpConnector.cs
index 5e65167825a..f92b170616e 100644
--- a/cs/src/Ice/UdpConnector.cs
+++ b/cs/src/Ice/UdpConnector.cs
@@ -18,7 +18,7 @@ namespace IceInternal
{
public Transceiver connect()
{
- return new UdpTransceiver(instance_, _endpointInfo, _addr);
+ return new UdpTransceiver(instance_, _addr, _mcastInterface, _mcastTtl);
}
public short type()
@@ -29,16 +29,23 @@ namespace IceInternal
//
// Only for use by TcpEndpoint
//
- internal UdpConnector(Instance instance, Ice.UdpEndpointInfo endpointInfo, IPEndPoint addr, string connectionId)
+ internal UdpConnector(Instance instance, IPEndPoint addr, string mcastInterface, int mcastTtl,
+ byte protocolMajor, byte protocolMinor, byte encodingMajor, byte encodingMinor,
+ string connectionId)
{
instance_ = instance;
- _endpointInfo = endpointInfo;
_addr = addr;
+ _mcastInterface = mcastInterface;
+ _mcastTtl = mcastTtl;
+ _protocolMajor = protocolMajor;
+ _protocolMinor = protocolMinor;
+ _encodingMajor = encodingMajor;
+ _encodingMinor = encodingMinor;
_connectionId = connectionId;
_hashCode = _addr.GetHashCode();
- _hashCode = 5 * _hashCode + _endpointInfo.mcastInterface.GetHashCode();
- _hashCode = 5 * _hashCode + _endpointInfo.mcastTtl.GetHashCode();
+ _hashCode = 5 * _hashCode + _mcastInterface.GetHashCode();
+ _hashCode = 5 * _hashCode + _mcastTtl.GetHashCode();
_hashCode = 5 * _hashCode + _connectionId.GetHashCode();
}
@@ -65,32 +72,32 @@ namespace IceInternal
return false;
}
- if(_endpointInfo.protocolMajor != p._endpointInfo.protocolMajor)
+ if(_protocolMajor != p._protocolMajor)
{
return false;
}
- if(_endpointInfo.protocolMinor != p._endpointInfo.protocolMinor)
+ if(_protocolMinor != p._protocolMinor)
{
return false;
}
- if(_endpointInfo.encodingMajor != p._endpointInfo.encodingMajor)
+ if(_encodingMajor != p._encodingMajor)
{
return false;
}
- if(_endpointInfo.encodingMinor != p._endpointInfo.encodingMinor)
+ if(_encodingMinor != p._encodingMinor)
{
return false;
}
- if(!_endpointInfo.mcastInterface.Equals(p._endpointInfo.mcastInterface))
+ if(!_mcastInterface.Equals(p._mcastInterface))
{
return false;
}
- if(_endpointInfo.mcastTtl != p._endpointInfo.mcastTtl)
+ if(_mcastTtl != p._mcastTtl)
{
return false;
}
@@ -109,8 +116,13 @@ namespace IceInternal
}
private Instance instance_;
- private Ice.UdpEndpointInfo _endpointInfo;
private IPEndPoint _addr;
+ private string _mcastInterface;
+ private int _mcastTtl;
+ private byte _protocolMajor;
+ private byte _protocolMinor;
+ private byte _encodingMajor;
+ private byte _encodingMinor;
private string _connectionId;
private int _hashCode;
}
diff --git a/cs/src/Ice/UdpEndpointI.cs b/cs/src/Ice/UdpEndpointI.cs
index 93c4d1dce7c..c584901ea25 100644
--- a/cs/src/Ice/UdpEndpointI.cs
+++ b/cs/src/Ice/UdpEndpointI.cs
@@ -598,7 +598,7 @@ namespace IceInternal
//
public override Transceiver transceiver(ref EndpointI endpoint)
{
- UdpTransceiver p = new UdpTransceiver(instance_, (Ice.UdpEndpointInfo)getInfo(), _connect);
+ UdpTransceiver p = new UdpTransceiver(instance_, _host, _port, _mcastInterface, _connect);
endpoint = new UdpEndpointI(instance_, _host, p.effectivePort(), _mcastInterface, _mcastTtl,
_protocolMajor, _protocolMinor, _encodingMajor, _encodingMinor, _connect,
_connectionId, _compress);
@@ -679,7 +679,8 @@ namespace IceInternal
List<Connector> connectors = new List<Connector>();
foreach(IPEndPoint addr in addresses)
{
- connectors.Add(new UdpConnector(instance_, (Ice.UdpEndpointInfo)getInfo(), addr, _connectionId));
+ connectors.Add(new UdpConnector(instance_, addr, _mcastInterface, _mcastTtl, _protocolMajor,
+ _protocolMinor, _encodingMajor, _encodingMinor, _connectionId));
}
return connectors;
}
diff --git a/cs/src/Ice/UdpTransceiver.cs b/cs/src/Ice/UdpTransceiver.cs
index b26ec892b7f..69ce6b9ed00 100644
--- a/cs/src/Ice/UdpTransceiver.cs
+++ b/cs/src/Ice/UdpTransceiver.cs
@@ -33,11 +33,11 @@ namespace IceInternal
{
if(Network.isMulticast(_addr))
{
- Network.setMcastGroup(_fd, _addr.Address, _endpointInfo.mcastInterface);
+ Network.setMcastGroup(_fd, _addr.Address, _mcastInterface);
- if(_endpointInfo.mcastTtl != -1)
+ if(_mcastTtl != -1)
{
- Network.setMcastTtl(_fd, _endpointInfo.mcastTtl, _addr.AddressFamily);
+ Network.setMcastTtl(_fd, _mcastTtl, _addr.AddressFamily);
}
}
_state = StateConnected;
@@ -549,7 +549,6 @@ namespace IceInternal
{
Debug.Assert(_fd != null);
Ice.UdpConnectionInfo info = new Ice.UdpConnectionInfo();
- info.endpoint = _endpointInfo;
IPEndPoint localEndpoint = Network.getLocalAddress(_fd);
info.localAddress = localEndpoint.Address.ToString();
info.localPort = localEndpoint.Port;
@@ -610,14 +609,15 @@ namespace IceInternal
//
// Only for use by UdpConnector.
//
- internal UdpTransceiver(Instance instance, Ice.UdpEndpointInfo endpointInfo, IPEndPoint addr)
+ internal UdpTransceiver(Instance instance, IPEndPoint addr, string mcastInterface, int mcastTtl)
{
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_stats = instance.initializationData().stats;
_warn = instance.initializationData().properties.getPropertyAsInt("Ice.Warn.Datagrams") > 0;
_addr = addr;
+ _mcastInterface = mcastInterface;
+ _mcastTtl = mcastTtl;
_state = StateNeedConnect;
_incoming = false;
@@ -637,9 +637,8 @@ namespace IceInternal
//
// Only for use by UdpEndpoint.
//
- internal UdpTransceiver(Instance instance, Ice.UdpEndpointInfo endpointInfo, bool connect)
+ internal UdpTransceiver(Instance instance, string host, int port, string mcastInterface, bool connect)
{
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_stats = instance.initializationData().stats;
@@ -649,7 +648,7 @@ namespace IceInternal
try
{
- _addr = Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port, instance.protocolSupport());
+ _addr = Network.getAddressForServer(host, port, instance.protocolSupport());
_fd = Network.createSocket(true, _addr.AddressFamily);
setBufSize(instance);
Network.setBlock(_fd, false);
@@ -664,18 +663,18 @@ namespace IceInternal
_mcastAddr = _addr;
if(_addr.AddressFamily == AddressFamily.InterNetwork)
{
- _addr = Network.doBind(_fd, new IPEndPoint(IPAddress.Any, _endpointInfo.port));
+ _addr = Network.doBind(_fd, new IPEndPoint(IPAddress.Any, port));
}
else
{
Debug.Assert(_addr.AddressFamily == AddressFamily.InterNetworkV6);
- _addr = Network.doBind(_fd, new IPEndPoint(IPAddress.IPv6Any, _endpointInfo.port));
+ _addr = Network.doBind(_fd, new IPEndPoint(IPAddress.IPv6Any, port));
}
- if(_endpointInfo.port == 0)
+ if(port == 0)
{
_mcastAddr.Port = _addr.Port;
}
- Network.setMcastGroup(_fd, _mcastAddr.Address, _endpointInfo.mcastInterface);
+ Network.setMcastGroup(_fd, _mcastAddr.Address, mcastInterface);
}
else
{
@@ -789,7 +788,6 @@ namespace IceInternal
}
}
- private Ice.UdpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private Ice.Stats _stats;
@@ -801,6 +799,8 @@ namespace IceInternal
private Socket _fd;
private IPEndPoint _addr;
private IPEndPoint _mcastAddr = null;
+ private string _mcastInterface = null;
+ private int _mcastTtl = -1;
private IAsyncResult _writeResult;
private IAsyncResult _readResult;
diff --git a/cs/src/IceSSL/AcceptorI.cs b/cs/src/IceSSL/AcceptorI.cs
index e4ca1c9afae..4d73a1aa66f 100644
--- a/cs/src/IceSSL/AcceptorI.cs
+++ b/cs/src/IceSSL/AcceptorI.cs
@@ -122,7 +122,7 @@ namespace IceSSL
Socket acceptFd = _acceptFd;
_acceptFd = null;
_acceptError = null;
- return new TransceiverI(_instance, _endpointInfo, acceptFd, null, true, _adapterName);
+ return new TransceiverI(_instance, acceptFd, null, "", true, _adapterName);
}
public override string ToString()
@@ -135,10 +135,9 @@ namespace IceSSL
return _addr.Port;
}
- internal AcceptorI(Instance instance, SSLEndpointInfo endpointInfo, string adapterName)
+ internal AcceptorI(Instance instance, string adapterName, string host, int port)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_adapterName = adapterName;
_logger = instance.communicator().getLogger();
_backlog = instance.communicator().getProperties().getPropertyAsIntWithDefault("Ice.TCP.Backlog", 511);
@@ -156,8 +155,7 @@ namespace IceSSL
try
{
- _addr = IceInternal.Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port,
- _instance.protocolSupport());
+ _addr = IceInternal.Network.getAddressForServer(host, port, _instance.protocolSupport());
_fd = IceInternal.Network.createSocket(false, _addr.AddressFamily);
IceInternal.Network.setBlock(_fd, false);
IceInternal.Network.setTcpBufSize(_fd, _instance.communicator().getProperties(), _logger);
@@ -193,7 +191,6 @@ namespace IceSSL
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private string _adapterName;
private Ice.Logger _logger;
private Socket _fd;
diff --git a/cs/src/IceSSL/ConnectorI.cs b/cs/src/IceSSL/ConnectorI.cs
index a69f01f27dc..0284bba2995 100644
--- a/cs/src/IceSSL/ConnectorI.cs
+++ b/cs/src/IceSSL/ConnectorI.cs
@@ -55,7 +55,7 @@ namespace IceSSL
//
// Nonblocking connect is handled by the transceiver.
//
- return new TransceiverI(_instance, _endpointInfo, fd, _addr, false, null);
+ return new TransceiverI(_instance, fd, _addr, _host, false, null);
}
catch(Ice.LocalException ex)
{
@@ -76,15 +76,17 @@ namespace IceSSL
//
// Only for use by EndpointI.
//
- internal ConnectorI(Instance instance, SSLEndpointInfo endpointInfo, IPEndPoint addr, string connectionId)
+ internal ConnectorI(Instance instance, string host, IPEndPoint addr, int timeout, string connectionId)
{
_instance = instance;
+ _host = host;
_logger = instance.communicator().getLogger();
_addr = addr;
+ _timeout = timeout;
_connectionId = connectionId;
_hashCode = _addr.GetHashCode();
- _hashCode = 5 * _hashCode + _endpointInfo.timeout;
+ _hashCode = 5 * _hashCode + _timeout;
_hashCode = 5 * _hashCode + _connectionId.GetHashCode();
}
@@ -106,7 +108,7 @@ namespace IceSSL
return true;
}
- if(_endpointInfo.timeout != p._endpointInfo.timeout)
+ if(_timeout != p._timeout)
{
return false;
}
@@ -130,9 +132,10 @@ namespace IceSSL
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private Ice.Logger _logger;
+ private string _host;
private IPEndPoint _addr;
+ private int _timeout;
private string _connectionId;
private int _hashCode;
}
diff --git a/cs/src/IceSSL/EndpointI.cs b/cs/src/IceSSL/EndpointI.cs
index 8dab3fa6cd2..6b01a4ce357 100644
--- a/cs/src/IceSSL/EndpointI.cs
+++ b/cs/src/IceSSL/EndpointI.cs
@@ -403,7 +403,7 @@ namespace IceSSL
//
public override IceInternal.Acceptor acceptor(ref IceInternal.EndpointI endpoint, string adapterName)
{
- AcceptorI p = new AcceptorI(_instance, (SSLEndpointInfo)getInfo(), adapterName);
+ AcceptorI p = new AcceptorI(_instance, adapterName, _host, _port);
endpoint = new EndpointI(_instance, _host, p.effectivePort(), _timeout, _connectionId, _compress);
return p;
}
@@ -453,7 +453,7 @@ namespace IceSSL
List<IceInternal.Connector> connectors = new List<IceInternal.Connector>();
foreach(IPEndPoint addr in addresses)
{
- connectors.Add(new ConnectorI(_instance, (SSLEndpointInfo)getInfo(), addr, _connectionId));
+ connectors.Add(new ConnectorI(_instance, _host, addr, _timeout, _connectionId));
}
return connectors;
}
diff --git a/cs/src/IceSSL/TransceiverI.cs b/cs/src/IceSSL/TransceiverI.cs
index 0dc1e8db57d..5a0435eff45 100644
--- a/cs/src/IceSSL/TransceiverI.cs
+++ b/cs/src/IceSSL/TransceiverI.cs
@@ -354,7 +354,6 @@ namespace IceSSL
{
Debug.Assert(_fd != null && _stream != null);
IceSSL.SSLConnectionInfo info = new IceSSL.SSLConnectionInfo();
- info.endpoint = _endpointInfo;
IPEndPoint localEndpoint = IceInternal.Network.getLocalAddress(_fd);
info.localAddress = localEndpoint.Address.ToString();
info.localPort = localEndpoint.Port;
@@ -404,13 +403,13 @@ namespace IceSSL
//
// Only for use by ConnectorI, AcceptorI.
//
- internal TransceiverI(Instance instance, SSLEndpointInfo endpointInfo, Socket fd, IPEndPoint addr,
- bool connected, string adapterName)
+ internal TransceiverI(Instance instance, Socket fd, IPEndPoint addr, string host, bool connected,
+ string adapterName)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_fd = fd;
_addr = addr;
+ _host = host;
_adapterName = adapterName;
_stream = null;
_info = null;
@@ -457,7 +456,7 @@ namespace IceSSL
//
// Client authentication.
//
- _writeResult = _stream.BeginAuthenticateAsClient(_endpointInfo.host, _instance.certs(),
+ _writeResult = _stream.BeginAuthenticateAsClient(_host, _instance.certs(),
_instance.protocols(),
_instance.checkCRL() > 0,
callback, state);
@@ -523,7 +522,7 @@ namespace IceSSL
}
_info = Util.populateConnectionInfo(_stream, _fd, _chain, _adapterName, _adapterName != null);
- _instance.verifyPeer(_info, _fd, _endpointInfo.host, _adapterName != null);
+ _instance.verifyPeer(_info, _fd, _host, _adapterName != null);
if(_instance.networkTraceLevel() >= 1)
{
@@ -717,9 +716,9 @@ namespace IceSSL
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private Socket _fd;
private IPEndPoint _addr;
+ private string _host;
private string _adapterName;
private SslStream _stream;
private ConnectionInfo _info;
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java
index 83508d52682..da2b0b1aab6 100644
--- a/java/src/Ice/ConnectionI.java
+++ b/java/src/Ice/ConnectionI.java
@@ -1202,7 +1202,9 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne
{
throw (Ice.LocalException)_exception.fillInStackTrace();
}
- return _transceiver.getInfo();
+ ConnectionInfo info = _transceiver.getInfo();
+ info.endpoint = _endpoint.getInfo();
+ return info;
}
//
diff --git a/java/src/IceInternal/TcpAcceptor.java b/java/src/IceInternal/TcpAcceptor.java
index 74c24556065..50f46759f6f 100644
--- a/java/src/IceInternal/TcpAcceptor.java
+++ b/java/src/IceInternal/TcpAcceptor.java
@@ -66,7 +66,7 @@ class TcpAcceptor implements Acceptor
_logger.trace(_traceLevels.networkCat, s);
}
- return new TcpTransceiver(_instance, _endpointInfo, fd, true);
+ return new TcpTransceiver(_instance, fd, true);
}
public String
@@ -81,10 +81,9 @@ class TcpAcceptor implements Acceptor
return _addr.getPort();
}
- TcpAcceptor(Instance instance, Ice.TcpEndpointInfo endpointInfo)
+ TcpAcceptor(Instance instance, String host, int port)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_backlog = instance.initializationData().properties.getPropertyAsIntWithDefault("Ice.TCP.Backlog", 511);
@@ -111,7 +110,7 @@ class TcpAcceptor implements Acceptor
//
Network.setReuseAddress(_fd, true);
}
- _addr = Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port, _instance.protocolSupport());
+ _addr = Network.getAddressForServer(host, port, _instance.protocolSupport());
if(_traceLevels.network >= 2)
{
String s = "attempting to bind to tcp socket " + toString();
@@ -136,7 +135,6 @@ class TcpAcceptor implements Acceptor
}
private Instance _instance;
- private Ice.TcpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private java.nio.channels.ServerSocketChannel _fd;
diff --git a/java/src/IceInternal/TcpConnector.java b/java/src/IceInternal/TcpConnector.java
index b2f2e331a10..ae5d618be99 100644
--- a/java/src/IceInternal/TcpConnector.java
+++ b/java/src/IceInternal/TcpConnector.java
@@ -34,7 +34,7 @@ final class TcpConnector implements Connector
_logger.trace(_traceLevels.networkCat, s);
}
}
- return new TcpTransceiver(_instance, _endpointInfo, fd, connected);
+ return new TcpTransceiver(_instance, fd, connected);
}
catch(Ice.LocalException ex)
{
@@ -68,19 +68,18 @@ final class TcpConnector implements Connector
//
// Only for use by TcpEndpoint
//
- TcpConnector(Instance instance, Ice.TcpEndpointInfo endpointInfo, java.net.InetSocketAddress addr,
- String connectionId)
+ TcpConnector(Instance instance, java.net.InetSocketAddress addr, int timeout, String connectionId)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_addr = addr;
+ _timeout = timeout;
_connectionId = connectionId;
_hashCode = _addr.getAddress().getHostAddress().hashCode();
_hashCode = 5 * _hashCode + _addr.getPort();
- _hashCode = 5 * _hashCode + _endpointInfo.timeout;
+ _hashCode = 5 * _hashCode + _timeout;
_hashCode = 5 * _hashCode + _connectionId.hashCode();
}
@@ -103,7 +102,7 @@ final class TcpConnector implements Connector
return true;
}
- if(_endpointInfo.timeout != p._endpointInfo.timeout)
+ if(_timeout != p._timeout)
{
return false;
}
@@ -117,10 +116,10 @@ final class TcpConnector implements Connector
}
private Instance _instance;
- private Ice.TcpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private java.net.InetSocketAddress _addr;
+ private int _timeout;
private String _connectionId = "";
private int _hashCode;
}
diff --git a/java/src/IceInternal/TcpEndpointI.java b/java/src/IceInternal/TcpEndpointI.java
index 65577f31365..44fc624af8d 100644
--- a/java/src/IceInternal/TcpEndpointI.java
+++ b/java/src/IceInternal/TcpEndpointI.java
@@ -394,7 +394,7 @@ final class TcpEndpointI extends EndpointI
public Acceptor
acceptor(EndpointIHolder endpoint, String adapterName)
{
- TcpAcceptor p = new TcpAcceptor(_instance, (Ice.TcpEndpointInfo)getInfo());
+ TcpAcceptor p = new TcpAcceptor(_instance, _host, _port);
endpoint.value =
new TcpEndpointI(_instance, _host, p.effectivePort(), _timeout, _connectionId, _compress);
return p;
@@ -524,7 +524,7 @@ final class TcpEndpointI extends EndpointI
java.util.List<Connector> connectors = new java.util.ArrayList<Connector>();
for(java.net.InetSocketAddress p : addresses)
{
- connectors.add(new TcpConnector(_instance, (Ice.TcpEndpointInfo)getInfo(), p, _connectionId));
+ connectors.add(new TcpConnector(_instance, p, _timeout, _connectionId));
}
return connectors;
}
diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java
index 155c2b28f7b..fef0558e62c 100644
--- a/java/src/IceInternal/TcpTransceiver.java
+++ b/java/src/IceInternal/TcpTransceiver.java
@@ -226,7 +226,6 @@ final class TcpTransceiver implements Transceiver
{
assert(_fd != null);
Ice.TcpConnectionInfo info = new Ice.TcpConnectionInfo();
- info.endpoint = _endpointInfo;
java.net.Socket socket = _fd.socket();
info.localAddress = socket.getLocalAddress().getHostAddress();
info.localPort = socket.getLocalPort();
@@ -255,10 +254,8 @@ final class TcpTransceiver implements Transceiver
//
// Only for use by TcpConnector, TcpAcceptor
//
- TcpTransceiver(Instance instance, Ice.TcpEndpointInfo endpointInfo, java.nio.channels.SocketChannel fd,
- boolean connected)
+ TcpTransceiver(Instance instance, java.nio.channels.SocketChannel fd, boolean connected)
{
- _endpointInfo = endpointInfo;
_fd = fd;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
@@ -291,7 +288,6 @@ final class TcpTransceiver implements Transceiver
super.finalize();
}
- private Ice.TcpEndpointInfo _endpointInfo;
private java.nio.channels.SocketChannel _fd;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
diff --git a/java/src/IceInternal/UdpConnector.java b/java/src/IceInternal/UdpConnector.java
index 96ab5ed69c7..edff81e92a2 100644
--- a/java/src/IceInternal/UdpConnector.java
+++ b/java/src/IceInternal/UdpConnector.java
@@ -14,7 +14,7 @@ final class UdpConnector implements Connector
public Transceiver
connect()
{
- return new UdpTransceiver(_instance, _endpointInfo, _addr);
+ return new UdpTransceiver(_instance, _addr, _mcastInterface, _mcastTtl);
}
public java.nio.channels.SelectableChannel
@@ -45,18 +45,23 @@ final class UdpConnector implements Connector
//
// Only for use by TcpEndpoint
//
- UdpConnector(Instance instance, Ice.UdpEndpointInfo endpointInfo, java.net.InetSocketAddress addr,
- String connectionId)
+ UdpConnector(Instance instance, java.net.InetSocketAddress addr, String mcastInterface, int mcastTtl,
+ byte protocolMajor, byte protocolMinor, byte encodingMajor, byte encodingMinor, String connectionId)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_addr = addr;
+ _mcastInterface = mcastInterface;
+ _mcastTtl = mcastTtl;
+ _protocolMajor = protocolMajor;
+ _protocolMinor = protocolMinor;
+ _encodingMajor = encodingMajor;
+ _encodingMinor = encodingMinor;
_connectionId = connectionId;
_hashCode = _addr.getAddress().getHostAddress().hashCode();
_hashCode = 5 * _hashCode + _addr.getPort();
- _hashCode = 5 * _hashCode + _endpointInfo.mcastInterface.hashCode();
- _hashCode = 5 * _hashCode + _endpointInfo.mcastTtl;
+ _hashCode = 5 * _hashCode + _mcastInterface.hashCode();
+ _hashCode = 5 * _hashCode + _mcastTtl;
_hashCode = 5 * _hashCode + _connectionId.hashCode();
}
@@ -84,32 +89,32 @@ final class UdpConnector implements Connector
return false;
}
- if(_endpointInfo.protocolMajor != p._endpointInfo.protocolMajor)
+ if(_protocolMajor != p._protocolMajor)
{
return false;
}
- if(_endpointInfo.protocolMinor != p._endpointInfo.protocolMinor)
+ if(_protocolMinor != p._protocolMinor)
{
return false;
}
- if(_endpointInfo.encodingMajor != p._endpointInfo.encodingMajor)
+ if(_encodingMajor != p._encodingMajor)
{
return false;
}
- if(_endpointInfo.encodingMinor != p._endpointInfo.encodingMinor)
+ if(_encodingMinor != p._encodingMinor)
{
return false;
}
- if(_endpointInfo.mcastTtl != p._endpointInfo.mcastTtl)
+ if(_mcastTtl != p._mcastTtl)
{
return false;
}
- if(_endpointInfo.mcastInterface.compareTo(p._endpointInfo.mcastInterface) != 0)
+ if(_mcastInterface.compareTo(p._mcastInterface) != 0)
{
return false;
}
@@ -118,8 +123,13 @@ final class UdpConnector implements Connector
}
private Instance _instance;
- private Ice.UdpEndpointInfo _endpointInfo;
private java.net.InetSocketAddress _addr;
+ private String _mcastInterface;
+ private int _mcastTtl;
+ private byte _protocolMajor;
+ private byte _protocolMinor;
+ private byte _encodingMajor;
+ private byte _encodingMinor;
private String _connectionId;
private int _hashCode;
}
diff --git a/java/src/IceInternal/UdpEndpointI.java b/java/src/IceInternal/UdpEndpointI.java
index 0760a94f180..846b4f41c48 100644
--- a/java/src/IceInternal/UdpEndpointI.java
+++ b/java/src/IceInternal/UdpEndpointI.java
@@ -528,7 +528,7 @@ final class UdpEndpointI extends EndpointI
public Transceiver
transceiver(EndpointIHolder endpoint)
{
- UdpTransceiver p = new UdpTransceiver(_instance, (Ice.UdpEndpointInfo)getInfo(), _connect);
+ UdpTransceiver p = new UdpTransceiver(_instance, _host, _port, _mcastInterface, _connect);
endpoint.value = new UdpEndpointI(_instance, _host, p.effectivePort(), _mcastInterface, _mcastTtl,
_protocolMajor, _protocolMinor, _encodingMajor, _encodingMinor, _connect,
_connectionId, _compress);
@@ -744,7 +744,9 @@ final class UdpEndpointI extends EndpointI
java.util.ArrayList<Connector> connectors = new java.util.ArrayList<Connector>();
for(java.net.InetSocketAddress p : addresses)
{
- connectors.add(new UdpConnector(_instance, (Ice.UdpEndpointInfo)getInfo(), p, _connectionId));
+ connectors.add(
+ new UdpConnector(_instance, p, _mcastInterface, _mcastTtl, _protocolMajor, _protocolMinor,
+ _encodingMajor, _encodingMinor, _connectionId));
}
return connectors;
}
diff --git a/java/src/IceInternal/UdpTransceiver.java b/java/src/IceInternal/UdpTransceiver.java
index 717688d3e92..10f4c531935 100644
--- a/java/src/IceInternal/UdpTransceiver.java
+++ b/java/src/IceInternal/UdpTransceiver.java
@@ -235,7 +235,6 @@ final class UdpTransceiver implements Transceiver
assert(_fd != null);
Ice.UdpConnectionInfo info = new Ice.UdpConnectionInfo();
- info.endpoint = _endpointInfo;
java.net.DatagramSocket socket = _fd.socket();
info.localAddress = socket.getLocalAddress().getHostAddress();
info.localPort = socket.getLocalPort();
@@ -285,9 +284,8 @@ final class UdpTransceiver implements Transceiver
//
// Only for use by UdpEndpoint
//
- UdpTransceiver(Instance instance, Ice.UdpEndpointInfo endpointInfo, java.net.InetSocketAddress addr)
+ UdpTransceiver(Instance instance, java.net.InetSocketAddress addr, String mcastInterface, int mcastTtl)
{
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_stats = instance.initializationData().stats;
@@ -304,7 +302,7 @@ final class UdpTransceiver implements Transceiver
_connect = false; // We're connected now
if(_addr.getAddress().isMulticastAddress())
{
- configureMulticast(null, _endpointInfo.mcastInterface, _endpointInfo.mcastTtl);
+ configureMulticast(null, mcastInterface, mcastTtl);
}
if(_traceLevels.network >= 1)
@@ -323,9 +321,8 @@ final class UdpTransceiver implements Transceiver
//
// Only for use by UdpEndpoint
//
- UdpTransceiver(Instance instance, Ice.UdpEndpointInfo endpointInfo, boolean connect)
+ UdpTransceiver(Instance instance, String host, int port, String mcastInterface, boolean connect)
{
- _endpointInfo = endpointInfo;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_stats = instance.initializationData().stats;
@@ -337,7 +334,7 @@ final class UdpTransceiver implements Transceiver
_fd = Network.createUdpSocket();
setBufSize(instance);
Network.setBlock(_fd, false);
- _addr = Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port, instance.protocolSupport());
+ _addr = Network.getAddressForServer(host, port, instance.protocolSupport());
if(_traceLevels.network >= 2)
{
String s = "attempting to bind to udp socket " + Network.addrToString(_addr);
@@ -347,12 +344,12 @@ final class UdpTransceiver implements Transceiver
{
Network.setReuseAddress(_fd, true);
_mcastAddr = _addr;
- _addr = Network.doBind(_fd, Network.getAddress("0.0.0.0", _endpointInfo.port, Network.EnableIPv4));
- if(_endpointInfo.port == 0)
+ _addr = Network.doBind(_fd, Network.getAddress("0.0.0.0", port, Network.EnableIPv4));
+ if(port == 0)
{
_mcastAddr = new java.net.InetSocketAddress(_mcastAddr.getAddress(), _addr.getPort());
}
- configureMulticast(_mcastAddr, _endpointInfo.mcastInterface, -1);
+ configureMulticast(_mcastAddr, mcastInterface, -1);
}
else
{
@@ -570,7 +567,6 @@ final class UdpTransceiver implements Transceiver
super.finalize();
}
- private Ice.UdpEndpointInfo _endpointInfo;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private Ice.Stats _stats;
diff --git a/java/src/IceSSL/AcceptorI.java b/java/src/IceSSL/AcceptorI.java
index 432efd98985..18184b50aa2 100644
--- a/java/src/IceSSL/AcceptorI.java
+++ b/java/src/IceSSL/AcceptorI.java
@@ -88,7 +88,7 @@ final class AcceptorI implements IceInternal.Acceptor
IceInternal.Network.fdToString(fd));
}
- return new TransceiverI(_instance, _endpointInfo, engine, fd, true, true, _adapterName);
+ return new TransceiverI(_instance, engine, fd, "", true, true, _adapterName);
}
public String
@@ -103,10 +103,9 @@ final class AcceptorI implements IceInternal.Acceptor
return _addr.getPort();
}
- AcceptorI(Instance instance, SSLEndpointInfo endpointInfo, String adapterName)
+ AcceptorI(Instance instance, String adapterName, String host, int port)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_adapterName = adapterName;
_logger = instance.communicator().getLogger();
_backlog = instance.communicator().getProperties().getPropertyAsIntWithDefault("Ice.TCP.Backlog", 511);
@@ -133,8 +132,7 @@ final class AcceptorI implements IceInternal.Acceptor
//
IceInternal.Network.setReuseAddress(_fd, true);
}
- _addr = IceInternal.Network.getAddressForServer(_endpointInfo.host, _endpointInfo.port,
- _instance.protocolSupport());
+ _addr = IceInternal.Network.getAddressForServer(host, port, _instance.protocolSupport());
if(_instance.networkTraceLevel() >= 2)
{
String s = "attempting to bind to ssl socket " + toString();
@@ -159,7 +157,6 @@ final class AcceptorI implements IceInternal.Acceptor
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private String _adapterName;
private Ice.Logger _logger;
private java.nio.channels.ServerSocketChannel _fd;
diff --git a/java/src/IceSSL/ConnectorI.java b/java/src/IceSSL/ConnectorI.java
index 07a12015439..32e8d4cf817 100644
--- a/java/src/IceSSL/ConnectorI.java
+++ b/java/src/IceSSL/ConnectorI.java
@@ -39,7 +39,7 @@ final class ConnectorI implements IceInternal.Connector
try
{
javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false);
- return new TransceiverI(_instance, _endpointInfo, engine, fd, connected, false, "");
+ return new TransceiverI(_instance, engine, fd, _host, connected, false, "");
}
catch(RuntimeException ex)
{
@@ -79,17 +79,18 @@ final class ConnectorI implements IceInternal.Connector
//
// Only for use by EndpointI.
//
- ConnectorI(Instance instance, SSLEndpointInfo endpointInfo, java.net.InetSocketAddress addr, String connectionId)
+ ConnectorI(Instance instance, String host, java.net.InetSocketAddress addr, int timeout, String connectionId)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_logger = instance.communicator().getLogger();
+ _host = host;
_addr = addr;
+ _timeout = timeout;
_connectionId = connectionId;
_hashCode = _addr.getAddress().getHostAddress().hashCode();
_hashCode = 5 * _hashCode + _addr.getPort();
- _hashCode = 5 * _hashCode + _endpointInfo.timeout;
+ _hashCode = 5 * _hashCode + _timeout;
_hashCode = 5 * _hashCode + _connectionId.hashCode();
}
@@ -112,7 +113,7 @@ final class ConnectorI implements IceInternal.Connector
return true;
}
- if(_endpointInfo.timeout != p._endpointInfo.timeout)
+ if(_timeout != p._timeout)
{
return false;
}
@@ -126,9 +127,10 @@ final class ConnectorI implements IceInternal.Connector
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private Ice.Logger _logger;
+ private String _host;
private java.net.InetSocketAddress _addr;
+ private int _timeout;
private String _connectionId;
private int _hashCode;
}
diff --git a/java/src/IceSSL/EndpointI.java b/java/src/IceSSL/EndpointI.java
index 4fc235a2c10..77e70e0671d 100644
--- a/java/src/IceSSL/EndpointI.java
+++ b/java/src/IceSSL/EndpointI.java
@@ -394,7 +394,7 @@ final class EndpointI extends IceInternal.EndpointI
public IceInternal.Acceptor
acceptor(IceInternal.EndpointIHolder endpoint, String adapterName)
{
- AcceptorI p = new AcceptorI(_instance, (SSLEndpointInfo)getInfo(), adapterName);
+ AcceptorI p = new AcceptorI(_instance, adapterName, _host, _port);
endpoint.value =
new EndpointI(_instance, _host, p.effectivePort(), _timeout, _connectionId, _compress);
return p;
@@ -525,7 +525,7 @@ final class EndpointI extends IceInternal.EndpointI
java.util.List<IceInternal.Connector> connectors = new java.util.ArrayList<IceInternal.Connector>();
for(java.net.InetSocketAddress p : addresses)
{
- connectors.add(new ConnectorI(_instance, (SSLEndpointInfo)getInfo(), p, _connectionId));
+ connectors.add(new ConnectorI(_instance, _host, p, _timeout, _connectionId));
}
return connectors;
}
diff --git a/java/src/IceSSL/TransceiverI.java b/java/src/IceSSL/TransceiverI.java
index bd7a8a8a3ca..54687c5f052 100644
--- a/java/src/IceSSL/TransceiverI.java
+++ b/java/src/IceSSL/TransceiverI.java
@@ -280,7 +280,6 @@ final class TransceiverI implements IceInternal.Transceiver
assert(_fd != null);
IceSSL.SSLConnectionInfo info = new IceSSL.SSLConnectionInfo();
- info.endpoint = _endpointInfo;
java.net.Socket socket = _fd.socket();
info.localAddress = socket.getLocalAddress().getHostAddress();
info.localPort = socket.getLocalPort();
@@ -340,13 +339,13 @@ final class TransceiverI implements IceInternal.Transceiver
//
// Only for use by ConnectorI, AcceptorI.
//
- TransceiverI(Instance instance, SSLEndpointInfo endpointInfo, javax.net.ssl.SSLEngine engine,
- java.nio.channels.SocketChannel fd, boolean connected, boolean incoming, String adapterName)
+ TransceiverI(Instance instance, javax.net.ssl.SSLEngine engine, java.nio.channels.SocketChannel fd,
+ String host, boolean connected, boolean incoming, String adapterName)
{
_instance = instance;
- _endpointInfo = endpointInfo;
_engine = engine;
_fd = fd;
+ _host = host;
_incoming = incoming;
_adapterName = adapterName;
_state = connected ? StateConnected : StateNeedConnect;
@@ -537,7 +536,7 @@ final class TransceiverI implements IceInternal.Transceiver
// Additional verification.
//
_info = Util.populateConnectionInfo(_engine.getSession(), _fd.socket(), _adapterName, _incoming);
- _instance.verifyPeer(_info, _fd, _endpointInfo.host, _incoming);
+ _instance.verifyPeer(_info, _fd, _host, _incoming);
if(_instance.networkTraceLevel() >= 1)
{
@@ -792,9 +791,9 @@ final class TransceiverI implements IceInternal.Transceiver
}
private Instance _instance;
- private SSLEndpointInfo _endpointInfo;
private java.nio.channels.SocketChannel _fd;
private javax.net.ssl.SSLEngine _engine;
+ private String _host;
private boolean _incoming;
private String _adapterName;
private int _state;
diff --git a/rb/src/IceRuby/ConnectionInfo.cpp b/rb/src/IceRuby/ConnectionInfo.cpp
new file mode 100644
index 00000000000..797b7a3565f
--- /dev/null
+++ b/rb/src/IceRuby/ConnectionInfo.cpp
@@ -0,0 +1,281 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <ConnectionInfo.h>
+#include <Util.h>
+#include <Ice/Connection.h>
+
+using namespace std;
+using namespace IceRuby;
+
+static VALUE _connectionInfoClass;
+static VALUE _tcpConnectionInfoClass;
+static VALUE _udpConnectionInfoClass;
+
+static VALUE _endpointInfoClass;
+static VALUE _tcpEndpointInfoClass;
+static VALUE _udpEndpointInfoClass;
+static VALUE _opaqueEndpointInfoClass;
+
+// **********************************************************************
+// ConnectionInfo
+// **********************************************************************
+
+extern "C"
+void
+IceRuby_ConnectionInfo_free(Ice::ConnectionPtr* p)
+{
+ assert(p);
+ delete p;
+}
+
+VALUE
+IceRuby::createConnectionInfo(const Ice::ConnectionInfoPtr& p)
+{
+ VALUE info;
+ if(Ice::TcpConnectionInfoPtr::dynamicCast(p))
+ {
+ info = Data_Wrap_Struct(_tcpConnectionInfoClass, 0, IceRuby_ConnectionInfo_free, new Ice::ConnectionInfoPtr(p));
+
+ Ice::TcpConnectionInfoPtr tcp = Ice::TcpConnectionInfoPtr::dynamicCast(p);
+ rb_ivar_set(info, rb_intern("@localAddress"), createString(tcp->localAddress));
+ rb_ivar_set(info, rb_intern("@localPort"), INT2FIX(tcp->localPort));
+ rb_ivar_set(info, rb_intern("@remoteAddress"), createString(tcp->remoteAddress));
+ rb_ivar_set(info, rb_intern("@remotePort"), INT2FIX(tcp->remotePort));
+ }
+ else if(Ice::UdpConnectionInfoPtr::dynamicCast(p))
+ {
+ info = Data_Wrap_Struct(_udpConnectionInfoClass, 0, IceRuby_ConnectionInfo_free, new Ice::ConnectionInfoPtr(p));
+
+ Ice::UdpConnectionInfoPtr udp = Ice::UdpConnectionInfoPtr::dynamicCast(p);
+ rb_ivar_set(info, rb_intern("@localAddress"), createString(udp->localAddress));
+ rb_ivar_set(info, rb_intern("@localPort"), INT2FIX(udp->localPort));
+ rb_ivar_set(info, rb_intern("@remoteAddress"), createString(udp->remoteAddress));
+ rb_ivar_set(info, rb_intern("@remotePort"), INT2FIX(udp->remotePort));
+ rb_ivar_set(info, rb_intern("@mcastAddress"), createString(udp->mcastAddress));
+ rb_ivar_set(info, rb_intern("@mcastPort"), INT2FIX(udp->mcastPort));
+ }
+ else
+ {
+ info = Data_Wrap_Struct(_connectionInfoClass, 0, IceRuby_ConnectionInfo_free, new Ice::ConnectionInfoPtr(p));
+ }
+ rb_ivar_set(info, rb_intern("@endpoint"), createEndpointInfo(p->endpoint));
+ return info;
+}
+
+// **********************************************************************
+// EndpointInfo
+// **********************************************************************
+
+extern "C"
+void
+IceRuby_EndpointInfo_free(Ice::EndpointPtr* p)
+{
+ assert(p);
+ delete p;
+}
+
+VALUE
+IceRuby::createEndpointInfo(const Ice::EndpointInfoPtr& p)
+{
+ VALUE info;
+ if(Ice::TcpEndpointInfoPtr::dynamicCast(p))
+ {
+ info = Data_Wrap_Struct(_tcpEndpointInfoClass, 0, IceRuby_EndpointInfo_free, new Ice::EndpointInfoPtr(p));
+
+ Ice::TcpEndpointInfoPtr tcp = Ice::TcpEndpointInfoPtr::dynamicCast(p);
+ rb_ivar_set(info, rb_intern("@host"), createString(tcp->host));
+ rb_ivar_set(info, rb_intern("@port"), INT2FIX(tcp->port));
+ }
+ else if(Ice::UdpEndpointInfoPtr::dynamicCast(p))
+ {
+ info = Data_Wrap_Struct(_udpEndpointInfoClass, 0, IceRuby_EndpointInfo_free, new Ice::EndpointInfoPtr(p));
+
+ Ice::UdpEndpointInfoPtr udp = Ice::UdpEndpointInfoPtr::dynamicCast(p);
+ rb_ivar_set(info, rb_intern("@host"), createString(udp->host));
+ rb_ivar_set(info, rb_intern("@port"), INT2FIX(udp->port));
+ rb_ivar_set(info, rb_intern("@protocolMajor"), CHR2FIX(udp->protocolMajor));
+ rb_ivar_set(info, rb_intern("@protocolMinor"), CHR2FIX(udp->protocolMinor));
+ rb_ivar_set(info, rb_intern("@encodingMajor"), CHR2FIX(udp->encodingMajor));
+ rb_ivar_set(info, rb_intern("@encodingMinor"), CHR2FIX(udp->encodingMinor));
+ rb_ivar_set(info, rb_intern("@mcastInterface"), createString(udp->mcastInterface));
+ rb_ivar_set(info, rb_intern("@mcastTtl"), INT2FIX(udp->mcastTtl));
+ }
+ else if(Ice::OpaqueEndpointInfoPtr::dynamicCast(p))
+ {
+ info = Data_Wrap_Struct(_opaqueEndpointInfoClass, 0, IceRuby_EndpointInfo_free, new Ice::EndpointInfoPtr(p));
+
+ Ice::OpaqueEndpointInfoPtr opaque = Ice::OpaqueEndpointInfoPtr::dynamicCast(p);
+ Ice::ByteSeq b = opaque->rawBytes;
+ VALUE v = callRuby(rb_str_new, reinterpret_cast<const char*>(&b[0]), static_cast<long>(b.size()));
+ rb_ivar_set(info, rb_intern("@rawBytes"), v);
+ }
+ else
+ {
+ info = Data_Wrap_Struct(_endpointInfoClass, 0, IceRuby_EndpointInfo_free, new Ice::EndpointInfoPtr(p));
+ }
+ rb_ivar_set(info, rb_intern("@timeout"), INT2FIX(p->timeout));
+ rb_ivar_set(info, rb_intern("@compress"), p->compress ? Qtrue : Qfalse);
+ return info;
+}
+
+//
+// Ice::Endpoint::type
+//
+extern "C"
+VALUE
+IceRuby_EndpointInfo_type(VALUE self)
+{
+ ICE_RUBY_TRY
+ {
+ Ice::EndpointInfoPtr* p = reinterpret_cast<Ice::EndpointInfoPtr*>(DATA_PTR(self));
+ assert(p);
+
+ Ice::Short type = (*p)->type();
+ return INT2FIX(type);
+ }
+ ICE_RUBY_CATCH
+ return Qnil;
+}
+
+//
+// Ice::Endpoint::datagram
+//
+extern "C"
+VALUE
+IceRuby_EndpointInfo_datagram(VALUE self)
+{
+ ICE_RUBY_TRY
+ {
+ Ice::EndpointInfoPtr* p = reinterpret_cast<Ice::EndpointInfoPtr*>(DATA_PTR(self));
+ assert(p);
+
+ bool result = (*p)->datagram();
+ return result ? Qtrue : Qfalse;
+ }
+ ICE_RUBY_CATCH
+ return Qnil;
+}
+
+//
+// Ice::Endpoint::secure
+//
+extern "C"
+VALUE
+IceRuby_EndpointInfo_secure(VALUE self)
+{
+ ICE_RUBY_TRY
+ {
+ Ice::EndpointInfoPtr* p = reinterpret_cast<Ice::EndpointInfoPtr*>(DATA_PTR(self));
+ assert(p);
+
+ bool result = (*p)->secure();
+ return result ? Qtrue : Qfalse;
+ }
+ ICE_RUBY_CATCH
+ return Qnil;
+}
+
+void
+IceRuby::initConnectionInfo(VALUE iceModule)
+{
+ //
+ // ConnectionInfo.
+ //
+ _connectionInfoClass = rb_define_class_under(iceModule, "ConnectionInfo", rb_cObject);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_connectionInfoClass, "endpoint", 1, 0);
+
+ //
+ // TcpConnectionInfo
+ //
+ _tcpConnectionInfoClass = rb_define_class_under(iceModule, "TcpConnectionInfo", _connectionInfoClass);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_tcpConnectionInfoClass, "localAddress", 1, 0);
+ rb_define_attr(_tcpConnectionInfoClass, "localPort", 1, 0);
+ rb_define_attr(_tcpConnectionInfoClass, "remoteAddress", 1, 0);
+ rb_define_attr(_tcpConnectionInfoClass, "remotePort", 1, 0);
+
+ //
+ // UdpConnectionInfo
+ //
+ _udpConnectionInfoClass = rb_define_class_under(iceModule, "UdpConnectionInfo", _connectionInfoClass);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_udpConnectionInfoClass, "localAddress", 1, 0);
+ rb_define_attr(_udpConnectionInfoClass, "localPort", 1, 0);
+ rb_define_attr(_udpConnectionInfoClass, "remoteAddress", 1, 0);
+ rb_define_attr(_udpConnectionInfoClass, "remotePort", 1, 0);
+ rb_define_attr(_udpConnectionInfoClass, "mcastAddress", 1, 0);
+ rb_define_attr(_udpConnectionInfoClass, "mcastPort", 1, 0);
+
+ //
+ // EndpointInfo.
+ //
+ _endpointInfoClass = rb_define_class_under(iceModule, "EndpointInfo", rb_cObject);
+
+ //
+ // Instance methods.
+ //
+ rb_define_method(_endpointInfoClass, "type", CAST_METHOD(IceRuby_EndpointInfo_type), 0);
+ rb_define_method(_endpointInfoClass, "datagram", CAST_METHOD(IceRuby_EndpointInfo_datagram), 0);
+ rb_define_method(_endpointInfoClass, "secure", CAST_METHOD(IceRuby_EndpointInfo_secure), 0);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_endpointInfoClass, "timeout", 1, 0);
+ rb_define_attr(_endpointInfoClass, "compress", 1, 0);
+
+ //
+ // TcpEndpointInfo
+ //
+ _tcpEndpointInfoClass = rb_define_class_under(iceModule, "TcpEndpointInfo", _endpointInfoClass);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_tcpEndpointInfoClass, "host", 1, 0);
+ rb_define_attr(_tcpEndpointInfoClass, "port", 1, 0);
+
+ //
+ // UdpEndpointInfo
+ //
+ _udpEndpointInfoClass = rb_define_class_under(iceModule, "UdpEndpointInfo", _endpointInfoClass);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_udpEndpointInfoClass, "host", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "port", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "protocolMajor", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "protocolMinor", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "encodingMajor", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "encodingMinor", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "mcastInterface", 1, 0);
+ rb_define_attr(_udpEndpointInfoClass, "mcastTtl", 1, 0);
+
+ //
+ // OpaqueEndpointInfo
+ //
+ _opaqueEndpointInfoClass = rb_define_class_under(iceModule, "OpaqueEndpointInfo", _endpointInfoClass);
+
+ //
+ // Instance members.
+ //
+ rb_define_attr(_opaqueEndpointInfoClass, "rawBytes", 1, 0);
+}
diff --git a/rb/src/IceRuby/ConnectionInfo.h b/rb/src/IceRuby/ConnectionInfo.h
new file mode 100644
index 00000000000..cac9ff1e08f
--- /dev/null
+++ b/rb/src/IceRuby/ConnectionInfo.h
@@ -0,0 +1,26 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_RUBY_CONNECTION_INFO_H
+#define ICE_RUBY_CONNECTION_INFO_H
+
+#include <Config.h>
+#include <Ice/Connection.h>
+
+namespace IceRuby
+{
+
+void initConnectionInfo(VALUE);
+VALUE createConnectionInfo(const Ice::ConnectionInfoPtr&);
+
+VALUE createEndpointInfo(const Ice::EndpointInfoPtr&);
+
+}
+
+#endif
diff --git a/rb/src/IceRuby/Init.cpp b/rb/src/IceRuby/Init.cpp
index 05fd150001d..3b98e0128d1 100644
--- a/rb/src/IceRuby/Init.cpp
+++ b/rb/src/IceRuby/Init.cpp
@@ -15,6 +15,7 @@
#include <Proxy.h>
#include <Slice.h>
#include <Types.h>
+#include <ConnectionInfo.h>
using namespace std;
using namespace IceRuby;
@@ -37,6 +38,7 @@ Init_IceRuby()
initTypes(iceModule);
initImplicitContext(iceModule);
initUtil(iceModule);
+ initConnectionInfo(iceModule);
}
}
diff --git a/rb/src/IceRuby/Makefile b/rb/src/IceRuby/Makefile
index bfe34651e74..eaba4e043e1 100644
--- a/rb/src/IceRuby/Makefile
+++ b/rb/src/IceRuby/Makefile
@@ -15,7 +15,8 @@ LIBNAME = $(call mkrblibname,IceRuby)
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
-OBJS = Communicator.o \
+OBJS = ConnectionInfo.o \
+ Communicator.o \
Init.o \
ImplicitContext.o \
Logger.o \
diff --git a/rb/src/IceRuby/Makefile.mak b/rb/src/IceRuby/Makefile.mak
index 322e2e001d7..255aef42874 100644
--- a/rb/src/IceRuby/Makefile.mak
+++ b/rb/src/IceRuby/Makefile.mak
@@ -14,7 +14,8 @@ DLLNAME = $(libdir)\IceRuby$(LIBSUFFIX).dll
TARGETS = $(LIBNAME) $(DLLNAME)
-OBJS = Communicator.obj \
+OBJS = ConnectionInfo.obj \
+ Communicator.obj \
Init.obj \
ImplicitContext.obj \
Logger.obj \
diff --git a/rb/src/IceRuby/Proxy.cpp b/rb/src/IceRuby/Proxy.cpp
index 8d04c382ca2..64f4ce5692a 100644
--- a/rb/src/IceRuby/Proxy.cpp
+++ b/rb/src/IceRuby/Proxy.cpp
@@ -9,6 +9,7 @@
#include <Proxy.h>
#include <Communicator.h>
+#include <ConnectionInfo.h>
#include <Util.h>
#include <Ice/Connection.h>
#include <Ice/Locator.h>
@@ -105,6 +106,22 @@ IceRuby_Connection_timeout(VALUE self)
extern "C"
VALUE
+IceRuby_Connection_getInfo(VALUE self)
+{
+ ICE_RUBY_TRY
+ {
+ Ice::ConnectionPtr* p = reinterpret_cast<Ice::ConnectionPtr*>(DATA_PTR(self));
+ assert(p);
+
+ Ice::ConnectionInfoPtr info = (*p)->getInfo();
+ return createConnectionInfo(info);
+ }
+ ICE_RUBY_CATCH
+ return Qnil;
+}
+
+extern "C"
+VALUE
IceRuby_Connection_toString(VALUE self)
{
ICE_RUBY_TRY
@@ -159,10 +176,6 @@ createEndpoint(const Ice::EndpointPtr& p)
return Data_Wrap_Struct(_endpointClass, 0, IceRuby_Endpoint_free, new Ice::EndpointPtr(p));
}
-
-//
-// Ice::Endpoint::toString
-//
extern "C"
VALUE
IceRuby_Endpoint_toString(VALUE self)
@@ -179,6 +192,22 @@ IceRuby_Endpoint_toString(VALUE self)
return Qnil;
}
+extern "C"
+VALUE
+IceRuby_Endpoint_getInfo(VALUE self)
+{
+ ICE_RUBY_TRY
+ {
+ Ice::EndpointPtr* p = reinterpret_cast<Ice::EndpointPtr*>(DATA_PTR(self));
+ assert(p);
+
+ Ice::EndpointInfoPtr info = (*p)->getInfo();
+ return createEndpointInfo(info);
+ }
+ ICE_RUBY_CATCH
+ return Qnil;
+}
+
// **********************************************************************
// ObjectPrx
// **********************************************************************
@@ -1316,6 +1345,7 @@ IceRuby::initProxy(VALUE iceModule)
rb_define_method(_connectionClass, "flushBatchRequests", CAST_METHOD(IceRuby_Connection_flushBatchRequests), 0);
rb_define_method(_connectionClass, "type", CAST_METHOD(IceRuby_Connection_type), 0);
rb_define_method(_connectionClass, "timeout", CAST_METHOD(IceRuby_Connection_timeout), 0);
+ rb_define_method(_connectionClass, "getInfo", CAST_METHOD(IceRuby_Connection_getInfo), 0);
rb_define_method(_connectionClass, "toString", CAST_METHOD(IceRuby_Connection_toString), 0);
rb_define_method(_connectionClass, "to_s", CAST_METHOD(IceRuby_Connection_toString), 0);
rb_define_method(_connectionClass, "inspect", CAST_METHOD(IceRuby_Connection_toString), 0);
@@ -1331,6 +1361,9 @@ IceRuby::initProxy(VALUE iceModule)
// Instance methods.
//
rb_define_method(_endpointClass, "toString", CAST_METHOD(IceRuby_Endpoint_toString), 0);
+ rb_define_method(_endpointClass, "getInfo", CAST_METHOD(IceRuby_Endpoint_getInfo), 0);
+ rb_define_method(_endpointClass, "to_s", CAST_METHOD(IceRuby_Endpoint_toString), 0);
+ rb_define_method(_endpointClass, "inspect", CAST_METHOD(IceRuby_Endpoint_toString), 0);
//
// ObjectPrx.
diff --git a/rb/test/Ice/proxy/AllTests.rb b/rb/test/Ice/proxy/AllTests.rb
index 1b62fcf3c14..0dfbf35b7ae 100644
--- a/rb/test/Ice/proxy/AllTests.rb
+++ b/rb/test/Ice/proxy/AllTests.rb
@@ -421,7 +421,7 @@ def allTests(communicator)
# TODO: Ideally we should also test comparison of fixed proxies.
#
- print "ok"
+ puts "ok"
print "testing checked cast... "
STDOUT.flush
@@ -600,30 +600,32 @@ def allTests(communicator)
end
puts "ok"
- #print "testing endpoint information..."
+ print "testing endpoint information... "
+ STDOUT.flush
- #p1 = communicator.stringToProxy("test -t:tcp -h tcphost -p 10000 -t 1200 -z:udp -h udphost -p 10001 --interface eth0 --ttl 5:opaque -t 100 -v ABCD");
- #endps = p1.ice_getEndpoints();
+ p1 = communicator.stringToProxy("test -t:tcp -h tcphost -p 10000 -t 1200 -z:udp -h udphost -p 10001 --interface eth0 --ttl 5:opaque -t 100 -v ABCD");
+ endps = p1.ice_getEndpoints();
- #test(endps[0].is_a?(Ice::TcpEndpoint));
- #tcpEndpoint = endps[0];
- #test(tcpEndpoint.host() == "tcphost");
- #test(tcpEndpoint.port() == 10000);
- #test(tcpEndpoint.timeout() == 1200);
- #test(tcpEndpoint.compress());
+ info = endps[0].getInfo()
+ test(info.is_a?(Ice::TcpEndpointInfo));
+ test(info.host == "tcphost");
+ test(info.port == 10000);
+ test(info.timeout == 1200);
+ test(info.compress);
- #test(endps[1].is_a?(Ice::UdpEndpoint));
- #udpEndpoint = endps[1];
- #test(udpEndpoint.host() == "udphost");
- #test(udpEndpoint.port() == 10001);
- #test(udpEndpoint.mcastInterface() == "eth0");
- #test(udpEndpoint.mcastTtl() == 5);
- #test(udpEndpoint.timeout() == -1);
- #test(!udpEndpoint.compress());
+ info = endps[1].getInfo()
+ test(info.is_a?(Ice::UdpEndpointInfo));
+ test(info.host == "udphost");
+ test(info.port == 10001);
+ test(info.mcastInterface == "eth0");
+ test(info.mcastTtl == 5);
+ test(info.timeout == -1);
+ test(!info.compress);
- #test(endps[2].is_a?(Ice::OpaqueEndpoint));
+ info = endps[2].getInfo()
+ test(info.is_a?(Ice::OpaqueEndpointInfo));
- #puts "ok"
+ puts "ok"
return cl
end