1 // **********************************************************************
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
8 // **********************************************************************
10 #include <EndpointI.h>
11 #include <Transceiver.h>
12 #include <Connector.h>
14 #include <Ice/BasicStream.h>
18 Ice::Short
EndpointI::TYPE_BASE
= 100;
20 EndpointI::EndpointI(const IceInternal::EndpointIPtr
& endpoint
) :
22 _configuration(Configuration::getInstance())
27 EndpointI::streamWrite(IceInternal::BasicStream
* s
) const
30 _endpoint
->streamWrite(s
);
34 EndpointI::type() const
36 return (Ice::Short
)(TYPE_BASE
+ _endpoint
->type());
40 EndpointI::timeout() const
42 return _endpoint
->timeout();
45 IceInternal::EndpointIPtr
46 EndpointI::timeout(int timeout
) const
48 IceInternal::EndpointIPtr endpoint
= _endpoint
->timeout(timeout
);
49 if(endpoint
== _endpoint
)
51 return const_cast<EndpointI
*>(this);
55 return new EndpointI(endpoint
);
59 IceInternal::EndpointIPtr
60 EndpointI::connectionId(const string
& connectionId
) const
62 IceInternal::EndpointIPtr endpoint
= _endpoint
->connectionId(connectionId
);
63 if(endpoint
== _endpoint
)
65 return const_cast<EndpointI
*>(this);
69 return new EndpointI(endpoint
);
74 EndpointI::compress() const
76 return _endpoint
->compress();
79 IceInternal::EndpointIPtr
80 EndpointI::compress(bool compress
) const
82 IceInternal::EndpointIPtr endpoint
= _endpoint
->compress(compress
);
83 if(endpoint
== _endpoint
)
85 return const_cast<EndpointI
*>(this);
89 return new EndpointI(endpoint
);
94 EndpointI::datagram() const
96 return _endpoint
->datagram();
100 EndpointI::secure() const
102 return _endpoint
->secure();
105 IceInternal::TransceiverPtr
106 EndpointI::transceiver(IceInternal::EndpointIPtr
& endpoint
) const
108 IceInternal::EndpointIPtr endpt
= _endpoint
;
109 IceInternal::TransceiverPtr transceiver
= _endpoint
->transceiver(endpt
);
110 if(endpt
== _endpoint
)
112 endpoint
= const_cast<EndpointI
*>(this);
116 endpoint
= new EndpointI(endpoint
);
121 return new Transceiver(transceiver
);
129 vector
<IceInternal::ConnectorPtr
>
130 EndpointI::connectors() const
132 _configuration
->checkConnectorsException();
133 vector
<IceInternal::ConnectorPtr
> c
= _endpoint
->connectors();
134 for(vector
<IceInternal::ConnectorPtr
>::iterator p
= c
.begin(); p
!= c
.end(); ++p
)
136 *p
= new Connector(*p
);
142 EndpointI::connectors_async(const IceInternal::EndpointI_connectorsPtr
& cb
) const
144 class Callback
: public IceInternal::EndpointI_connectors
148 Callback(const IceInternal::EndpointI_connectorsPtr
& callback
) : _callback(callback
)
153 connectors(const vector
<IceInternal::ConnectorPtr
>& connectors
)
155 vector
<IceInternal::ConnectorPtr
> c
;
156 for(vector
<IceInternal::ConnectorPtr
>::const_iterator p
= connectors
.begin(); p
!= connectors
.end(); ++p
)
158 c
.push_back(new Connector(*p
));
160 _callback
->connectors(c
);
164 exception(const Ice::LocalException
& ex
)
166 _callback
->exception(ex
);
171 IceInternal::EndpointI_connectorsPtr _callback
;
176 _configuration
->checkConnectorsException();
177 _endpoint
->connectors_async(new Callback(cb
));
179 catch(const Ice::LocalException
& ex
)
185 IceInternal::AcceptorPtr
186 EndpointI::acceptor(IceInternal::EndpointIPtr
& endpoint
, const string
& adapterName
) const
188 IceInternal::AcceptorPtr p
= new Acceptor(_endpoint
->acceptor(endpoint
, adapterName
));
189 endpoint
= new EndpointI(endpoint
);
193 vector
<IceInternal::EndpointIPtr
>
194 EndpointI::expand() const
196 vector
<IceInternal::EndpointIPtr
> e
= _endpoint
->expand();
197 for(vector
<IceInternal::EndpointIPtr
>::iterator p
= e
.begin(); p
!= e
.end(); ++p
)
199 *p
= (*p
== _endpoint
) ? const_cast<EndpointI
*>(this) : new EndpointI(*p
);
205 EndpointI::equivalent(const IceInternal::EndpointIPtr
& endpoint
) const
207 const EndpointI
* testEndpointI
= dynamic_cast<const EndpointI
*>(endpoint
.get());
212 return testEndpointI
->_endpoint
->equivalent(_endpoint
);
216 EndpointI::toString() const
218 return "test-" + _endpoint
->toString();
222 EndpointI::getInfo() const
224 return _endpoint
->getInfo();
228 EndpointI::operator==(const Ice::LocalObject
& r
) const
230 const EndpointI
* p
= dynamic_cast<const EndpointI
*>(&r
);
242 return *p
->_endpoint
== *_endpoint
;
246 EndpointI::operator<(const Ice::LocalObject
& r
) const
248 const EndpointI
* p
= dynamic_cast<const EndpointI
*>(&r
);
251 const IceInternal::EndpointI
* e
= dynamic_cast<const IceInternal::EndpointI
*>(&r
);
256 return type() < e
->type();
264 return *p
->_endpoint
< *_endpoint
;
268 EndpointI::hashInit() const
270 return _endpoint
->ice_getHash();