diff options
Diffstat (limited to 'Swiften/Session/BasicSessionStream.cpp')
m--------- | Swiften | 0 | ||||
-rw-r--r-- | Swiften/Session/BasicSessionStream.cpp | 140 |
2 files changed, 0 insertions, 140 deletions
diff --git a/Swiften b/Swiften new file mode 160000 +Subproject 8213ba16d0043d2461f4b031c881d61dda5a38c diff --git a/Swiften/Session/BasicSessionStream.cpp b/Swiften/Session/BasicSessionStream.cpp deleted file mode 100644 index ed7f1eb..0000000 --- a/Swiften/Session/BasicSessionStream.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include "Swiften/Session/BasicSessionStream.h" - -#include <boost/bind.hpp> - -#include "Swiften/StreamStack/XMPPLayer.h" -#include "Swiften/StreamStack/StreamStack.h" -#include "Swiften/StreamStack/ConnectionLayer.h" -#include "Swiften/StreamStack/WhitespacePingLayer.h" -#include "Swiften/StreamStack/CompressionLayer.h" -#include "Swiften/StreamStack/TLSLayer.h" -#include "Swiften/StreamStack/TLSLayerFactory.h" - -namespace Swift { - -BasicSessionStream::BasicSessionStream(boost::shared_ptr<Connection> connection, PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, TLSLayerFactory* tlsLayerFactory, TimerFactory* timerFactory) : available(false), connection(connection), payloadParserFactories(payloadParserFactories), payloadSerializers(payloadSerializers), tlsLayerFactory(tlsLayerFactory), timerFactory(timerFactory) { -} - -void BasicSessionStream::initialize() { - xmppLayer = boost::shared_ptr<XMPPLayer>( - new XMPPLayer(payloadParserFactories, payloadSerializers)); - xmppLayer->onStreamStart.connect(boost::bind(&BasicSessionStream::handleStreamStartReceived, shared_from_this(), _1)); - xmppLayer->onElement.connect(boost::bind(&BasicSessionStream::handleElementReceived, shared_from_this(), _1)); - xmppLayer->onError.connect(boost::bind( - &BasicSessionStream::handleXMPPError, shared_from_this())); - xmppLayer->onDataRead.connect(boost::bind(&BasicSessionStream::handleDataRead, shared_from_this(), _1)); - xmppLayer->onWriteData.connect(boost::bind(&BasicSessionStream::handleDataWritten, shared_from_this(), _1)); - - connection->onDisconnected.connect(boost::bind(&BasicSessionStream::handleConnectionError, shared_from_this(), _1)); - connectionLayer = boost::shared_ptr<ConnectionLayer>( - new ConnectionLayer(connection)); - - streamStack = new StreamStack(xmppLayer, connectionLayer); - - available = true; -} - -BasicSessionStream::~BasicSessionStream() { - delete streamStack; -} - -void BasicSessionStream::writeHeader(const ProtocolHeader& header) { - assert(available); - xmppLayer->writeHeader(header); -} - -void BasicSessionStream::writeElement(boost::shared_ptr<Element> element) { - assert(available); - xmppLayer->writeElement(element); -} - -void BasicSessionStream::writeFooter() { - assert(available); - xmppLayer->writeFooter(); -} - -bool BasicSessionStream::isAvailable() { - return available; -} - -bool BasicSessionStream::supportsTLSEncryption() { - return tlsLayerFactory && tlsLayerFactory->canCreate(); -} - -void BasicSessionStream::addTLSEncryption() { - assert(available); - tlsLayer = tlsLayerFactory->createTLSLayer(); - if (hasTLSCertificate() && !tlsLayer->setClientCertificate(getTLSCertificate())) { - onError(boost::shared_ptr<Error>(new Error(Error::InvalidTLSCertificateError))); - } - else { - streamStack->addLayer(tlsLayer); - tlsLayer->onError.connect(boost::bind(&BasicSessionStream::handleTLSError, shared_from_this())); - tlsLayer->onConnected.connect(boost::bind(&BasicSessionStream::handleTLSConnected, shared_from_this())); - tlsLayer->connect(); - } -} - -void BasicSessionStream::addZLibCompression() { - boost::shared_ptr<CompressionLayer> compressionLayer(new CompressionLayer()); - streamStack->addLayer(compressionLayer); -} - -void BasicSessionStream::setWhitespacePingEnabled(bool enabled) { - if (enabled) { - if (!whitespacePingLayer) { - whitespacePingLayer = boost::shared_ptr<WhitespacePingLayer>(new WhitespacePingLayer(timerFactory)); - streamStack->addLayer(whitespacePingLayer); - } - whitespacePingLayer->setActive(); - } - else if (whitespacePingLayer) { - whitespacePingLayer->setInactive(); - } -} - -void BasicSessionStream::resetXMPPParser() { - xmppLayer->resetParser(); -} - -void BasicSessionStream::handleStreamStartReceived(const ProtocolHeader& header) { - onStreamStartReceived(header); -} - -void BasicSessionStream::handleElementReceived(boost::shared_ptr<Element> element) { - onElementReceived(element); -} - -void BasicSessionStream::handleXMPPError() { - available = false; - onError(boost::shared_ptr<Error>(new Error(Error::ParseError))); -} - -void BasicSessionStream::handleTLSConnected() { - onTLSEncrypted(); -} - -void BasicSessionStream::handleTLSError() { - available = false; - onError(boost::shared_ptr<Error>(new Error(Error::TLSError))); -} - -void BasicSessionStream::handleConnectionError(const boost::optional<Connection::Error>& error) { - available = false; - if (error == Connection::ReadError) { - onError(boost::shared_ptr<Error>(new Error(Error::ConnectionReadError))); - } - else { - onError(boost::shared_ptr<Error>(new Error(Error::ConnectionWriteError))); - } -} - -void BasicSessionStream::handleDataRead(const ByteArray& data) { - onDataRead(String(data.getData(), data.getSize())); -} - -void BasicSessionStream::handleDataWritten(const ByteArray& data) { - onDataWritten(String(data.getData(), data.getSize())); -} - -}; |