summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-10-15 16:15:57 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-10-15 16:15:57 (GMT)
commit062658db9f46ef749eeec09c162e5afaf1524ab6 (patch)
tree12ea883e39c7d938310ea715c71127bc1801319c /Swiften/Component/ComponentConnector.h
parentf52aa93c3d6d5976b072d31f3d3336beb1596ece (diff)
downloadswift-062658db9f46ef749eeec09c162e5afaf1524ab6.zip
swift-062658db9f46ef749eeec09c162e5afaf1524ab6.tar.bz2
Added Component parser, serializer, element, and connector.
Diffstat (limited to 'Swiften/Component/ComponentConnector.h')
-rw-r--r--Swiften/Component/ComponentConnector.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/Swiften/Component/ComponentConnector.h b/Swiften/Component/ComponentConnector.h
new file mode 100644
index 0000000..a84d8ba
--- /dev/null
+++ b/Swiften/Component/ComponentConnector.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <deque>
+#include "Swiften/Base/boost_bsignals.h"
+#include <boost/shared_ptr.hpp>
+
+#include "Swiften/Network/Connection.h"
+#include "Swiften/Network/Timer.h"
+#include "Swiften/Network/HostAddressPort.h"
+#include "Swiften/Base/String.h"
+#include "Swiften/Network/DomainNameResolveError.h"
+
+namespace Swift {
+ class DomainNameAddressQuery;
+ class DomainNameResolver;
+ class ConnectionFactory;
+ class TimerFactory;
+
+ class ComponentConnector : public boost::bsignals::trackable, public boost::enable_shared_from_this<ComponentConnector> {
+ public:
+ typedef boost::shared_ptr<ComponentConnector> ref;
+
+ static ComponentConnector::ref create(const String& hostname, int port, DomainNameResolver* resolver, ConnectionFactory* connectionFactory, TimerFactory* timerFactory) {
+ return ComponentConnector::ref(new ComponentConnector(hostname, port, resolver, connectionFactory, timerFactory));
+ }
+
+ void setTimeoutMilliseconds(int milliseconds);
+
+ void start();
+ void stop();
+
+ boost::signal<void (boost::shared_ptr<Connection>)> onConnectFinished;
+
+ private:
+ ComponentConnector(const String& hostname, int port, DomainNameResolver*, ConnectionFactory*, TimerFactory*);
+
+ void handleAddressQueryResult(const std::vector<HostAddress>& address, boost::optional<DomainNameResolveError> error);
+ void tryNextAddress();
+ void tryConnect(const HostAddressPort& target);
+
+ void handleConnectionConnectFinished(bool error);
+ void finish(boost::shared_ptr<Connection>);
+ void handleTimeout();
+
+
+ private:
+ String hostname;
+ int port;
+ DomainNameResolver* resolver;
+ ConnectionFactory* connectionFactory;
+ TimerFactory* timerFactory;
+ int timeoutMilliseconds;
+ boost::shared_ptr<Timer> timer;
+ boost::shared_ptr<DomainNameAddressQuery> addressQuery;
+ std::deque<HostAddress> addressQueryResults;
+ boost::shared_ptr<Connection> currentConnection;
+ };
+};