X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpedro%2Fpedroxmpp.h;h=ee3234fd4a69e8778c3ab9bd3c6333637102ec74;hb=19f2d6797853686cf668528be392548100e92025;hp=447df7868e06c5906ef1aa6d1e97e16d87a7c4a6;hpb=6dc8d4d8441a81c27136268c502b49e5f431960e;p=inkscape.git diff --git a/src/pedro/pedroxmpp.h b/src/pedro/pedroxmpp.h index 447df7868..ee3234fd4 100644 --- a/src/pedro/pedroxmpp.h +++ b/src/pedro/pedroxmpp.h @@ -6,7 +6,7 @@ * Authors: * Bob Jamison * - * Copyright (C) 2005 Bob Jamison + * Copyright (C) 2005-2007 Bob Jamison * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,7 +24,9 @@ */ #include +#include #include +#include #include @@ -132,6 +134,13 @@ public: */ static const int EVENT_DISCONNECTED = 11; + /** + * Client has begun speaking to the server in SSL. This is usually + * emitted just before EVENT_CONNECTED, since authorization has not + * yet taken place. + */ + static const int EVENT_SSL_STARTED = 12; + /** * Client has successfully registered a new account on a server. * The server is in getFrom(), the user in getTo() @@ -139,10 +148,10 @@ public: static const int EVENT_REGISTRATION_NEW = 20; /** - * Client has successfully modified an existing account on a server. + * Client has successfully changed the password of an existing account on a server. * The server is in getFrom(), the user in getTo() */ - static const int EVENT_REGISTRATION_MODIFY = 21; + static const int EVENT_REGISTRATION_CHANGE_PASS = 21; /** * Client has successfully cancelled an existing account on a server. @@ -245,32 +254,32 @@ public: static const int EVENT_FILE_RECEIVE = 61; /** - * + * Constructs an event with one of the types above. */ XmppEvent(int type); /** - * + * Copy constructor */ XmppEvent(const XmppEvent &other); /** - * + * Assignment */ virtual XmppEvent &operator=(const XmppEvent &other); /** - * + * Destructor */ virtual ~XmppEvent(); /** - * + * Assignment */ virtual void assign(const XmppEvent &other); /** - * + * Return the event type. */ virtual int getType() const; @@ -470,37 +479,48 @@ private: }; + + + + //######################################################################## //# X M P P E V E N T L I S T E N E R //######################################################################## +/** + * Class that receives and processes an XmppEvent. Users should inherit + * from this class, and overload processXmppEvent() to perform their event + * handling + */ class XmppEventListener { public: /** - * + * Constructor */ XmppEventListener() {} /** - * + * Assignment */ - XmppEventListener(const XmppEventListener &other) + XmppEventListener(const XmppEventListener &/*other*/) {} /** - * + * Destructor */ virtual ~XmppEventListener() {} /** - * + * Overload this method to provide your application-specific + * event handling. Use event.getType() to decide what to do + * with the event. */ - virtual void processXmppEvent(const XmppEvent &event) + virtual void processXmppEvent(const XmppEvent &/*event*/) {} }; @@ -511,22 +531,30 @@ public: //# X M P P E V E N T T A R G E T //######################################################################## +/** + * A base class for classes that emit XmppEvents. + * + * Note: terminology: 'target' is the common term for this, although it + * seems odd that a 'target' is the source of the events. It is clearer + * if you consider that the greater system targets this class with events, + * and this class delegates the handling to its listeners. + */ class XmppEventTarget { public: /** - * + * Constructor */ XmppEventTarget(); /** - * + * Copy constructor */ XmppEventTarget(const XmppEventTarget &other); /** - * + * Destructor */ virtual ~XmppEventTarget(); @@ -539,50 +567,59 @@ public: /** * Send an error message to all subscribers */ - void error(char *fmt, ...); + void error(const char *fmt, ...) G_GNUC_PRINTF(2,3); /** * Send a status message to all subscribers */ - void status(char *fmt, ...); + void status(const char *fmt, ...) G_GNUC_PRINTF(2,3); //########################### //# LISTENERS //########################### /** - * - */ - virtual void dispatchXmppEvent(const XmppEvent &event); - - /** - * + * Subscribe a subclass of XmppEventListener to this target's events. */ virtual void addXmppEventListener(const XmppEventListener &listener); /** - * + * Unsubscribe a subclass of XmppEventListener from this target's events. */ virtual void removeXmppEventListener(const XmppEventListener &listener); /** - * + * Remove all event subscribers */ virtual void clearXmppEventListeners(); /** - * + * This sends an event to all registered listeners. + */ + virtual void dispatchXmppEvent(const XmppEvent &event); + + /** + * By enabling this, you provide an alternate way to get XmppEvents. + * Any event sent to dispatchXmppEvent() is also sent to this queue, + * so that it can be later be picked up by eventQueuePop(); + * This can sometimes be good for GUI's which can't always respond + * repidly or asynchronously. */ void eventQueueEnable(bool val); /** - * + * Return true if there is one or more XmppEvents waiting in the event + * queue. This is used to avoid calling eventQueuePop() when there is + * nothing in the queue. */ int eventQueueAvailable(); /** - * + * Return the next XmppEvent in the queue. Users should check that + * eventQueueAvailable() is greater than 0 before calling this. If + * people forget to do this, an event of type XmppEvent::EVENT_NONE + * is generated and returned. */ XmppEvent eventQueuePop(); @@ -593,10 +630,6 @@ private: std::vector eventQueue; bool eventQueueEnabled; - - static const int targetWriteBufLen = 2048; - - char targetWriteBuf[targetWriteBufLen]; }; @@ -607,12 +640,16 @@ private: //# X M P P C L I E N T //######################################################################## - +//forward declarations class TcpSocket; class XmppChat; class XmppGroupChat; class XmppStream; + +/** + * This is the actual XMPP (Jabber) client. + */ class XmppClient : public XmppEventTarget { @@ -623,22 +660,22 @@ public: //########################### /** - * + * Constructor */ XmppClient(); /** - * + * Copy constructor */ XmppClient(const XmppClient &other); /** - * + * Assignment */ void assign(const XmppClient &other); /** - * + * Destructor */ virtual ~XmppClient(); @@ -648,12 +685,14 @@ public: //########################### /** - * + * Pause execution of the app for a given number of + * milliseconds. Use this rarely, only when really needed. */ virtual bool pause(unsigned long millis); /** - * + * Process a string so that it can safely be + * placed in XML as PCDATA */ DOMString toXml(const DOMString &str); @@ -683,7 +722,7 @@ public: /** * */ - virtual bool write(char *fmt, ...); + virtual bool write(const char *fmt, ...) G_GNUC_PRINTF(2,3); //####################### //# V A R I A B L E S @@ -768,27 +807,22 @@ public: /** * */ - virtual DOMString getJid() - { return jid; } + virtual void setJid(const DOMString &val) + { jid = val; } /** * */ - virtual int getMsgId() - { return msgId++; } + virtual DOMString getJid() + { return jid; } - /** - * - */ - virtual void setDoRegister(bool val) - { doRegister = val; } /** * */ - virtual bool getDoRegister() - { return doRegister; } + virtual int getMsgId() + { return msgId++; } @@ -848,6 +882,29 @@ public: */ virtual void rosterShow(const DOMString &jid, const DOMString &show); + //####################### + //# REGISTRATION + //####################### + + /** + * Set whether the client should to in-band registration + * before authentication. Causes inBandRegistrationNew() to be called + * synchronously, before async is started. + */ + virtual void setDoRegister(bool val) + { doRegister = val; } + + /** + * Change the password of an existing account with a server + */ + bool inBandRegistrationChangePassword(const DOMString &newPassword); + + /** + * Cancel an existing account with a server + */ + bool inBandRegistrationCancel(); + + //####################### //# CHAT (individual) //####################### @@ -915,7 +972,7 @@ public: * */ virtual std::vector - XmppClient::groupChatGetUserList(const DOMString &groupJid); + groupChatGetUserList(const DOMString &groupJid); /** * @@ -968,46 +1025,31 @@ public: /** * */ - virtual int outputStreamOpen(const DOMString &jid, + virtual bool outputStreamOpen(const DOMString &jid, const DOMString &streamId); /** * */ - virtual int outputStreamWrite(int streamId, - const unsigned char *buf, unsigned long len); + virtual bool outputStreamWrite(const DOMString &streamId, + const std::vector &buf); /** * */ - virtual int outputStreamClose(int streamId); + virtual bool outputStreamClose(const DOMString &streamId); /** * */ - virtual int inputStreamOpen(const DOMString &jid, + virtual bool inputStreamOpen(const DOMString &jid, const DOMString &streamId, const DOMString &iqId); /** * */ - virtual int inputStreamAvailable(int streamId); - - /** - * - */ - virtual std::vector inputStreamRead(int streamId); - - /** - * - */ - virtual bool inputStreamClosing(int streamId); - - /** - * - */ - virtual int inputStreamClose(int streamId); + virtual bool inputStreamClose(const DOMString &streamId); //####################### @@ -1088,35 +1130,42 @@ private: bool saslPlainAuthenticate(); - bool saslAuthenticate(); + bool saslAuthenticate(const DOMString &streamId); bool iqAuthenticate(const DOMString &streamId); - bool inBandRegistration(); + /** + * Register a new account with a server. Not done by user + */ + bool inBandRegistrationNew(); bool keepGoing; bool doRegister; - static const int writeBufLen = 2048; + std::vectorgroupChats; - unsigned char writeBuf[writeBufLen]; + //#### Roster + std::vectorroster; - std::vectorgroupChats; - static const int outputStreamCount = 16; + //#### Streams + + bool processInBandByteStreamMessage(Element *root); + + DOMString streamPacket; - XmppStream *outputStreams[outputStreamCount]; + std::map outputStreams; - static const int inputStreamCount = 16; + std::map inputStreams; - XmppStream *inputStreams[inputStreamCount]; - static const int fileSendCount = 16; + //#### File send + + bool processFileMessage(Element *root); - XmppStream *fileSends[fileSendCount]; + std::map fileSends; - std::vectorroster; };