XMPP::C2S::StreamHandler Class Reference

This class handles the client side of a C2S (Client to Server) XMPP stream. More...

`#include <xmpp_c2s.h>`

Inheritance diagram for XMPP::C2S::StreamHandler:

## Public Member Functions

| StreamHandler (const JID &jid, const PString &pwd, PBoolean newAccount=false)
| ~StreamHandler ()
virtual PBoolean | IsEstablished () const
virtual PBoolean | Start (Transport *transport=0)
PBoolean | Send (Stanza *stanza)
| Request the delivery of the specified stanza NOTE: the StreamHandler takes ownership of the stanza and will take care of deleting it. More...
void | SetVersion (WORD major, WORD minor)
void | GetVersion (WORD &major, WORD &minor) const
const JID & | GetJID () const
PNotifierList & | SessionEstablishedHandlers ()
| These notifier lists after when a client session is established (i.e. More...
PNotifierList & | SessionReleasedHandlers ()
PNotifierList & | ErrorHandlers ()
| These notifier lists are fired when a XMPP stanza or a stream error is received. More...
PNotifierList & | MessageHandlers ()
PNotifierList & | PresenceHandlers ()
PNotifierList & | IQHandlers ()
PNotifierList & | IQNamespaceHandlers (const PString &xml_namespace)
| A notifier list for a specific namespace. More...
PNotifierList & | MessageSenderHandlers (const JID &from)
| A notifier list for a particular message originator. More...
virtual PBoolean | DiscoverItems (const PString &jid, PNotifier *responseHandler, const PString &node=PString::Empty())
| JEP-0030 Service Discovery access methods. More...
virtual PBoolean | DiscoverInfo (const PString &jid, PNotifier *responseHandler, const PString &node=PString::Empty())
Public Member Functions inherited from XMPP::BaseStreamHandler
| BaseStreamHandler ()
| ~BaseStreamHandler ()
virtual PBoolean | Stop (const PString &error=PString::Empty())
void | SetAutoReconnect (PBoolean b=true, long timeout=1000)
PNotifierList & | ElementHandlers ()
Stream * | GetStream ()
virtual PBoolean | Write (const void *buf, PINDEX len)
virtual PBoolean | Write (const PString &data)
virtual PBoolean | Write (const PXML &pdu)
virtual void | Main ()
| User override function for the main execution routine of the thread. More...
Public Member Functions inherited from PThread
bool | IsAutoDelete () const
int | PXBlockOnChildTerminate (int pid, const PTimeInterval &timeout)
int | PXBlockOnIO (int handle, int type, const PTimeInterval &timeout)
void | PXAbortBlock () const
void | PrintOn (ostream &strm) const
| Standard stream print function. More...
| PThread (PINDEX, AutoDeleteFlag deletion=AutoDeleteThread, Priority priorityLevel=NormalPriority, const PString &threadName=PString::Empty())
| Create a new thread instance. More...
| ~PThread ()
| Destroy the thread, this simply calls the `Terminate()` function with all its restrictions and penalties. More...
virtual void | Restart ()
| Restart a terminated thread using the same stack priority etc that was current when the thread terminated. More...
virtual void | Terminate ()
| Terminate the thread. More...
virtual PBoolean | IsTerminated () const
| Determine if the thread has been terminated or ran to completion. More...
void | WaitForTermination () const
| Block and wait for the thread to terminate. More...
PBoolean | WaitForTermination (const PTimeInterval &maxWait) const
| Block and wait for the thread to terminate. More...
virtual void | Suspend (PBoolean susp=true)
| Suspend or resume the thread. More...
virtual void | Resume ()
| Resume thread execution, this is identical to `Suspend(false)`. More...
virtual PBoolean | IsSuspended () const
| Determine if the thread is currently suspended. More...
virtual void | SetPriority (Priority priorityLevel)
| Set the priority of the thread relative to other threads in the current process. More...
virtual Priority | GetPriority () const
| Get the current priority of the thread in the current process. More...
virtual void | SetAutoDelete (AutoDeleteFlag deletion=AutoDeleteThread)
| Set the flag indicating thread object is to be automatically deleted when the thread ends. More...
void | SetNoAutoDelete ()
| Reet the flag indicating thread object is to be automatically deleted when the thread ends. More...
virtual PString | GetThreadName () const
| Get the name of the thread. More...
virtual void | SetThreadName (const PString &name)
| Change the name of the thread. More...
virtual PThreadIdentifier | GetThreadId () const
| Get operating system specific thread identifier for this thread. More...
bool | GetTimes (Times &times)
| Get the thread execution times. More...
Public Member Functions inherited from PObject
virtual | ~PObject ()
virtual PObject * | Clone () const
| Create a copy of the class on the heap. More...
virtual PINDEX | HashFunction () const
| This function yields a hash value required by the `PDictionary` class. More...
virtual const char * | GetClass (unsigned ancestor=0) const
| Get the current dynamic type of the object instance. More...
PBoolean | IsClass (const char *cls) const
virtual PBoolean | InternalIsDescendant (const char *clsName) const
| Determine if the dynamic type of the current instance is a descendent of the specified class. More...
virtual Comparison | Compare (const PObject &obj) const
| Compare the two objects and return their relative rank. More...
virtual Comparison | CompareObjectMemoryDirect (const PObject &obj) const
| Determine the byte wise comparison of two objects. More...
bool | operator== (const PObject &obj) const
| Compare the two objects. More...
bool | operator!= (const PObject &obj) const
| Compare the two objects. More...
bool | operator< (const PObject &obj) const
| Compare the two objects. More...
bool | operator> (const PObject &obj) const
| Compare the two objects. More...
bool | operator<= (const PObject &obj) const
| Compare the two objects. More...
bool | operator>= (const PObject &obj) const
| Compare the two objects. More...
virtual void | ReadFrom (istream &strm)
| Input the contents of the object from the stream. More...

## Protected Types

enum | StreamState { Null, RegStarted, TLSStarted, SASLStarted, NonSASLStarted, StreamSent, BindSent, SessionSent, Established }

## Protected Member Functions

virtual void | OnOpen (Stream &stream, INT)
virtual void | OnClose (Stream &stream, INT)
virtual void | StartRegistration ()
virtual void | StartAuthNegotiation ()
virtual void | OnSessionEstablished ()
virtual void | OnSessionReleased ()
virtual void | OnElement (PXML &pdu)
virtual void | OnError (PXML &pdu)
virtual void | OnMessage (XMPP::Message &pdu)
virtual void | OnPresence (XMPP::Presence &pdu)
virtual void | OnIQ (XMPP::IQ &pdu)
virtual void | HandleNullState (PXML &pdu)
virtual void | HandleRegStartedState (PXML &pdu)
virtual void | HandleTLSStartedState (PXML &pdu)
virtual void | HandleNonSASLStartedState (PXML &pdu)
virtual void | HandleStreamSentState (PXML &pdu)
virtual void | HandleBindSentState (PXML &pdu)
virtual void | HandleSessionSentState (PXML &pdu)
virtual void | HandleEstablishedState (PXML &pdu)
virtual PBoolean | Discover (const PString &xmlns, const PString &jid, PNotifier *responseHandler, const PString &node)
virtual void | SetState (StreamState s)
Protected Member Functions inherited from XMPP::BaseStreamHandler
| PDECLARE_NOTIFIER (Stream, BaseStreamHandler, OnOpen)
| PDECLARE_NOTIFIER (Stream, BaseStreamHandler, OnClose)
Protected Member Functions inherited from PObject
| PObject ()
| Constructor for PObject, made protected so cannot ever create one on its own. More...

## Protected Attributes

WORD | m_VersionMajor
WORD | m_VersionMinor
PString | m_StreamID
PBoolean | m_NewAccount
JID | m_JID
const PString | m_Password
PBoolean | m_HasBind
PBoolean | m_HasSession
PNotifierList | m_SessionEstablishedHandlers
PNotifierList | m_SessionReleasedHandlers
PNotifierList | m_ErrorHandlers
PNotifierList | m_MessageHandlers
PNotifierList | m_PresenceHandlers
PNotifierList | m_IQHandlers
PDictionary< PString, PNotifierList > | m_IQNamespaceHandlers
PDictionary< JID, PNotifierList > | m_MessageSenderHandlers
PMutex | m_PendingIQsLock
StanzaList | m_PendingIQs
StreamState | m_State
Protected Attributes inherited from XMPP::BaseStreamHandler
Stream * | m_Stream
PBoolean | m_AutoReconnect
PTimeInterval | m_ReconnectTimeout
PNotifierList | m_ElementHandlers
Protected Attributes inherited from PThread
bool | m_isProcess
bool | m_autoDelete
PINDEX | m_originalStackSize
PString | m_threadName
PMutex | m_threadNameMutex
PThreadIdentifier | m_threadId

## Additional Inherited Members

Public Types inherited from PThread
enum | Priority { LowestPriority, LowPriority, NormalPriority, HighPriority, HighestPriority, NumPriorities }
| Codes for thread priorities. More...
enum | AutoDeleteFlag { AutoDeleteThread, NoAutoDeleteThread }
| Codes for thread autodelete flag. More...
Public Types inherited from PObject
enum | Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
| Result of the comparison operation performed by the `Compare()` function. More...
Static Public Member Functions inherited from PThread
static void | Sleep (const PTimeInterval &delay)
| Suspend the current thread for the specified amount of time. More...
static PThreadIdentifier | GetCurrentThreadId ()
static PThread * | Current ()
| Get the currently running thread object instance. More...
static void | Yield ()
| Yield to another thread without blocking. More...
static PThread * | Create (const PNotifier &notifier, INT parameter=0, AutoDeleteFlag deletion=AutoDeleteThread, Priority priorityLevel=NormalPriority, const PString &threadName=PString::Empty(), PINDEX stackSize=65536)
| Create a simple thread executing the specified notifier. More...
static PThread * | Create (const PNotifier &notifier, const PString &threadName)
Static Public Member Functions inherited from PObject
static const char * | Class ()
| Get the name of the class as a C string. More...
static Comparison | InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
| Internal function caled from CompareObjectMemoryDirect() More...

## Detailed Description

This class handles the client side of a C2S (Client to Server) XMPP stream.

## Member Enumeration Documentation

enum XMPP::C2S::StreamHandler::StreamState

protected

Enumerator
Null |
RegStarted |
TLSStarted |
SASLStarted |
NonSASLStarted | non SASL authentication (JEP-0078)
StreamSent |
BindSent |
SessionSent |
Established |

## Constructor & Destructor Documentation

XMPP::C2S::StreamHandler::StreamHandler | ( | const JID & | jid,
|  | const PString & | pwd,
|  | PBoolean | newAccount = `false`
| ) |  |

XMPP::C2S::StreamHandler::~StreamHandler | ( |  | ) |

## Member Function Documentation

virtual PBoolean XMPP::C2S::StreamHandler::Discover | ( | const PString & | xmlns,
|  | const PString & | jid,
|  | PNotifier * | responseHandler,
|  | const PString & | node
| ) |  |

protected virtual

virtual PBoolean XMPP::C2S::StreamHandler::DiscoverInfo | ( | const PString & | jid,
|  | PNotifier * | responseHandler,
|  | const PString & | node = `PString::Empty()`
| ) |  |

virtual

Parameters

  jid | JID to which a query will be send
  responseHandler | Handler function for responses
  node | Optional node

virtual PBoolean XMPP::C2S::StreamHandler::DiscoverItems | ( | const PString & | jid,
|  | PNotifier * | responseHandler,
|  | const PString & | node = `PString::Empty()`
| ) |  |

virtual

JEP-0030 Service Discovery access methods.

The response handler will receive a PIQ stanza (a smart pointer to a XMPP::IQ)

Parameters

  jid | JID to which a query will be send
  responseHandler | Handler function for responses
  node | Optional node

PNotifierList& XMPP::C2S::StreamHandler::ErrorHandlers | ( |  | ) |

inline

These notifier lists are fired when a XMPP stanza or a stream error is received.

For the notifier lists to be fired the stream must be already in the established state (i.e. after the bind and the session state). The parameter passed to the notifiers is a reference to the received pdu

References m_ErrorHandlers.

const JID& XMPP::C2S::StreamHandler::GetJID | ( |  | ) | const

inline

References m_JID.

void XMPP::C2S::StreamHandler::GetVersion | ( | WORD & | major,
|  | WORD & | minor
| ) |  | const

virtual void XMPP::C2S::StreamHandler::HandleBindSentState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleEstablishedState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleNonSASLStartedState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleNullState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleRegStartedState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleSessionSentState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleStreamSentState | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::HandleTLSStartedState | ( | PXML & | pdu | ) |

protected virtual

PNotifierList& XMPP::C2S::StreamHandler::IQHandlers | ( |  | ) |

inline

References m_IQHandlers.

PNotifierList& XMPP::C2S::StreamHandler::IQNamespaceHandlers | ( | const PString & | xml_namespace | ) |

A notifier list for a specific namespace.

The list will be fired only upon receiving an IQ with the child element of the specified namespace

virtual PBoolean XMPP::C2S::StreamHandler::IsEstablished | ( |  | ) | const

inline virtual

References Established, and m_State.

PNotifierList& XMPP::C2S::StreamHandler::MessageHandlers | ( |  | ) |

inline

References m_MessageHandlers.

PNotifierList& XMPP::C2S::StreamHandler::MessageSenderHandlers | ( | const JID & | from | ) |

A notifier list for a particular message originator.

The list will be fired only upon receiving a message from the specified jid. NOTE: if a matching notifier list is found and it's not emnpty, the generic MessageHandlers list IS NOT fired.

virtual void XMPP::C2S::StreamHandler::OnClose | ( | Stream & | stream,
|  | INT |
| ) |  |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnElement | ( | PXML & | pdu | ) |

protected virtual

Reimplemented from XMPP::BaseStreamHandler.

virtual void XMPP::C2S::StreamHandler::OnError | ( | PXML & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnIQ | ( | XMPP::IQ & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnMessage | ( | XMPP::Message & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnOpen | ( | Stream & | stream,
|  | INT |
| ) |  |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnPresence | ( | XMPP::Presence & | pdu | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnSessionEstablished | ( |  | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::OnSessionReleased | ( |  | ) |

protected virtual

PNotifierList& XMPP::C2S::StreamHandler::PresenceHandlers | ( |  | ) |

inline

References m_PresenceHandlers.

PBoolean XMPP::C2S::StreamHandler::Send | ( | Stanza * | stanza | ) |

Request the delivery of the specified stanza NOTE: the StreamHandler takes ownership of the stanza and will take care of deleting it.

BIG NOTE: use this method and not Write() if you want to get a notification when an answer to an iq arrives

PNotifierList& XMPP::C2S::StreamHandler::SessionEstablishedHandlers | ( |  | ) |

inline

These notifier lists after when a client session is established (i.e.

after the handshake and authentication steps are completed) or is released. The parameter passed to the notifiers is a reference to the stream handler

References m_SessionEstablishedHandlers.

PNotifierList& XMPP::C2S::StreamHandler::SessionReleasedHandlers | ( |  | ) |

inline

References m_SessionReleasedHandlers.

virtual void XMPP::C2S::StreamHandler::SetState | ( | StreamState | s | ) |

protected virtual

void XMPP::C2S::StreamHandler::SetVersion | ( | WORD | major,
|  | WORD | minor
| ) |  |

virtual PBoolean XMPP::C2S::StreamHandler::Start | ( | Transport * | transport = `0` | ) |

virtual

Reimplemented from XMPP::BaseStreamHandler.

virtual void XMPP::C2S::StreamHandler::StartAuthNegotiation | ( |  | ) |

protected virtual

virtual void XMPP::C2S::StreamHandler::StartRegistration | ( |  | ) |

protected virtual

## Member Data Documentation

PNotifierList XMPP::C2S::StreamHandler::m_ErrorHandlers

protected

Referenced by ErrorHandlers().

PBoolean XMPP::C2S::StreamHandler::m_HasBind

protected

PBoolean XMPP::C2S::StreamHandler::m_HasSession

protected

PNotifierList XMPP::C2S::StreamHandler::m_IQHandlers

protected

Referenced by IQHandlers().

PDictionary<PString, PNotifierList> XMPP::C2S::StreamHandler::m_IQNamespaceHandlers

protected

JID XMPP::C2S::StreamHandler::m_JID

protected

Referenced by GetJID().

PNotifierList XMPP::C2S::StreamHandler::m_MessageHandlers

protected

Referenced by MessageHandlers().

PDictionary<JID, PNotifierList> XMPP::C2S::StreamHandler::m_MessageSenderHandlers

protected

PBoolean XMPP::C2S::StreamHandler::m_NewAccount

protected

const PString XMPP::C2S::StreamHandler::m_Password

protected

StanzaList XMPP::C2S::StreamHandler::m_PendingIQs

protected

PMutex XMPP::C2S::StreamHandler::m_PendingIQsLock

protected

PNotifierList XMPP::C2S::StreamHandler::m_PresenceHandlers

protected

Referenced by PresenceHandlers().

PNotifierList XMPP::C2S::StreamHandler::m_SessionEstablishedHandlers

protected

Referenced by SessionEstablishedHandlers().

PNotifierList XMPP::C2S::StreamHandler::m_SessionReleasedHandlers

protected

Referenced by SessionReleasedHandlers().

StreamState XMPP::C2S::StreamHandler::m_State

protected

Referenced by IsEstablished().

PString XMPP::C2S::StreamHandler::m_StreamID

protected

WORD XMPP::C2S::StreamHandler::m_VersionMajor

protected

WORD XMPP::C2S::StreamHandler::m_VersionMinor

protected

The documentation for this class was generated from the following file:

- xmpp_c2s.h