diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/TcpEndpointI.cpp | 11 | ||||
-rw-r--r-- | cpp/src/Ice/UdpEndpointI.cpp | 15 | ||||
-rw-r--r-- | cpp/src/Ice/WSEndpoint.cpp | 9 | ||||
-rw-r--r-- | cpp/src/Ice/ios/StreamEndpointI.cpp | 11 | ||||
-rw-r--r-- | cpp/src/IceSSL/EndpointI.cpp | 9 |
5 files changed, 46 insertions, 9 deletions
diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp index 17320c1d537..c1b87d1b931 100644 --- a/cpp/src/Ice/TcpEndpointI.cpp +++ b/cpp/src/Ice/TcpEndpointI.cpp @@ -137,8 +137,15 @@ IceInternal::TcpEndpointI::acceptor(const string&) const TcpEndpointIPtr IceInternal::TcpEndpointI::endpoint(const TcpAcceptorPtr& acceptor) const { - return ICE_MAKE_SHARED(TcpEndpointI, _instance, _host, acceptor->effectivePort(), _sourceAddr, _timeout, _connectionId, - _compress); + int port = acceptor->effectivePort(); + if(_port == port) + { + return ICE_DYNAMIC_CAST(TcpEndpointI, ICE_SHARED_FROM_CONST_THIS(TcpEndpointI)); + } + else + { + return ICE_MAKE_SHARED(TcpEndpointI, _instance, _host, port, _sourceAddr, _timeout, _connectionId, _compress); + } } string diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp index 5e65c71855c..9016a2ae2f7 100644 --- a/cpp/src/Ice/UdpEndpointI.cpp +++ b/cpp/src/Ice/UdpEndpointI.cpp @@ -140,7 +140,8 @@ IceInternal::UdpEndpointI::datagram() const TransceiverPtr IceInternal::UdpEndpointI::transceiver() const { - return new UdpTransceiver(ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)), _instance, _host, _port, _mcastInterface, _connect); + return new UdpTransceiver(ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)), _instance, + _host, _port, _mcastInterface, _connect); } AcceptorPtr @@ -152,8 +153,16 @@ IceInternal::UdpEndpointI::acceptor(const string&) const UdpEndpointIPtr IceInternal::UdpEndpointI::endpoint(const UdpTransceiverPtr& transceiver) const { - return ICE_MAKE_SHARED(UdpEndpointI, _instance, _host, transceiver->effectivePort(), _sourceAddr, _mcastInterface, - _mcastTtl, _connect, _connectionId, _compress); + int port = transceiver->effectivePort(); + if(port == _port) + { + return ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)); + } + else + { + return ICE_MAKE_SHARED(UdpEndpointI, _instance, _host, port, _sourceAddr, _mcastInterface,_mcastTtl, _connect, + _connectionId, _compress); + } } void diff --git a/cpp/src/Ice/WSEndpoint.cpp b/cpp/src/Ice/WSEndpoint.cpp index c19842d652f..6296400a16d 100644 --- a/cpp/src/Ice/WSEndpoint.cpp +++ b/cpp/src/Ice/WSEndpoint.cpp @@ -228,7 +228,14 @@ IceInternal::WSEndpoint::acceptor(const string& adapterName) const WSEndpointPtr IceInternal::WSEndpoint::endpoint(const EndpointIPtr& delEndp) const { - return ICE_MAKE_SHARED(WSEndpoint, _instance, delEndp, _resource); + if(delEndp.get() == _delegate.get()) + { + return ICE_DYNAMIC_CAST(WSEndpoint, ICE_SHARED_FROM_CONST_THIS(WSEndpoint)); + } + else + { + return ICE_MAKE_SHARED(WSEndpoint, _instance, delEndp, _resource); + } } vector<EndpointIPtr> diff --git a/cpp/src/Ice/ios/StreamEndpointI.cpp b/cpp/src/Ice/ios/StreamEndpointI.cpp index 9fb191d660d..d2290c88dfc 100644 --- a/cpp/src/Ice/ios/StreamEndpointI.cpp +++ b/cpp/src/Ice/ios/StreamEndpointI.cpp @@ -233,8 +233,15 @@ IceObjC::StreamEndpointI::acceptor(const string&) const IceObjC::StreamEndpointIPtr IceObjC::StreamEndpointI::endpoint(const StreamAcceptorPtr& a) const { - return ICE_MAKE_SHARED(StreamEndpointI, _instance, _host, a->effectivePort(), _sourceAddr, _timeout, _connectionId, - _compress); + int port = a->effectivePort(); + if(port == _port) + { + return ICE_DYNAMIC_CAST(StreamEndpointI, ICE_SHARED_FROM_CONST_THIS(StreamEndpointI)); + } + else + { + return ICE_MAKE_SHARED(StreamEndpointI, _instance, _host, port, _sourceAddr, _timeout, _connectionId, _compress); + } } string diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp index 2300bffa4cb..69705dcbcd8 100644 --- a/cpp/src/IceSSL/EndpointI.cpp +++ b/cpp/src/IceSSL/EndpointI.cpp @@ -203,7 +203,14 @@ IceSSL::EndpointI::acceptor(const string& adapterName) const EndpointIPtr IceSSL::EndpointI::endpoint(const IceInternal::EndpointIPtr& delEndp) const { - return ICE_MAKE_SHARED(EndpointI, _instance, delEndp); + if(delEndp.get() == _delegate.get()) + { + return ICE_DYNAMIC_CAST(EndpointI, ICE_SHARED_FROM_CONST_THIS(EndpointI)); + } + else + { + return ICE_MAKE_SHARED(EndpointI, _instance, delEndp); + } } vector<IceInternal::EndpointIPtr> |