summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Client/ClientSession.h')
-rw-r--r--Swiften/Client/ClientSession.h54
1 files changed, 11 insertions, 43 deletions
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index 50dae24..22e4a88 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -3,6 +3,7 @@
#include <boost/signal.hpp>
#include <boost/shared_ptr.hpp>
+#include "Swiften/Session/Session.h"
#include "Swiften/Base/String.h"
#include "Swiften/JID/JID.h"
#include "Swiften/Elements/Element.h"
@@ -21,7 +22,7 @@ namespace Swift {
class TLSLayer;
class WhitespacePingLayer;
- class ClientSession {
+ class ClientSession : public Session {
public:
enum State {
Initial,
@@ -34,21 +35,8 @@ namespace Swift {
BindingResource,
StartingSession,
SessionStarted,
- Error
- };
- enum SessionError {
- NoError,
- ConnectionReadError,
- ConnectionWriteError,
- XMLError,
- AuthenticationFailedError,
- NoSupportedAuthMechanismsError,
- UnexpectedElementError,
- ResourceBindError,
- SessionStartError,
- TLSError,
- ClientCertificateLoadError,
- ClientCertificateError
+ Error,
+ Finished
};
ClientSession(
@@ -57,13 +45,12 @@ namespace Swift {
TLSLayerFactory*,
PayloadParserFactoryCollection*,
PayloadSerializerCollection*);
- ~ClientSession();
State getState() const {
return state_;
}
- SessionError getError() const {
+ boost::optional<SessionError> getError() const {
return error_;
}
@@ -71,26 +58,18 @@ namespace Swift {
return jid_;
}
- void start();
- void stop();
-
void sendCredentials(const String& password);
- void sendElement(boost::shared_ptr<Element>);
void setCertificate(const PKCS12Certificate& certificate);
- protected:
- StreamStack* getStreamStack() const {
- return streamStack_;
- }
-
private:
- void initializeStreamStack();
void sendStreamHeader();
void sendSessionStart();
- void handleDisconnected(const boost::optional<Connection::Error>&);
- void handleElement(boost::shared_ptr<Element>);
- void handleStreamStart();
+ virtual void handleSessionStarted();
+ virtual void handleSessionFinished(const boost::optional<SessionError>& error);
+ virtual void handleElement(boost::shared_ptr<Element>);
+ virtual void handleStreamStart(const ProtocolHeader&);
+
void handleTLSConnected();
void handleTLSError();
@@ -98,26 +77,15 @@ namespace Swift {
bool checkState(State);
public:
- boost::signal<void ()> onSessionStarted;
- boost::signal<void (SessionError)> onError;
boost::signal<void ()> onNeedCredentials;
- boost::signal<void (boost::shared_ptr<Element>) > onElementReceived;
- boost::signal<void (const ByteArray&)> onDataWritten;
- boost::signal<void (const ByteArray&)> onDataRead;
private:
JID jid_;
TLSLayerFactory* tlsLayerFactory_;
- PayloadParserFactoryCollection* payloadParserFactories_;
- PayloadSerializerCollection* payloadSerializers_;
State state_;
- SessionError error_;
- boost::shared_ptr<Connection> connection_;
- boost::shared_ptr<XMPPLayer> xmppLayer_;
+ boost::optional<SessionError> error_;
boost::shared_ptr<TLSLayer> tlsLayer_;
- boost::shared_ptr<ConnectionLayer> connectionLayer_;
boost::shared_ptr<WhitespacePingLayer> whitespacePingLayer_;
- StreamStack* streamStack_;
bool needSessionStart_;
PKCS12Certificate certificate_;
};