Package pyxmpp :: Module clientstream :: Class ClientStream
[hide private]

Class ClientStream

source code

           streamtls.StreamTLSMixIn --+    
                                      |    
      sasl.core.PasswordManager --+   |    
                                  |   |    
         streamsasl.StreamSASLMixIn --+    
                                      |    
stanzaprocessor.StanzaProcessor --+   |    
                                  |   |    
         xmlextra.StreamHandler --+   |    
                                  |   |    
              streambase.StreamBase --+    
                                      |    
                          stream.Stream --+
                                          |
                                         ClientStream
Known Subclasses:

Handles XMPP-IM client connection stream.

Both client and server side of the connection is supported. This class handles client SASL authentication, authorisation and resource binding.

This class is not ready for handling of legacy Jabber servers, as it doesn't provide legacy authentication.

Instance Methods [hide private]
 
__init__(self, jid, password=None, server=None, port=None, auth_methods=('sasl:DIGEST-MD5'), tls_settings=None, keepalive=0, owner=None)
Initialize the ClientStream object.
source code
 
_connect(self, server=None, port=None)
Same as ClientStream.connect but assume self.lock is acquired.
source code
 
_get_stream_features(self)
Include resource binding feature in the stream features list.
source code
 
_post_connect(self)
Initialize authentication when the connection is established and we are the initiator.
source code
 
_reset(self)
Reset ClientStream object state, making the object ready to handle new connections.
source code
 
_try_auth(self)
Try to authenticate using the first one of allowed authentication methods left.
source code
 
accept(self, sock)
Accept an incoming client connection.
source code
bool
check_authzid(self, authzid, extra_info=None)
Check authorization id provided by the client.
source code
unicode
choose_realm(self, realm_list)
Choose authentication realm from the list provided by the server.
source code
 
connect(self, server=None, port=None)
Establish a client connection to a server.
source code
 
do_bind(self, stanza)
Do the resource binding requested by a client connected.
source code
 
fix_in_stanza(self, stanza)
Fix an incoming stanza.
source code
 
fix_out_stanza(self, stanza)
Fix outgoing stanza.
source code
(unicode,`str`)
get_password(self, username, realm=None, acceptable_formats=('plain'))
Get a user password for the SASL authentication.
source code
list of unicode
get_realms(self)
Get realms available for client authentication.
source code
 
get_serv_host(self)
Get the service host name for SASL authentication.
source code
 
get_serv_name(self)
Get the service name for SASL authentication.
source code
 
get_serv_type(self)
Get the server name for SASL authentication.
source code

Inherited from streamtls.StreamTLSMixIn: get_tls_connection, tls_is_certificate_valid

Inherited from sasl.core.PasswordManager: check_password, generate_nonce

Inherited from streambase.StreamBase: __del__, bind, check_to, close, connected, disconnect, error, fileno, generate_id, idle, loop, loop_iter, process, process_stream_error, send, stanza, stanza_start, state_change, stream_end, stream_start, write_raw

Inherited from stanzaprocessor.StanzaProcessor: process_iq, process_message, process_presence, process_response, process_stanza, route_stanza, set_iq_get_handler, set_iq_set_handler, set_message_handler, set_presence_handler, set_response_handlers, unset_iq_get_handler, unset_iq_set_handler

Inherited from xmlextra.StreamHandler: warning

Instance Variables [hide private]
: list of str auth_methods
: allowed authentication methods.
: pyxmpp.JID my_jid
: requested local JID.
: str password
: user's password.
: int port
: port number to use.
: str server
: server to use.

Inherited from stream.Stream: features, initiator, lock, me, peer, process_all_stanzas, tls

Inherited from stream.Stream (private): _reader

Inherited from streambase.StreamBase: owner

Method Details [hide private]

__init__(self, jid, password=None, server=None, port=None, auth_methods=('sasl:DIGEST-MD5'), tls_settings=None, keepalive=0, owner=None)
(Constructor)

source code 
Initialize the ClientStream object.
Parameters:
  • jid (: pyxmpp.JID) - : local JID.
  • password (: unicode) - : user's password.
  • server (: unicode) - : server to use. If not given then address will be derived form the JID.
  • port (: int) - : port number to use. If not given then address will be derived form the JID.
  • auth_methods (: sequence of str) - : sallowed authentication methods. SASL authentication mechanisms in the list should be prefixed with "sasl:" string.
  • tls_settings (: pyxmpp.TLSSettings) - : settings for StartTLS -- TLSSettings instance.
  • keepalive (: int) - : keepalive output interval. 0 to disable.
  • owner - : Client, Component or similar object "owning" this stream.
Overrides: xmlextra.StreamHandler.__init__

_connect(self, server=None, port=None)

source code 
Same as ClientStream.connect but assume self.lock is acquired.
Overrides: streambase.StreamBase._connect

_get_stream_features(self)

source code 

Include resource binding feature in the stream features list.

[server only]

_post_connect(self)

source code 
Initialize authentication when the connection is established and we are the initiator.
Overrides: streambase.StreamBase._post_connect

_reset(self)

source code 
Reset ClientStream object state, making the object ready to handle new connections.
Overrides: streambase.StreamBase._reset

_try_auth(self)

source code 

Try to authenticate using the first one of allowed authentication methods left.

[client only]

accept(self, sock)

source code 

Accept an incoming client connection.

[server only]

Parameters:
  • sock - : a listening socket.
Overrides: streambase.StreamBase.accept

check_authzid(self, authzid, extra_info=None)

source code 

Check authorization id provided by the client.

[server only]

Parameters:
  • authzid (: unicode) - : authorization id provided.
  • extra_info (: mapping) - : additional information about the user from the authentication backend. This mapping will usually contain at least 'username' item.
Returns: bool
True if user is authorized to use that authzid.
Overrides: sasl.core.PasswordManager.check_authzid

choose_realm(self, realm_list)

source code 

Choose authentication realm from the list provided by the server.

[client only]

Use domain of the own JID if no realm list was provided or the domain is on the list or the first realm on the list otherwise.

Parameters:
  • realm_list (: list of unicode) - : realm list provided by the server.
Returns: unicode
the realm chosen.
Overrides: sasl.core.PasswordManager.choose_realm

connect(self, server=None, port=None)

source code 

Establish a client connection to a server.

[client only]

Parameters:
  • server (: unicode) - : name or address of the server to use. Not recommended -- proper value should be derived automatically from the JID.
  • port (: int) - : port number of the server to use. Not recommended -- proper value should be derived automatically from the JID.
Overrides: streambase.StreamBase.connect

do_bind(self, stanza)

source code 

Do the resource binding requested by a client connected.

[server only]

Parameters:
  • stanza (: pyxmpp.Iq) - : resource binding request stanza.

fix_in_stanza(self, stanza)

source code 

Fix an incoming stanza.

Ona server replace the sender address with authorized client JID.

Overrides: stanzaprocessor.StanzaProcessor.fix_in_stanza

fix_out_stanza(self, stanza)

source code 

Fix outgoing stanza.

On a client clear the sender JID. On a server set the sender address to the own JID if the address is not set yet.

Overrides: stanzaprocessor.StanzaProcessor.fix_out_stanza

get_password(self, username, realm=None, acceptable_formats=('plain'))

source code 
Get a user password for the SASL authentication.
Parameters:
  • username (: unicode) - : username used for authentication.
  • realm (: unicode) - : realm used for authentication.
  • acceptable_formats (: list of str) - : acceptable password encoding formats requested.
Returns: (unicode,`str`)
The password and the format name ('plain').
Overrides: sasl.core.PasswordManager.get_password

get_realms(self)

source code 

Get realms available for client authentication.

[server only]

Returns: list of unicode
list of realms.
Overrides: sasl.core.PasswordManager.get_realms

get_serv_host(self)

source code 
Get the service host name for SASL authentication.
Returns:
domain of the own JID.
Overrides: sasl.core.PasswordManager.get_serv_host

get_serv_name(self)

source code 
Get the service name for SASL authentication.
Returns:
domain of the own JID.
Overrides: sasl.core.PasswordManager.get_serv_name

get_serv_type(self)

source code 
Get the server name for SASL authentication.
Returns:
'xmpp'.
Overrides: sasl.core.PasswordManager.get_serv_type

Instance Variable Details [hide private]

my_jid

: requested local JID. Please notice that this may differ from me, which is actual authorized JID after the resource binding.
Type:
: pyxmpp.JID