// ********************************************************************** // // Copyright (c) 2003-2014 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_IP_ENDPOINT_I_H #define ICE_IP_ENDPOINT_I_H #include #include #include #include #include #include #include #include #include #ifndef ICE_OS_WINRT # include #endif namespace IceInternal { class ICE_API IPEndpointInfoI : public Ice::IPEndpointInfo { public: IPEndpointInfoI(const EndpointIPtr&); virtual ~IPEndpointInfoI(); virtual Ice::Short type() const; virtual bool datagram() const; virtual bool secure() const; private: const EndpointIPtr _endpoint; }; class ICE_API IPEndpointI : public EndpointI { public: virtual Ice::EndpointInfoPtr getInfo() const; virtual Ice::Short type() const; virtual const std::string& protocol() const; virtual void streamWrite(BasicStream*) const; virtual const std::string& connectionId() const; virtual EndpointIPtr connectionId(const ::std::string&) const; virtual std::vector connectors(Ice::EndpointSelectionType) const; virtual void connectors_async(Ice::EndpointSelectionType, const EndpointI_connectorsPtr&) const; virtual std::vector expand() const; virtual bool equivalent(const EndpointIPtr&) const; virtual ::Ice::Int hash() const; virtual std::string options() const; virtual bool operator==(const Ice::LocalObject&) const; virtual bool operator<(const Ice::LocalObject&) const; virtual std::vector connectors(const std::vector
&, const NetworkProxyPtr&) const; const std::string& host() const; int port() const; virtual void streamWriteImpl(BasicStream*) const; virtual void hashInit(Ice::Int&) const; virtual void fillEndpointInfo(Ice::IPEndpointInfo*) const; using EndpointI::connectors; using EndpointI::connectionId; void initWithOptions(std::vector&, bool); protected: friend class EndpointHostResolver; virtual bool checkOption(const std::string&, const std::string&, const std::string&); virtual ConnectorPtr createConnector(const Address& address, const NetworkProxyPtr&) const = 0; virtual IPEndpointIPtr createEndpoint(const std::string&, int, const std::string&) const = 0; IPEndpointI(const ProtocolInstancePtr&, const std::string&, int, const std::string&); IPEndpointI(const ProtocolInstancePtr&); IPEndpointI(const ProtocolInstancePtr&, BasicStream*); const ProtocolInstancePtr _instance; const std::string _host; const int _port; const std::string _connectionId; private: mutable bool _hashInitialized; mutable Ice::Int _hashValue; }; #ifndef ICE_OS_WINRT class ICE_API EndpointHostResolver : public IceUtil::Thread, public IceUtil::Monitor #else class ICE_API EndpointHostResolver : public IceUtil::Shared #endif { public: EndpointHostResolver(const InstancePtr&); std::vector resolve(const std::string&, int, Ice::EndpointSelectionType, const IPEndpointIPtr&); void resolve(const std::string&, int, Ice::EndpointSelectionType, const IPEndpointIPtr&, const EndpointI_connectorsPtr&); void destroy(); virtual void run(); void updateObserver(); private: #ifndef ICE_OS_WINRT struct ResolveEntry { std::string host; int port; Ice::EndpointSelectionType selType; IPEndpointIPtr endpoint; EndpointI_connectorsPtr callback; Ice::Instrumentation::ObserverPtr observer; }; const InstancePtr _instance; const IceInternal::ProtocolSupport _protocol; const bool _preferIPv6; bool _destroyed; std::deque _queue; ObserverHelperT _observer; #else const InstancePtr _instance; #endif }; inline bool operator==(const IPEndpointI& l, const IPEndpointI& r) { return static_cast(l) == static_cast(r); } inline bool operator<(const IPEndpointI& l, const IPEndpointI& r) { return static_cast(l) < static_cast(r); } } #endif