summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/IPEndpointI.h
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2014-03-19 12:45:55 -0700
committerMark Spruiell <mes@zeroc.com>2014-03-19 12:45:55 -0700
commitcdcffbcc3c3c052afdeb772ff0167e7a90b525bb (patch)
tree4f16ee41ef7d33394c44e9db81e4d6cd89908250 /cpp/src/Ice/IPEndpointI.h
parentfixing testicedist.py for 5487 (diff)
downloadice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.bz2
ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.xz
ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.zip
merging javascript branch
Diffstat (limited to 'cpp/src/Ice/IPEndpointI.h')
-rw-r--r--cpp/src/Ice/IPEndpointI.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/cpp/src/Ice/IPEndpointI.h b/cpp/src/Ice/IPEndpointI.h
new file mode 100644
index 00000000000..3aeda2d5a0c
--- /dev/null
+++ b/cpp/src/Ice/IPEndpointI.h
@@ -0,0 +1,159 @@
+// **********************************************************************
+//
+// 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 <IceUtil/Config.h>
+#include <IceUtil/Shared.h>
+#include <IceUtil/Thread.h>
+#include <IceUtil/Monitor.h>
+#include <Ice/IPEndpointIF.h>
+#include <Ice/EndpointI.h>
+#include <Ice/Network.h>
+#include <Ice/ProtocolInstanceF.h>
+#include <Ice/ObserverHelper.h>
+
+#ifndef ICE_OS_WINRT
+# include <deque>
+#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<ConnectorPtr> connectors(Ice::EndpointSelectionType) const;
+ virtual void connectors_async(Ice::EndpointSelectionType, const EndpointI_connectorsPtr&) const;
+ virtual std::vector<EndpointIPtr> 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<ConnectorPtr> connectors(const std::vector<Address>&, 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<std::string>&, 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<IceUtil::Mutex>
+#else
+class ICE_API EndpointHostResolver : public IceUtil::Shared
+#endif
+{
+public:
+
+ EndpointHostResolver(const InstancePtr&);
+
+ std::vector<ConnectorPtr> 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<ResolveEntry> _queue;
+ ObserverHelperT<Ice::Instrumentation::ThreadObserver> _observer;
+#else
+ const InstancePtr _instance;
+#endif
+};
+
+inline bool operator==(const IPEndpointI& l, const IPEndpointI& r)
+{
+ return static_cast<const ::Ice::LocalObject&>(l) == static_cast<const ::Ice::LocalObject&>(r);
+}
+
+inline bool operator<(const IPEndpointI& l, const IPEndpointI& r)
+{
+ return static_cast<const ::Ice::LocalObject&>(l) < static_cast<const ::Ice::LocalObject&>(r);
+}
+
+}
+
+#endif