diff options
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 |