15 #ifndef CLIENTBASE_H__
16 #define CLIENTBASE_H__
22 #include "taghandler.h"
23 #include "statisticshandler.h"
24 #include "tlshandler.h"
25 #include "compressiondatahandler.h"
26 #include "connectiondatahandler.h"
39 class MessageSessionHandler;
40 class ConnectionListener;
44 class PresenceHandler;
45 class SubscriptionHandler;
46 class MUCInvitationHandler;
50 class CompressionBase;
75 ClientBase(
const std::string& ns,
const std::string& server,
int port = -1 );
86 ClientBase(
const std::string& ns,
const std::string& password,
87 const std::string& server,
int port = -1 );
106 bool connect(
bool block =
true );
121 virtual const std::string&
username()
const {
return m_jid.username(); }
130 const JID&
jid() {
return m_authzid ? m_authzid : m_jid; }
174 void setServer(
const std::string &server );
180 void setPassword(
const std::string &password ) { m_password = password; }
186 const std::string&
server()
const {
return m_server; }
192 bool sasl()
const {
return m_sasl; }
211 int port()
const {
return m_port; }
217 virtual const std::string&
password()
const {
return m_password; }
230 const std::string getID();
239 virtual void send(
Tag *tag );
257 const std::string&
xmlLang()
const {
return m_xmllang; }
265 void setXmlLang(
const std::string& xmllang ) { m_xmllang = xmllang; }
297 void setEncryptionImpl(
TLSBase *tb );
319 void whitespacePing();
327 void xmppPing(
const JID& to );
362 void registerIqHandler(
IqHandler *ih,
const std::string& xmlns );
372 void trackID(
IqHandler *ih,
const std::string&
id,
int context );
442 void registerTagHandler(
TagHandler *th,
const std::string& tag,
443 const std::string& xmlns );
463 void removeIqHandler(
const std::string& xmlns );
491 void removeTagHandler(
TagHandler *th,
const std::string& tag,
492 const std::string& xmlns );
497 void removeStatisticsHandler();
517 void setClientCert(
const std::string& clientKey,
const std::string& clientCerts );
554 const std::string streamErrorText(
const std::string& lang =
"default" )
const;
594 void removeMUCInvitationHandler();
597 virtual void handleTag(
Tag *tag );
600 virtual void handleCompressedData(
const std::string& data );
603 virtual void handleDecompressedData(
const std::string& data );
606 virtual void handleReceivedData(
const ConnectionBase* connection,
const std::string& data );
615 virtual void handleEncryptedData(
const TLSBase *base,
const std::string& data );
618 virtual void handleDecryptedData(
const TLSBase *base,
const std::string& data );
621 virtual void handleHandshakeResult(
const TLSBase *base,
bool success,
CertInfo &certinfo );
626 bool notifyOnTLSConnect(
const CertInfo& info );
627 void notifyOnConnect();
631 void setAuthed(
bool authed ) { m_authed = authed; }
633 virtual bool checkStreamVersion(
const std::string& version );
636 void processSASLChallenge(
const std::string& challenge );
637 void processSASLError( Stanza *stanza );
643 ConnectionBase *m_connection;
644 TLSBase *m_encryption;
645 CompressionBase *m_compression;
648 std::string m_clientCerts;
649 std::string m_clientKey;
650 std::string m_namespace;
651 std::string m_password;
652 std::string m_xmllang;
653 std::string m_server;
655 bool m_compressionActive;
656 bool m_encryptionActive;
664 int m_availableSaslMechs;
667 ClientBase(
const ClientBase& );
668 ClientBase& operator=(
const ClientBase& );
670 virtual void handleStartNode() = 0;
671 virtual bool handleNormalNode( Stanza *stanza ) = 0;
672 virtual void rosterFilled() = 0;
673 virtual void cleanup() {}
674 void parse(
const std::string& data );
676 void handleStreamError( Stanza *stanza );
677 TLSBase* getDefaultEncryption();
678 CompressionBase* getDefaultCompression();
680 void notifyIqHandlers( Stanza *stanza );
681 void notifyMessageHandlers( Stanza *stanza );
682 void notifyPresenceHandlers( Stanza *stanza );
683 void notifySubscriptionHandlers( Stanza *stanza );
684 void notifyTagHandlers( Tag *tag );
686 void send(
const std::string& xml );
694 struct TagHandlerStruct
701 struct JidPresHandlerStruct
707 typedef std::list<ConnectionListener*> ConnectionListenerList;
708 typedef std::map<const std::string, IqHandler*> IqHandlerMap;
709 typedef std::map<const std::string, TrackStruct> IqTrackMap;
710 typedef std::map<const std::string, MessageHandler*> MessageHandlerMap;
711 typedef std::list<MessageSession*> MessageSessionList;
712 typedef std::list<MessageHandler*> MessageHandlerList;
713 typedef std::list<PresenceHandler*> PresenceHandlerList;
714 typedef std::list<JidPresHandlerStruct> PresenceJidHandlerList;
715 typedef std::list<SubscriptionHandler*> SubscriptionHandlerList;
716 typedef std::list<TagHandlerStruct> TagHandlerList;
718 ConnectionListenerList m_connectionListeners;
719 IqHandlerMap m_iqNSHandlers;
720 IqTrackMap m_iqIDHandlers;
721 MessageSessionList m_messageSessions;
722 MessageHandlerList m_messageHandlers;
723 PresenceHandlerList m_presenceHandlers;
724 PresenceJidHandlerList m_presenceJidHandlers;
725 SubscriptionHandlerList m_subscriptionHandlers;
726 TagHandlerList m_tagHandlers;
728 StatisticsHandler *m_statisticsHandler;
729 MUCInvitationHandler *m_mucInvitationHandler;
730 MessageSessionHandler *m_messageSessionHandlerChat;
731 MessageSessionHandler *m_messageSessionHandlerGroupchat;
732 MessageSessionHandler *m_messageSessionHandlerHeadline;
733 MessageSessionHandler *m_messageSessionHandlerNormal;
736 LogSink m_logInstance;
741 std::string m_streamErrorCData;
742 Tag *m_streamErrorAppCondition;
744 StatisticsStruct m_stats;
749 bool m_autoMessageSession;
755 #endif // CLIENTBASE_H__