Chat-O-Matic/libs/libjabber/JabberHandler.h
2010-05-07 09:47:10 +00:00

172 lines
4.8 KiB
C++

/*
* Copyright 2002, The Olmeki Team.
* Distributed under the terms of the Olmeki License.
*/
#ifndef _JABBER_HANDLER_H
#define _JABBER_HANDLER_H
#include <list>
#include <String.h>
#include "ObjectList.h"
#include <expat.h>
#include "JabberAgent.h"
#include "JabberContact.h"
#include "JabberElement.h"
#include "JabberMessage.h"
#include "JabberPresence.h"
#include "JabberRegistration.h"
#include "JabberVCard.h"
#include "JabberPlug.h"
class VCardManager;
class JabberHandler {
public:
JabberHandler(const BString & name, JabberPlug*);
virtual ~JabberHandler();
void Dispose();
void LogOn();
void LogOff();
//void Register();
void Register(JabberRegistration * registration);
void Register(JabberAgent * agent);
BString GetName() const;
void SetHost(const BString & host);
void SetUsername(const BString & username);
void SetPassword(const BString & password);
void SetPort(int32 port);
void SetPriority(int32 priority);
void SetResource(const BString & resource);
void UpdateJid();
BString GetJid() const;
bool IsAuthorized();
void RemoveContact(const JabberContact * contact);
int32 ReceivedData(const char *,int32);
protected:
typedef BObjectList<JabberElement> ElementList;
typedef std::list<BString> StrList;
typedef BObjectList<JabberContact> RosterList;
typedef BObjectList<JabberAgent> AgentList;
bool SendMessage(JabberMessage & message);
void SetOwnNickname(const BString& nick);
bool StartComposingMessage(JabberContact * contact);
bool StopComposingMessage(JabberContact * contact);
void SetStatus(int32 status, const BString & message);
void TimeStamp(JabberMessage & message);
void AddContact(const BString & name, const BString & jid, const BString & group);
void AcceptSubscription(const BString & jid);
void UpdateRoster(JabberPresence * presence);
// The JabberHandler takes ownership of the contact
void UpdateRoster(JabberContact * contact);
// by xeD
RosterList* getRosterList(){ return fRoster; };
//Callbacks
virtual void Authorized();
virtual void Message(JabberMessage * message)=0;
virtual void Presence(JabberPresence * presence) =0;
virtual void Roster(RosterList * roster) =0;
virtual void Agents(AgentList * agents) =0;
virtual void Disconnected(const BString & reason) = 0;
virtual void SubscriptionRequest(JabberPresence * presence) = 0;
virtual void Registration(JabberRegistration * registration) = 0;
virtual void Unsubscribe(JabberPresence * presence) = 0;
virtual void OwnContactInfo(JabberContact* contact) = 0;
protected:
friend class VCardManager;
virtual void GotBuddyPhoto(const BString & jid, const BString & imagePath) = 0;
private:
enum ID {
AUTH = 0,
ROSTER = 2
};
BString fHost;
BString fUsername;
BString fJid;
BString fPassword;
int32 fPort;
BString fResource;
int32 fPriority;
ElementList* fElementStack;
StrList* fNsStack;
StrList* fTypeStack;
StrList* fFromStack;
RosterList* fRoster;
AgentList* fAgents;
int32 fSocket;
JabberPlug* fPlug;
XML_Parser fParser;
bool fAuthorized;
VCardManager* fVCardManager;
BString fCurrentPresenceId;
BString fLastAuthId;
int32 fIncrementalId;
//protected:
public:
//friend class VCardManager;
void RequestVCard(const BString & jid);
protected:
void Send(const BString & xml);
void Authorize();
bool BeginSession();
void EndSession();
void SendVersion();
void RequestRoster();
void RequestAgents();
void RequestSelfVCard();
void RequestVCard(JabberContact* contact);
JabberMessage* BuildMessage();
JabberPresence* BuildPresence();
RosterList * BuildRoster();
AgentList * BuildAgents();
JabberRegistration* BuildRegistration();
JabberVCard* BuildVCard(const BString& from);
//int32 GetConnection();
const JabberAgent* IsAgent(const BString & jid);
const char* HasAttribute(const char* name, const char** attributes, int32 count);
const char* HasAttribute(const char* name, const char** attributes);
void StripResource(BString & jid);
BString TwoDigit(int32, BString &);
static void StartElement(void* pUserData, const char* pName, const char** pAttr);
static void EndElement(void* pUserData, const char* pName);
static void Characters(void* pUserData, const char* pString, int pLen);
private:
void CleanUpEnvirorment();
};
#endif // _JABBER_HANDLER_H