diff options
| author | Remko Tronçon <git@el-tramo.be> | 2011-10-07 18:09:30 (GMT) |
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2011-10-07 18:09:30 (GMT) |
| commit | 6b98253a4127c975bd59b6a49ddb203337a8c32b (patch) | |
| tree | 546a24e1687f50e403215152d65e21971568f166 /Swiften/Session/Session.cpp | |
| parent | b2f58c4f3eb93e3a32062670df5eb6682aed273a (diff) | |
| download | swift-contrib-6b98253a4127c975bd59b6a49ddb203337a8c32b.zip swift-contrib-6b98253a4127c975bd59b6a49ddb203337a8c32b.tar.bz2 | |
Hoist XML parser factory creation out of Swiften.
Diffstat (limited to 'Swiften/Session/Session.cpp')
| -rw-r--r-- | Swiften/Session/Session.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp index e8b8308..661cb8d 100644 --- a/Swiften/Session/Session.cpp +++ b/Swiften/Session/Session.cpp @@ -1,101 +1,103 @@ /* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include <Swiften/Session/Session.h> #include <boost/bind.hpp> #include <Swiften/StreamStack/XMPPLayer.h> #include <Swiften/StreamStack/StreamStack.h> namespace Swift { Session::Session( boost::shared_ptr<Connection> connection, PayloadParserFactoryCollection* payloadParserFactories, - PayloadSerializerCollection* payloadSerializers) : + PayloadSerializerCollection* payloadSerializers, + XMLParserFactory* xmlParserFactory) : connection(connection), payloadParserFactories(payloadParserFactories), payloadSerializers(payloadSerializers), + xmlParserFactory(xmlParserFactory), xmppLayer(NULL), connectionLayer(NULL), streamStack(0), finishing(false) { } Session::~Session() { delete streamStack; delete connectionLayer; delete xmppLayer; } void Session::startSession() { initializeStreamStack(); handleSessionStarted(); } void Session::finishSession() { if (finishing) { return; } finishing = true; if (xmppLayer) { xmppLayer->writeFooter(); } connection->disconnect(); handleSessionFinished(boost::optional<SessionError>()); onSessionFinished(boost::optional<SessionError>()); } void Session::finishSession(const SessionError& error) { if (finishing) { return; } finishing = true; if (xmppLayer) { xmppLayer->writeFooter(); } connection->disconnect(); handleSessionFinished(boost::optional<SessionError>(error)); onSessionFinished(boost::optional<SessionError>(error)); } void Session::initializeStreamStack() { - xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, ClientStreamType); + xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, xmlParserFactory, ClientStreamType); xmppLayer->onStreamStart.connect( boost::bind(&Session::handleStreamStart, shared_from_this(), _1)); xmppLayer->onElement.connect(boost::bind(&Session::handleElement, shared_from_this(), _1)); xmppLayer->onError.connect( boost::bind(&Session::finishSession, shared_from_this(), XMLError)); xmppLayer->onDataRead.connect(boost::bind(boost::ref(onDataRead), _1)); xmppLayer->onWriteData.connect(boost::bind(boost::ref(onDataWritten), _1)); connection->onDisconnected.connect( boost::bind(&Session::handleDisconnected, shared_from_this(), _1)); connectionLayer = new ConnectionLayer(connection); streamStack = new StreamStack(xmppLayer, connectionLayer); } void Session::sendElement(boost::shared_ptr<Element> stanza) { xmppLayer->writeElement(stanza); } void Session::handleDisconnected(const boost::optional<Connection::Error>& connectionError) { if (connectionError) { switch (*connectionError) { case Connection::ReadError: finishSession(ConnectionReadError); break; case Connection::WriteError: finishSession(ConnectionWriteError); break; } } else { finishSession(); } } } |
Swift