diff options
Diffstat (limited to 'Swiften/Session')
m--------- | Swiften | 0 | ||||
-rw-r--r-- | Swiften/Session/BasicSessionStream.cpp | 140 | ||||
-rw-r--r-- | Swiften/Session/BasicSessionStream.h | 75 | ||||
-rw-r--r-- | Swiften/Session/Session.cpp | 82 | ||||
-rw-r--r-- | Swiften/Session/Session.h | 105 | ||||
-rw-r--r-- | Swiften/Session/SessionStream.cpp | 8 | ||||
-rw-r--r-- | Swiften/Session/SessionStream.h | 69 | ||||
-rw-r--r-- | Swiften/Session/SessionTracer.h | 29 |
8 files changed, 0 insertions, 508 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())); -} - -}; diff --git a/Swiften/Session/BasicSessionStream.h b/Swiften/Session/BasicSessionStream.h deleted file mode 100644 index 8618458..0000000 --- a/Swiften/Session/BasicSessionStream.h +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once - -#include <boost/shared_ptr.hpp> -#include <boost/enable_shared_from_this.hpp> - -#include "Swiften/Network/Connection.h" -#include "Swiften/Session/SessionStream.h" - -namespace Swift { - class TLSLayerFactory; - class TLSLayer; - class TimerFactory; - class WhitespacePingLayer; - class PayloadParserFactoryCollection; - class PayloadSerializerCollection; - class StreamStack; - class XMPPLayer; - class ConnectionLayer; - class CompressionLayer; - - class BasicSessionStream : - public SessionStream, - public boost::enable_shared_from_this<BasicSessionStream> { - public: - BasicSessionStream( - boost::shared_ptr<Connection> connection, - PayloadParserFactoryCollection* payloadParserFactories, - PayloadSerializerCollection* payloadSerializers, - TLSLayerFactory* tlsLayerFactory, - TimerFactory* whitespacePingLayerFactory - ); - ~BasicSessionStream(); - - void initialize(); - - virtual bool isAvailable(); - - virtual void writeHeader(const ProtocolHeader& header); - virtual void writeElement(boost::shared_ptr<Element>); - virtual void writeFooter(); - - virtual void addZLibCompression(); - - virtual bool supportsTLSEncryption(); - virtual void addTLSEncryption(); - - virtual void setWhitespacePingEnabled(bool); - - virtual void resetXMPPParser(); - - private: - void handleConnectionError(const boost::optional<Connection::Error>& error); - void handleXMPPError(); - void handleTLSConnected(); - void handleTLSError(); - void handleStreamStartReceived(const ProtocolHeader&); - void handleElementReceived(boost::shared_ptr<Element>); - void handleDataRead(const ByteArray& data); - void handleDataWritten(const ByteArray& data); - - private: - bool available; - boost::shared_ptr<Connection> connection; - PayloadParserFactoryCollection* payloadParserFactories; - PayloadSerializerCollection* payloadSerializers; - TLSLayerFactory* tlsLayerFactory; - TimerFactory* timerFactory; - boost::shared_ptr<XMPPLayer> xmppLayer; - boost::shared_ptr<ConnectionLayer> connectionLayer; - StreamStack* streamStack; - boost::shared_ptr<CompressionLayer> compressionLayer; - boost::shared_ptr<TLSLayer> tlsLayer; - boost::shared_ptr<WhitespacePingLayer> whitespacePingLayer; - }; -} diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp deleted file mode 100644 index 64456db..0000000 --- a/Swiften/Session/Session.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#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) : - connection(connection), - payloadParserFactories(payloadParserFactories), - payloadSerializers(payloadSerializers), - streamStack(0), - finishing(false) { -} - -Session::~Session() { - delete streamStack; -} - -void Session::startSession() { - initializeStreamStack(); - handleSessionStarted(); -} - -void Session::finishSession() { - finishing = true; - connection->disconnect(); - handleSessionFinished(boost::optional<SessionError>()); - finishing = false; - onSessionFinished(boost::optional<SessionError>()); -} - -void Session::finishSession(const SessionError& error) { - finishing = true; - connection->disconnect(); - handleSessionFinished(boost::optional<SessionError>(error)); - finishing = false; - onSessionFinished(boost::optional<SessionError>(error)); -} - -void Session::initializeStreamStack() { - xmppLayer = boost::shared_ptr<XMPPLayer>( - new XMPPLayer(payloadParserFactories, payloadSerializers)); - 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 = boost::shared_ptr<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(); - } -} - -} diff --git a/Swiften/Session/Session.h b/Swiften/Session/Session.h deleted file mode 100644 index d63254a..0000000 --- a/Swiften/Session/Session.h +++ /dev/null @@ -1,105 +0,0 @@ -#pragma once - -#include <boost/shared_ptr.hpp> -#include <boost/signal.hpp> -#include <boost/optional.hpp> -#include <boost/enable_shared_from_this.hpp> - -#include "Swiften/JID/JID.h" -#include "Swiften/Elements/Element.h" -#include "Swiften/Network/Connection.h" -#include "Swiften/StreamStack/ConnectionLayer.h" - -namespace Swift { - class ProtocolHeader; - class StreamStack; - class JID; - class Element; - class ByteArray; - class PayloadParserFactoryCollection; - class PayloadSerializerCollection; - class XMPPLayer; - - class Session : public boost::enable_shared_from_this<Session> { - public: - enum SessionError { - ConnectionReadError, - ConnectionWriteError, - XMLError, - AuthenticationFailedError, - NoSupportedAuthMechanismsError, - UnexpectedElementError, - ResourceBindError, - SessionStartError, - TLSError, - ClientCertificateLoadError, - ClientCertificateError - }; - - Session( - boost::shared_ptr<Connection> connection, - PayloadParserFactoryCollection* payloadParserFactories, - PayloadSerializerCollection* payloadSerializers); - virtual ~Session(); - - void startSession(); - void finishSession(); - - void sendElement(boost::shared_ptr<Element>); - - const JID& getLocalJID() const { - return localJID; - } - - const JID& getRemoteJID() const { - return remoteJID; - } - - boost::signal<void (boost::shared_ptr<Element>)> onElementReceived; - boost::signal<void (const boost::optional<SessionError>&)> onSessionFinished; - boost::signal<void (const ByteArray&)> onDataWritten; - boost::signal<void (const ByteArray&)> onDataRead; - - protected: - void setRemoteJID(const JID& j) { - remoteJID = j; - } - - void setLocalJID(const JID& j) { - localJID = j; - } - - void finishSession(const SessionError&); - - virtual void handleSessionStarted() {} - virtual void handleSessionFinished(const boost::optional<SessionError>&) {} - virtual void handleElement(boost::shared_ptr<Element>) = 0; - virtual void handleStreamStart(const ProtocolHeader&) = 0; - - void initializeStreamStack(); - - boost::shared_ptr<XMPPLayer> getXMPPLayer() const { - return xmppLayer; - } - - StreamStack* getStreamStack() const { - return streamStack; - } - - void setFinished(); - - private: - void handleDisconnected(const boost::optional<Connection::Error>& error); - - private: - JID localJID; - JID remoteJID; - boost::shared_ptr<Connection> connection; - PayloadParserFactoryCollection* payloadParserFactories; - PayloadSerializerCollection* payloadSerializers; - boost::shared_ptr<XMPPLayer> xmppLayer; - boost::shared_ptr<ConnectionLayer> connectionLayer; - StreamStack* streamStack; - bool finishing; - }; -} diff --git a/Swiften/Session/SessionStream.cpp b/Swiften/Session/SessionStream.cpp deleted file mode 100644 index 1d73d0f..0000000 --- a/Swiften/Session/SessionStream.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "Swiften/Session/SessionStream.h" - -namespace Swift { - -SessionStream::~SessionStream() { -} - -}; diff --git a/Swiften/Session/SessionStream.h b/Swiften/Session/SessionStream.h deleted file mode 100644 index 8c64ccf..0000000 --- a/Swiften/Session/SessionStream.h +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include <boost/signal.hpp> -#include <boost/shared_ptr.hpp> - -#include "Swiften/Elements/ProtocolHeader.h" -#include "Swiften/Elements/Element.h" -#include "Swiften/Base/Error.h" -#include "Swiften/TLS/PKCS12Certificate.h" - -namespace Swift { - class SessionStream { - public: - class Error : public Swift::Error { - public: - enum Type { - ParseError, - TLSError, - InvalidTLSCertificateError, - ConnectionReadError, - ConnectionWriteError - }; - - Error(Type type) : type(type) {} - - Type type; - }; - - virtual ~SessionStream(); - - virtual bool isAvailable() = 0; - - virtual void writeHeader(const ProtocolHeader& header) = 0; - virtual void writeFooter() = 0; - virtual void writeElement(boost::shared_ptr<Element>) = 0; - - virtual void addZLibCompression() = 0; - - virtual bool supportsTLSEncryption() = 0; - virtual void addTLSEncryption() = 0; - virtual void setWhitespacePingEnabled(bool enabled) = 0; - - virtual void resetXMPPParser() = 0; - - void setTLSCertificate(const PKCS12Certificate& cert) { - certificate = cert; - } - - virtual bool hasTLSCertificate() { - return !certificate.isNull(); - } - - - boost::signal<void (const ProtocolHeader&)> onStreamStartReceived; - boost::signal<void (boost::shared_ptr<Element>)> onElementReceived; - boost::signal<void (boost::shared_ptr<Error>)> onError; - boost::signal<void ()> onTLSEncrypted; - boost::signal<void (const String&)> onDataRead; - boost::signal<void (const String&)> onDataWritten; - - protected: - const PKCS12Certificate& getTLSCertificate() const { - return certificate; - } - - private: - PKCS12Certificate certificate; - }; -} diff --git a/Swiften/Session/SessionTracer.h b/Swiften/Session/SessionTracer.h deleted file mode 100644 index 29a07e0..0000000 --- a/Swiften/Session/SessionTracer.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include <iostream> - -#include "Swiften/Session/Session.h" -#include "Swiften/Base/String.h" -#include "Swiften/Base/ByteArray.h" - -namespace Swift { - class SessionTracer { - public: - SessionTracer(boost::shared_ptr<Session> session) : session(session) { - session->onDataRead.connect(boost::bind(&SessionTracer::printData, this, '<', _1)); - session->onDataWritten.connect(boost::bind(&SessionTracer::printData, this, '>', _1)); - } - - private: - void printData(char direction, const ByteArray& data) { - std::cerr << direction << direction << " " << session->getLocalJID() << " "; - for (unsigned int i = 0; i < 72 - session->getLocalJID().toString().getLength() - session->getRemoteJID().toString().getLength(); ++i) { - std::cerr << direction; - } - std::cerr << " " << session->getRemoteJID()<< " " << direction << direction << std::endl; - std::cerr << String(data.getData(), data.getSize()) << std::endl; - } - - boost::shared_ptr<Session> session; - }; -} |