15 #ifndef CLIENTBASE_H__ 16 #define CLIENTBASE_H__ 20 #include "eventdispatcher.h" 21 #include "iqhandler.h" 25 #include "taghandler.h" 26 #include "statisticshandler.h" 27 #include "tlshandler.h" 28 #include "compressiondatahandler.h" 29 #include "connectiondatahandler.h" 31 #include "atomicrefcount.h" 37 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) 39 #define SECURITY_WIN32 54 class MessageSessionHandler;
55 class ConnectionListener;
58 class PresenceHandler;
59 class SubscriptionHandler;
60 class MUCInvitationHandler;
64 class CompressionBase;
65 class StanzaExtensionFactory;
92 ClientBase(
const std::string& ns,
const std::string& server,
int port = -1 );
103 ClientBase(
const std::string& ns,
const std::string& password,
104 const std::string& server,
int port = -1 );
123 bool connect(
bool block =
true );
138 virtual const std::string&
username()
const {
return m_jid.username(); }
147 const JID&
jid() {
return m_authzid ? m_authzid : m_jid; }
184 void setServer(
const std::string &server );
190 void setPassword(
const std::string &password ) { m_password = password; }
196 const std::string&
server()
const {
return m_server; }
202 bool sasl()
const {
return m_sasl; }
221 int port()
const {
return m_port; }
227 virtual const std::string&
password()
const {
return m_password; }
240 const std::string getID();
249 void send(
Tag* tag );
260 void send(
IQ& iq,
IqHandler* ih,
int context,
bool del =
false );
266 void send(
const IQ& iq );
272 void send(
const Message& msg );
302 const std::string&
xmlLang()
const {
return m_xmllang; }
310 void setXmlLang(
const std::string& xmllang ) { m_xmllang = xmllang; }
342 void setEncryptionImpl(
TLSBase* tb );
364 void whitespacePing();
391 void setAuthcid(
const std::string& authcid ) { m_authcid = authcid; }
416 bool removeStanzaExtension(
int ext );
433 void registerIqHandler(
IqHandler* ih,
int exttype );
503 void registerTagHandler(
TagHandler* th,
const std::string& tag,
504 const std::string& xmlns );
527 void removeIqHandler(
IqHandler* ih,
int exttype );
555 void removeTagHandler(
TagHandler* th,
const std::string& tag,
556 const std::string& xmlns );
561 void removeStatisticsHandler();
581 void setClientCert(
const std::string& clientKey,
const std::string& clientCerts );
618 const std::string& streamErrorText(
const std::string& lang =
"default" )
const;
658 void removeMUCInvitationHandler();
674 bool removePresenceExtension(
int type );
692 virtual void handleTag(
Tag* tag );
695 virtual void handleCompressedData(
const std::string& data );
698 virtual void handleDecompressedData(
const std::string& data );
701 virtual void handleReceivedData(
const ConnectionBase* connection,
const std::string& data );
710 virtual void handleEncryptedData(
const TLSBase* base,
const std::string& data );
713 virtual void handleDecryptedData(
const TLSBase* base,
const std::string& data );
716 virtual void handleHandshakeResult(
const TLSBase* base,
bool success,
CertInfo &certinfo );
719 #ifdef CLIENTBASE_TEST 727 void notifyOnResourceBindError(
const Error* error );
733 void notifyOnResourceBind(
const std::string& resource );
740 void notifyOnSessionCreateError(
const Error* error );
749 bool notifyOnTLSConnect(
const CertInfo& info );
754 void notifyOnConnect();
793 virtual bool checkStreamVersion(
const std::string& version );
808 bool processSASLSuccess(
const std::string& payload );
814 void processSASLChallenge(
const std::string& challenge );
820 void processSASLError(
Tag* tag );
844 void send(
const std::string& xml );
854 void checkQueue(
int handled,
bool resend );
866 std::string getRandom();
925 #ifdef CLIENTBASE_TEST 949 virtual const std::string& filterString()
const;
959 virtual Tag* tag()
const 980 virtual void handleStartNode(
const Tag* start ) = 0;
988 virtual bool handleNormalNode(
Tag* tag ) = 0;
989 virtual void rosterFilled() = 0;
990 virtual void cleanup() {}
991 virtual void handleIqIDForward(
const IQ& iq,
int context ) { (void) iq; (void) context; }
992 void send(
Tag* tag,
bool queue,
bool del );
993 std::string hmac(
const std::string& str,
const std::string& key );
994 std::string hi(
const std::string& str,
const std::string& key,
int iter );
996 void parse(
const std::string& data );
998 void handleStreamError(
Tag* tag );
999 TLSBase* getDefaultEncryption();
1002 void notifyIqHandlers(
IQ& iq );
1003 void notifyMessageHandlers(
Message& msg );
1004 void notifyPresenceHandlers(
Presence& presence );
1006 void notifyTagHandlers(
Tag* tag );
1008 void addFrom(
Tag* tag );
1009 void addNamespace(
Tag* tag );
1012 virtual bool handleIq(
const IQ& iq );
1015 virtual void handleIqID(
const IQ& iq,
int context );
1024 struct TagHandlerStruct
1031 struct JidPresHandlerStruct
1042 typedef std::list<ConnectionListener*> ConnectionListenerList;
1043 typedef std::multimap<const std::string, IqHandler*> IqHandlerMapXmlns;
1044 typedef std::multimap<const int, IqHandler*> IqHandlerMap;
1045 typedef std::map<const std::string, TrackStruct> IqTrackMap;
1046 typedef std::map<const std::string, MessageHandler*> MessageHandlerMap;
1047 typedef std::map<int, Tag*> SMQueueMap;
1048 typedef std::list<MessageSession*> MessageSessionList;
1049 typedef std::list<MessageHandler*> MessageHandlerList;
1050 typedef std::list<PresenceHandler*> PresenceHandlerList;
1051 typedef std::list<JidPresHandlerStruct> PresenceJidHandlerList;
1052 typedef std::list<SubscriptionHandler*> SubscriptionHandlerList;
1053 typedef std::list<TagHandlerStruct> TagHandlerList;
1055 ConnectionListenerList m_connectionListeners;
1056 IqHandlerMapXmlns m_iqNSHandlers;
1057 IqHandlerMap m_iqExtHandlers;
1058 IqTrackMap m_iqIDHandlers;
1059 SMQueueMap m_smQueue;
1060 MessageSessionList m_messageSessions;
1061 MessageHandlerList m_messageHandlers;
1062 PresenceHandlerList m_presenceHandlers;
1063 PresenceJidHandlerList m_presenceJidHandlers;
1064 SubscriptionHandlerList m_subscriptionHandlers;
1065 TagHandlerList m_tagHandlers;
1086 std::string m_streamErrorCData;
1087 Tag* m_streamErrorAppCondition;
1093 std::string m_clientFirstMessageBare;
1094 std::string m_serverSignature;
1095 std::string m_gs2Header;
1096 std::string m_ntlmDomain;
1097 bool m_customConnection;
1099 std::string m_uniqueBaseId;
1104 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ ) 1105 CredHandle m_credHandle;
1106 CtxtHandle m_ctxtHandle;
1113 #endif // CLIENTBASE_H__ An abstract base class for a connection.
std::list< const StanzaExtension * > StanzaExtensionList
TLSBase * encryptionImpl() const
ConnectionBase * m_connection
An abstraction of a message session between any two entities.
A virtual interface which can be reimplemented to receive incoming subscription stanzas.
std::list< std::string > StringList
const std::string XMLNS_XMPP_PING
An base class for event handlers.
CompressionBase * compressionImpl() const
An abstraction of an IQ stanza.
This is an abstract base class for stream compression implementations.
This class implements an XML parser.
A simple implementation of mutex as a wrapper around a pthread mutex or a win32 critical section...
void setAuthzid(const JID &authzid)
std::list< Tag * > TagList
GLOOX_DEPRECATED std::string m_selectedResource
A virtual interface which can be reimplemented to receive incoming message sessions.
const std::string & server() const
A stanza error abstraction implemented as a StanzaExtension.
An abstraction of a presence stanza.
This is an abstract base class to receive events from a ConnectionBase-derived object.
const std::string & streamErrorCData() const
A simple implementation of a thread safe 32-bit reference count. Native functions are used where poss...
void setCACerts(const StringList &cacerts)
virtual const std::string & password() const
An abstraction of a message stanza.
void setAuthFailure(AuthenticationError e)
The namespace for the gloox library.
A virtual interface which can be reimplemented to receive incoming message stanzas.
void setPassword(const std::string &password)
This class abstracts a stanza extension, which is usually an XML child element in a specific namespac...
StanzaExtensionList m_presenceExtensions
A virtual interface which can be reimplemented to receive non-XMPP Core stanzas.
CompressionBase * m_compression
This class implements Jabber/XMPP roster handling in the jabber:iq:roster namespace.
A virtual interface which can be reimplemented to receive presence stanzas.
const Tag * streamErrorAppCondition() const
void setXmlLang(const std::string &xmllang)
std::map< std::string, std::string > StringMap
A Factory that creates StanzaExtensions from Tags.
void setSASLMechanisms(int mechanisms)
const StanzaExtensionList & presenceExtensions() const
ConnectionBase * connectionImpl() const
std::string m_clientCerts
A virtual interface which can be reimplemented to receive IQ stanzas.
A handler that can be used to receive invitations to MUC rooms.
This class implements XEP-0030 (Service Discovery) and XEP-0092 (Software Version).
void setNTLMDomain(const std::string &domain)
void setCompression(bool compression)
An abstraction of a subscription stanza.
void setTls(TLSPolicy tls)
void setAuthed(bool authed)
virtual const std::string & username() const
An abstract base class for TLS implementations.
virtual Disco * disco() const
void setAuthcid(const std::string &authcid)
AuthenticationError authError() const
An implementation of log sink and source.
Derived classes can be registered as ConnectionListeners with the Client.
An interface that allows for interacting with TLS implementations derived from TLSBase.
An abstract base class used to receive de/compressed data from a CompressionBase-derived object...
This is the common base class for a Jabber/XMPP Client and a Jabber Component.
This is an abstraction of an XML element.
A virtual interface which can be reimplemented to receive connection statistics.
StreamError streamError() const
const std::string & xmlLang() const