2010-05-27 20:04:31 -05:00
|
|
|
/*
|
|
|
|
* Copyright 2010, Pier Luigi Fiorini. All rights reserved.
|
|
|
|
* Distributed under the terms of the GPL v2 License.
|
|
|
|
*/
|
2010-05-28 15:41:58 -05:00
|
|
|
#ifndef _JABBER_HANDLER_H
|
|
|
|
#define _JABBER_HANDLER_H
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-30 13:57:19 -05:00
|
|
|
#include <Notification.h>
|
2010-05-29 23:26:36 -05:00
|
|
|
#include <Path.h>
|
2010-05-27 20:04:31 -05:00
|
|
|
#include <String.h>
|
|
|
|
|
2021-05-19 16:12:19 -05:00
|
|
|
#include <gloox/client.h>
|
|
|
|
#include <gloox/chatstatehandler.h>
|
|
|
|
#include <gloox/connectionlistener.h>
|
|
|
|
#include <gloox/connectiontcpclient.h>
|
|
|
|
#include <gloox/discohandler.h>
|
|
|
|
#include <gloox/disco.h>
|
|
|
|
#include <gloox/rostermanager.h>
|
|
|
|
#include <gloox/loghandler.h>
|
|
|
|
#include <gloox/logsink.h>
|
|
|
|
#include <gloox/messagehandler.h>
|
|
|
|
#include <gloox/messagesession.h>
|
|
|
|
#include <gloox/messagesessionhandler.h>
|
|
|
|
#include <gloox/messageeventhandler.h>
|
|
|
|
#include <gloox/message.h>
|
|
|
|
#include <gloox/presence.h>
|
|
|
|
#include <gloox/vcardhandler.h>
|
|
|
|
#include <gloox/vcardmanager.h>
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-29 23:26:36 -05:00
|
|
|
#include <CayaProtocol.h>
|
|
|
|
#include <CayaConstants.h>
|
|
|
|
|
|
|
|
class BList;
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-28 15:41:58 -05:00
|
|
|
class JabberHandler : public CayaProtocol, gloox::RosterListener, gloox::ConnectionListener,
|
2010-07-10 14:27:32 -05:00
|
|
|
gloox::LogHandler, gloox::MessageSessionHandler,
|
|
|
|
gloox::MessageHandler, gloox::MessageEventHandler,
|
|
|
|
gloox::ChatStateHandler, gloox::VCardHandler {
|
2010-05-27 20:04:31 -05:00
|
|
|
public:
|
2010-05-28 15:41:58 -05:00
|
|
|
JabberHandler();
|
|
|
|
virtual ~JabberHandler();
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-30 15:50:04 -05:00
|
|
|
// CayaProtocol inheritance
|
2010-05-27 20:04:31 -05:00
|
|
|
virtual status_t Init(CayaProtocolMessengerInterface*);
|
|
|
|
|
|
|
|
virtual status_t Process(BMessage* msg);
|
|
|
|
|
|
|
|
virtual status_t Shutdown();
|
|
|
|
|
Allow multiple protocols per add-on
Now an add-on can contain multiple protocols, and the protocol API has
changed. An add-on must now export protocol_count() and protocol_at(),
with the latter replacing protocol(). protocol_count() returning the
amount of protocols in a given add-on, and protocol_at(i) giving a
new CayaProtocol* "at" the given index.
CayaProtocol has also been changed, adding Signature(),
FriendlySignature(), Icon(), Path(), and SetPath(). The reasoning is
that different protocols (even within a single add-on) will have
different signatures and icons, so this data should be accessible from
the protocol itself.
CayaProtocolAddOn now has CountProtocols() and ProtocolAt(i), allowing
the accessing of multiple protocols. A CayaProtocolAddOn can be given a
default protocol index in the constructor, whose protocol will be
returned with Protocol(). Version() was also moved from CayaProtocol to
CayaProtocolAddOn.
2021-05-21 13:33:43 -05:00
|
|
|
virtual const char* Signature() const = 0;
|
|
|
|
virtual const char* FriendlySignature() const = 0;
|
|
|
|
|
|
|
|
virtual void SetPath(BPath path);
|
|
|
|
virtual BPath Path();
|
2010-05-27 20:04:31 -05:00
|
|
|
|
|
|
|
virtual status_t UpdateSettings(BMessage* msg);
|
|
|
|
|
|
|
|
virtual uint32 GetEncoding();
|
|
|
|
|
|
|
|
virtual CayaProtocolMessengerInterface*
|
|
|
|
MessengerInterface() const;
|
|
|
|
|
2010-05-30 15:50:04 -05:00
|
|
|
// Functions for gloox
|
|
|
|
gloox::Client* Client() const;
|
|
|
|
void HandleError(gloox::ConnectionError& e);
|
|
|
|
|
|
|
|
// Callbacks for protocols
|
2010-05-28 15:41:58 -05:00
|
|
|
virtual void OverrideSettings() = 0;
|
|
|
|
virtual BString ComposeJID() const = 0;
|
|
|
|
|
|
|
|
protected:
|
2010-05-27 20:04:31 -05:00
|
|
|
BString fUsername;
|
|
|
|
BString fPassword;
|
|
|
|
BString fServer;
|
|
|
|
BString fResource;
|
2010-05-30 07:17:59 -05:00
|
|
|
uint16 fPort;
|
2010-05-27 20:04:31 -05:00
|
|
|
|
Allow multiple protocols per add-on
Now an add-on can contain multiple protocols, and the protocol API has
changed. An add-on must now export protocol_count() and protocol_at(),
with the latter replacing protocol(). protocol_count() returning the
amount of protocols in a given add-on, and protocol_at(i) giving a
new CayaProtocol* "at" the given index.
CayaProtocol has also been changed, adding Signature(),
FriendlySignature(), Icon(), Path(), and SetPath(). The reasoning is
that different protocols (even within a single add-on) will have
different signatures and icons, so this data should be accessible from
the protocol itself.
CayaProtocolAddOn now has CountProtocols() and ProtocolAt(i), allowing
the accessing of multiple protocols. A CayaProtocolAddOn can be given a
default protocol index in the constructor, whose protocol will be
returned with Protocol(). Version() was also moved from CayaProtocol to
CayaProtocolAddOn.
2021-05-21 13:33:43 -05:00
|
|
|
BPath fPath;
|
|
|
|
|
2021-05-20 09:32:52 -05:00
|
|
|
BMessage _SettingsTemplate(const char* username, bool serverOption);
|
2010-05-28 15:41:58 -05:00
|
|
|
private:
|
2010-05-27 20:04:31 -05:00
|
|
|
CayaProtocolMessengerInterface*
|
|
|
|
fServerMessenger;
|
|
|
|
|
|
|
|
gloox::Client* fClient;
|
|
|
|
gloox::ConnectionTCPClient*
|
|
|
|
fConnection;
|
|
|
|
gloox::VCardManager* fVCardManager;
|
2010-07-10 14:27:32 -05:00
|
|
|
gloox::MessageSession* fSession;
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-30 07:17:59 -05:00
|
|
|
gloox::JID fJid;
|
2010-05-28 15:41:58 -05:00
|
|
|
thread_id fRecvThread;
|
|
|
|
|
2010-05-29 23:26:36 -05:00
|
|
|
BPath fCachePath;
|
|
|
|
BPath fAvatarCachePath;
|
|
|
|
BMessage fAvatarCache;
|
|
|
|
BList* fAvatars;
|
|
|
|
|
2010-05-30 07:30:47 -05:00
|
|
|
void _SendMessage(BMessage* msg);
|
|
|
|
|
2010-05-28 15:41:58 -05:00
|
|
|
void _MessageSent(const char* id, const char* subject,
|
2010-05-27 20:04:31 -05:00
|
|
|
const char* body);
|
2010-05-30 13:57:19 -05:00
|
|
|
|
|
|
|
void _Notify(notification_type type, const char* title, const char* message);
|
|
|
|
void _NotifyProgress(const char* title, const char* message, float progress);
|
2010-05-27 20:04:31 -05:00
|
|
|
|
2010-05-29 23:26:36 -05:00
|
|
|
status_t _SetupAvatarCache();
|
|
|
|
status_t _SaveAvatarCache();
|
|
|
|
void _CacheAvatar(const char* id, const char* binval, size_t length);
|
|
|
|
void _AvatarChanged(const char*id, const char* filename);
|
2010-05-30 07:30:47 -05:00
|
|
|
|
|
|
|
CayaStatus _GlooxStatusToCaya(gloox::Presence::PresenceType type);
|
2010-05-29 23:26:36 -05:00
|
|
|
|
2010-05-27 20:04:31 -05:00
|
|
|
virtual void onConnect();
|
|
|
|
virtual void onDisconnect(gloox::ConnectionError);
|
|
|
|
virtual bool onTLSConnect(const gloox::CertInfo&);
|
|
|
|
virtual void onResourceBindError(const gloox::Error*);
|
|
|
|
virtual void handleRoster(const gloox::Roster&);
|
2010-07-10 14:27:32 -05:00
|
|
|
virtual void handleMessageSession(gloox::MessageSession* session);
|
|
|
|
virtual void handleMessage(const gloox::Message& m, gloox::MessageSession*);
|
|
|
|
virtual void handleMessageEvent(const gloox::JID& from, gloox::MessageEventType event);
|
|
|
|
virtual void handleChatState(const gloox::JID& from, gloox::ChatStateType state);
|
|
|
|
|
2010-05-27 20:04:31 -05:00
|
|
|
virtual void handleItemAdded(const gloox::JID&);
|
|
|
|
virtual void handleItemSubscribed(const gloox::JID&);
|
|
|
|
virtual void handleItemUnsubscribed(const gloox::JID&);
|
|
|
|
virtual void handleItemRemoved(const gloox::JID&);
|
|
|
|
virtual void handleItemUpdated(const gloox::JID&);
|
|
|
|
virtual void handleRosterPresence(const gloox::RosterItem&,
|
|
|
|
const std::string&, gloox::Presence::PresenceType,
|
|
|
|
const std::string&);
|
|
|
|
virtual void handleSelfPresence(const gloox::RosterItem&, const std::string&,
|
|
|
|
gloox::Presence::PresenceType, const std::string&);
|
|
|
|
virtual bool handleSubscriptionRequest(const gloox::JID&, const std::string&);
|
|
|
|
virtual bool handleUnsubscriptionRequest(const gloox::JID&, const std::string&);
|
|
|
|
virtual void handleNonrosterPresence(const gloox::Presence&);
|
|
|
|
virtual void handleRosterError(const gloox::IQ&);
|
|
|
|
virtual void handleLog(gloox::LogLevel, gloox::LogArea, const std::string&);
|
|
|
|
virtual void handleVCard(const gloox::JID&, const gloox::VCard*);
|
|
|
|
virtual void handleVCardResult(gloox::VCardHandler::VCardContext,
|
|
|
|
const gloox::JID&,
|
|
|
|
gloox::StanzaError);
|
|
|
|
};
|
|
|
|
|
2010-05-28 15:41:58 -05:00
|
|
|
#endif // _JABBER_HANDLER_H
|