summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-07-18 19:04:32 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-07-18 20:40:56 (GMT)
commit4457bc810a326de8d7895b3f2ff36ade5f1ae1a0 (patch)
tree1556c4b0190453897d4799d23b05e651b0bb8a32 /Swiften/LinkLocal/OutgoingLinkLocalSession.cpp
parent4052a822acd9da9dab6a8e2343c6170fb08dd8d6 (diff)
downloadswift-4457bc810a326de8d7895b3f2ff36ade5f1ae1a0.zip
swift-4457bc810a326de8d7895b3f2ff36ade5f1ae1a0.tar.bz2
Implement incoming linklocal connections.
Diffstat (limited to 'Swiften/LinkLocal/OutgoingLinkLocalSession.cpp')
-rw-r--r--Swiften/LinkLocal/OutgoingLinkLocalSession.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp b/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp
new file mode 100644
index 0000000..57f3154
--- /dev/null
+++ b/Swiften/LinkLocal/OutgoingLinkLocalSession.cpp
@@ -0,0 +1,74 @@
+#include "Swiften/LinkLocal/OutgoingLinkLocalSession.h"
+
+#include <boost/bind.hpp>
+
+#include "Swiften/Elements/ProtocolHeader.h"
+#include "Swiften/Network/Connection.h"
+#include "Swiften/StreamStack/StreamStack.h"
+#include "Swiften/LinkLocal/DNSSDService.h"
+#include "Swiften/StreamStack/ConnectionLayer.h"
+#include "Swiften/StreamStack/XMPPLayer.h"
+#include "Swiften/Elements/StreamFeatures.h"
+#include "Swiften/Elements/IQ.h"
+#include "Swiften/SASL/PLAINMessage.h"
+
+namespace Swift {
+
+OutgoingLinkLocalSession::OutgoingLinkLocalSession(
+ const JID& localJID,
+ const JID& remoteJID,
+ const String& hostname,
+ boost::shared_ptr<DNSSDService> resolver,
+ PayloadParserFactoryCollection* payloadParserFactories,
+ PayloadSerializerCollection* payloadSerializers,
+ ConnectionFactory* connectionFactory) :
+ LinkLocalSession(
+ localJID,
+ boost::shared_ptr<Connection>(),
+ payloadParserFactories,
+ payloadSerializers),
+ resolving_(false),
+ remoteJID_(remoteJID),
+ hostname_(hostname),
+ resolver_(resolver),
+ connectionFactory_(connectionFactory) {
+}
+
+void OutgoingLinkLocalSession::start() {
+ resolving_ = true;
+ //resolver_->onHostnameResolved.connect(boost::bind(&OutgoingLinkLocalSession::handleHostnameResolved, this, _1, _2));
+}
+
+#if 0
+void OutgoingLinkLocalSession::handleHostnameResolved(const String& hostname, const HostAddress&) {
+ if (resolving_) {
+ if (hostname == hostname_) {
+ boost::shared_ptr<Connection> connection = connectionFactory_->createConnection();
+ connection->onConnected.connect(boost::bind(&Session::handleConnected, shared_from_this()));
+ connection->onDisconnected.connect(boost::bind(&Session::handleDisconnected, shared_from_this(), _1));
+ connection_->connect(jid_.getDomain());
+ resolving_ = false;
+ boost::
+ }
+ }
+}
+#endif
+
+void OutgoingLinkLocalSession::handleStreamStart(const ProtocolHeader&) {
+ ProtocolHeader header;
+ header.setFrom(getLocalJID());
+ getXMPPLayer()->writeHeader(header);
+ setInitialized();
+}
+
+void OutgoingLinkLocalSession::handleElement(boost::shared_ptr<Element> element) {
+ if (isInitialized()) {
+ boost::shared_ptr<Stanza> stanza = boost::dynamic_pointer_cast<Stanza>(element);
+ if (stanza) {
+ onStanzaReceived(stanza);
+ }
+ }
+}
+
+
+}