|
|
Base class for all Jabber streams. Basic stream data processing: send/receive XML elements, keep stream state, generate events
| enum State { Idle = 0, Connecting = 1, Started = 2, Securing = 3, Register = 4, Auth = 5, Running = 6, Destroy = 7, } | State |
Stream state enumeration.
| enum Error { ErrorNone = 0, ErrorContext, ErrorPending, ErrorNoSocket, } | Error |
Values returned by send() methods.
| enum Flags { AutoRestart = 0x0001, AllowPlainAuth = 0x0002, NoVersion1 = 0x0004, UseTls = 0x0008, UseSasl = 0x0010, AllowUnsafeSetup = 0x0020, StreamSecured = 0x0100, StreamAuthenticated = 0x0200, NoRemoteVersion1 = 0x0400, } | Flags |
Stream behaviour options
| ~JBStream ()
| ~JBStream |
[virtual]
Destructor. Gracefully close the stream and the socket
| inline int type ()
| type |
[const]
Get the type of this stream. See the protocol enumeration of the engine
Returns: The type of this stream
| inline State state ()
| state |
[const]
Get the stream state
Returns: The stream state as enumeration.
| inline bool outgoing ()
| outgoing |
[const]
Get the stream direction
Returns: True if the stream is an outgoing one
| inline const String& name ()
| name |
[const]
Get the stream's name
Returns: The stream's name
| inline const String& id ()
| id |
[const]
Get the stream id
Returns: The stream id
| inline JBEngine* engine ()
| engine |
[const]
Get the stream's owner
Returns: Pointer to the engine owning this stream
| inline const JabberID& local ()
| local |
[const]
Get the JID of the local side of this stream
Returns: The JID of the local side of this stream
| inline const JabberID& remote ()
| remote |
[const]
Get the JID of the remote side of this stream
Returns: The JID of the remote side of this stream
| inline const SocketAddr& addr ()
| addr |
[const]
Get the remote peer's address
Returns: The remote peer's address
| inline bool flag (int mask)
| flag |
[const]
Check if a given option (or option mask) is set
Parameters:
| mask | The flag(s) to check |
Returns: True if set
| inline Mutex* streamMutex ()
| streamMutex |
Get the stream mutex
Returns: The stream mutex
| void connect ()
| connect |
Connect the stream. Send stream start tag on success This method is thread safe
| bool receive ()
| receive |
Read data from socket and pass it to the parser. Terminate stream on socket or parser error. This method is thread safe
Returns: True if data was received
| Error sendStanza (XMLElement* stanza, const char* senderId = 0)
| sendStanza |
[virtual]
Send a stanza. This method is thread safe
Parameters:
| stanza | Element to send |
| senderId | Optional sender's id. Used for notification events |
Returns: The result of posting the stanza
| JBEvent* getEvent (u_int64_t time)
| getEvent |
Stream state and data processor. Increase restart counter. Restart stream if idle and auto restart. Extract an element from parser and construct an event. This method is thread safe
Parameters:
| time | Current time |
Returns: JBEvent pointer or 0
| void terminate (bool destroy, XMLElement* recvStanza, XMPPError::Type error, const char* reason,
bool send, bool final = false, bool sendError = true)
| terminate |
Terminate stream. Send stream end tag or error. Remove pending stanzas without id. Deref stream if destroying. This method is thread safe
Parameters:
| destroy | True to destroy. False to terminate |
| recvStanza | Received stanza, if any |
| error | Termination reason. Set it to NoError to send stream end tag |
| reason | Optional text to be added to the error stanza |
| send | True to send the stream end element |
| final | True if called from destructor |
| sendError | True to send the error element (ignored if error is NoError) |
| inline void removePending (const String& id, bool notify = false)
| removePending |
Remove pending stanzas with a given id. This method is thread safe
Parameters:
| id | The id of stanzas to remove |
| notify | True to raise an event for each removed stanza |
| const String& toString ()
| toString |
[const virtual]
Get the string representation of this stream
Returns: The string representation of this stream
Reimplemented from GenObject.
| void* getObject (const String& name)
| getObject |
[const virtual]
Get an object from this stream
Parameters:
| name | The name of the object to get |
Reimplemented from GenObject.
| const char* lookupState (int state)
| lookupState |
[static]
Get the name of a stream state
Parameters:
| state | The requested state number |
Returns: The name of the requested state
| static TokenDict s_flagName[] | s_flagName[] |
| enum WaitState { WaitIdle, WaitStart, WaitFeatures, WaitBindRsp, WaitSessionRsp, WaitTlsRsp, WaitChallenge, WaitResponse, WaitAborted, } | WaitState |
[protected]
Internal wait states enumeration. Defines what kind of XML is expected
| JBStream (JBEngine* engine, int type, XMPPServerInfo& info,
const JabberID& localJid, const JabberID& remoteJid)
| JBStream |
[protected]
Constructor. Build an outgoing stream
Parameters:
| engine | The engine that owns this stream |
| type | Stream type |
| info | Structure containing data used to connect to remote server |
| localJid | Local party's JID |
| remoteJid | Remote party's JID |
| inline JBStream ()
| JBStream |
[protected]
Default constructor
| void destroyed ()
| destroyed |
[protected virtual]
Close the stream. Release memory
Reimplemented from RefObject.
| bool checkDestination (XMLElement* xml, bool& respond)
| checkDestination |
[protected virtual]
Check the 'to' attribute of a received element
Parameters:
| xml | The received element |
| respond | Action to be taken when if not accepted. True to respond with an error, false to just drop it |
Returns: False to reject it. If the stream is not in Running state, it will be terminated
| XMLElement* getStreamStart ()
| getStreamStart |
[protected virtual]
Get the starting stream element to be sent after stream connected
Returns: XMLElement pointer
| XMLElement* getAuthStart ()
| getAuthStart |
[protected virtual]
Get the authentication element to be sent when authentication starts
Returns: XMLElement pointer or 0 on failure
| void processRunning (XMLElement* xml)
| processRunning |
[protected virtual]
Process a received stanza in Running state
Parameters:
| xml | Valid XMLElement pointer |
| void processRegister (XMLElement* xml)
| processRegister |
[protected virtual]
Process a received element in Register state. Descendants MUST consume the data
Parameters:
| xml | Valid XMLElement pointer |
| void processAuth (XMLElement* xml)
| processAuth |
[protected virtual]
Process a received element in Auth state. Descendants MUST consume the data
Parameters:
| xml | Valid XMLElement pointer |
| void processSecuring (XMLElement* xml)
| processSecuring |
[protected virtual]
Process a received element in Securing state. Descendants MUST consume the data. Drop the received element
Parameters:
| xml | Valid XMLElement pointer |
| void processStarted (XMLElement* xml)
| processStarted |
[protected virtual]
Process a received element in Started state. Descendants MUST consume the data
Parameters:
| xml | Valid XMLElement pointer |
| void streamRunning ()
| streamRunning |
[protected virtual]
Notify descendants when stream state changed to Running
| JBEvent* getIqEvent (XMLElement* xml, int iqType, XMPPError::Type& error)
| getIqEvent |
[protected]
Create an iq event from a received iq stanza
Parameters:
| xml | Received element |
| iqType | The iq type |
| error | Error type if 0 is returned |
Returns: JBEvent pointer or 0
| bool sendStreamStart ()
| sendStreamStart |
[protected]
Send declaration and stream start
Returns: True on success
| bool sendStreamXML (XMLElement* e, State newState)
| sendStreamXML |
[protected]
Send stream XML elements through the socket
Parameters:
| e | The element to send |
| newState | The new stream state on success |
Returns: False if send failed (stream termination was initiated)
| void invalidStreamXML (XMLElement* xml, XMPPError::Type error, const char* reason)
| invalidStreamXML |
[protected]
Terminate stream on receiving invalid elements
Parameters:
| xml | Received element |
| error | Termination reason |
| reason | Optional text to be added to the error stanza |
| void errorStreamXML (XMLElement* xml)
| errorStreamXML |
[protected]
Terminate stream on receiving stanza errors while not running
Parameters:
| xml | Received element |
| void dropXML (XMLElement* xml, bool unexpected = true)
| dropXML |
[protected]
Drop an unexpected or unhandled element
Parameters:
| xml | Received element |
| unexpected | True if unexpected |
| void changeState (State newState)
| changeState |
[protected]
Change stream's state. Raise a Running event when apropriate
Parameters:
| newState | the new stream state |
| bool getStreamFeatures (XMLElement* features)
| getStreamFeatures |
[protected]
Clear the remote feature list. Parse the received element to fill it up. Terminate the stream on error (such as invalid namespace). If false is returned, don't re-use the received element
Parameters:
| features | Features element to parse |
Returns: False if the stream is terminated
| bool startTls ()
| startTls |
[protected]
Start client TLS. Terminate the stream on error
Returns: True if TLS was initiated. False on failure: stream termination was initiated
| bool startRegister ()
| startRegister |
[protected]
Start client registration Terminate the stream on error
Returns: False if the stream is terminated
| bool startAuth ()
| startAuth |
[protected]
Start client authentication. Send first request to authenticate with the server. Terminate the stream on error
Returns: False if the stream is terminated
| bool sendAuthResponse (XMLElement* challenge = 0)
| sendAuthResponse |
[protected]
Send authentication response. Terminate the stream on error
Parameters:
| challenge | Received challenge. If non 0 a SASL response is built and sent. If 0, a non-SASL response is sent (using handshaking for component and XEP-0078 for client streams) |
Returns: False if the stream is terminated
| void buildSaslResponse (String& response, String* realm = 0,
String* nonce = 0)
| buildSaslResponse |
[protected]
Build SASL authentication response (Plain or Digest MD5 SASL). A valid mechanism must be previously set
Parameters:
| response | Destination string |
| realm | Received realm or 0 to use local jid. If 0, nonce param is ignored |
| nonce | Server nonce if available |
| void setClientAuthMechanism ()
| setClientAuthMechanism |
[protected]
Parse remote's features and pick an authentication mechanism to be used when requesting authentication
| void buildDigestMD5Sasl (String& dest, bool authenticate = true)
| buildDigestMD5Sasl |
[protected]
Build a Digest MD5 SASL (RFC 2831) to be sent with authentication responses
Parameters:
| dest | Destination string |
| authenticate | True if building a Digest MD5 challenge response, false if building a Digest MD5 to check a 'success' response |
| void setRecvCount (int value)
| setRecvCount |
[protected]
Safely set receive count
Parameters:
| value | The new value of the receive count |
| bool startIdleTimer (u_int64_t time = Time::msecNow())
| startIdleTimer |
[protected]
Start the idle timer if there are no pending stanzas
Parameters:
| time | The current time in miliseconds |
Returns: True if started
| inline JBEvent* lastEvent ()
| lastEvent |
[protected]
Get last event from queue
Returns: JBEvent pointer or 0
| String m_name | m_name |
[protected]
| String m_password | m_password |
[protected]
| JIDFeatureList m_localFeatures | m_localFeatures |
[protected]
| JIDFeatureList m_remoteFeatures | m_remoteFeatures |
[protected]
| int m_flags | m_flags |
[protected]
| unsigned int m_challengeCount | m_challengeCount |
[protected]
| WaitState m_waitState | m_waitState |
[protected]
| JIDFeatureSasl::Mechanism m_authMech | m_authMech |
[protected]
| ObjList m_events | m_events |
[protected]
| bool m_register | m_register |
[protected]
| Generated by: paulc on bussard on Mon Mar 8 12:18:15 2010, using kdoc 2.0a54. |