fixed line endings
This commit is contained in:
		
							parent
							
								
									882555b538
								
							
						
					
					
						commit
						f0adbc9892
					
				
					 9 changed files with 121 additions and 121 deletions
				
			
		| 
						 | 
					@ -26,6 +26,6 @@ and use only methods for access all values you should not have any problems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import simplexml,protocol,debug,auth,transports,roster,dispatcher,features,browser,filetransfer,commands
 | 
					import simplexml,protocol,debug,auth,transports,roster,dispatcher,features,browser,filetransfer,commands
 | 
				
			||||||
from client import *
 | 
					from client import *
 | 
				
			||||||
from protocol import *
 | 
					from protocol import *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
##   GNU General Public License for more details.
 | 
					##   GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# $Id: auth.py,v 1.35 2006/01/18 19:26:43 normanr Exp $
 | 
					# $Id: auth.py,v 1.35 2006/01/18 19:26:43 normanr Exp $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
Provides library with all Non-SASL and SASL authentication mechanisms.
 | 
					Provides library with all Non-SASL and SASL authentication mechanisms.
 | 
				
			||||||
| 
						 | 
					@ -174,7 +174,7 @@ class SASL(PlugIn):
 | 
				
			||||||
        data=base64.decodestring(incoming_data)
 | 
					        data=base64.decodestring(incoming_data)
 | 
				
			||||||
        self.DEBUG('Got challenge:'+data,'ok')
 | 
					        self.DEBUG('Got challenge:'+data,'ok')
 | 
				
			||||||
        for pair in data.split(','):
 | 
					        for pair in data.split(','):
 | 
				
			||||||
            key,value=pair.split('=', 1)
 | 
					            key,value=pair.split('=', 1)
 | 
				
			||||||
            if value[:1]=='"' and value[-1:]=='"': value=value[1:-1]
 | 
					            if value[:1]=='"' and value[-1:]=='"': value=value[1:-1]
 | 
				
			||||||
            chal[key]=value
 | 
					            chal[key]=value
 | 
				
			||||||
        if chal.has_key('qop') and chal['qop']=='auth':
 | 
					        if chal.has_key('qop') and chal['qop']=='auth':
 | 
				
			||||||
| 
						 | 
					@ -199,7 +199,7 @@ class SASL(PlugIn):
 | 
				
			||||||
                if key in ['nc','qop','response','charset']: sasl_data+="%s=%s,"%(key,resp[key])
 | 
					                if key in ['nc','qop','response','charset']: sasl_data+="%s=%s,"%(key,resp[key])
 | 
				
			||||||
                else: sasl_data+='%s="%s",'%(key,resp[key])
 | 
					                else: sasl_data+='%s="%s",'%(key,resp[key])
 | 
				
			||||||
########################################3333
 | 
					########################################3333
 | 
				
			||||||
            node=Node('response',attrs={'xmlns':NS_SASL},payload=[base64.encodestring(sasl_data[:-1]).replace('\r','').replace('\n','')])
 | 
					            node=Node('response',attrs={'xmlns':NS_SASL},payload=[base64.encodestring(sasl_data[:-1]).replace('\r','').replace('\n','')])
 | 
				
			||||||
            self._owner.send(node.__str__())
 | 
					            self._owner.send(node.__str__())
 | 
				
			||||||
        elif chal.has_key('rspauth'): self._owner.send(Node('response',attrs={'xmlns':NS_SASL}).__str__())
 | 
					        elif chal.has_key('rspauth'): self._owner.send(Node('response',attrs={'xmlns':NS_SASL}).__str__())
 | 
				
			||||||
        else: 
 | 
					        else: 
 | 
				
			||||||
| 
						 | 
					@ -259,48 +259,48 @@ class Bind(PlugIn):
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.DEBUG('Binding failed: timeout expired.','error')
 | 
					            self.DEBUG('Binding failed: timeout expired.','error')
 | 
				
			||||||
            return ''
 | 
					            return ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ComponentBind(PlugIn):
 | 
					class ComponentBind(PlugIn):
 | 
				
			||||||
    """ ComponentBind some JID to the current connection to allow router know of our location."""
 | 
					    """ ComponentBind some JID to the current connection to allow router know of our location."""
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        PlugIn.__init__(self)
 | 
					        PlugIn.__init__(self)
 | 
				
			||||||
        self.DBG_LINE='bind'
 | 
					        self.DBG_LINE='bind'
 | 
				
			||||||
        self.bound=None
 | 
					        self.bound=None
 | 
				
			||||||
        self.needsUnregister=None
 | 
					        self.needsUnregister=None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def plugin(self,owner):
 | 
					    def plugin(self,owner):
 | 
				
			||||||
        """ Start resource binding, if allowed at this time. Used internally. """
 | 
					        """ Start resource binding, if allowed at this time. Used internally. """
 | 
				
			||||||
        if self._owner.Dispatcher.Stream.features:
 | 
					        if self._owner.Dispatcher.Stream.features:
 | 
				
			||||||
            try: self.FeaturesHandler(self._owner.Dispatcher,self._owner.Dispatcher.Stream.features)
 | 
					            try: self.FeaturesHandler(self._owner.Dispatcher,self._owner.Dispatcher.Stream.features)
 | 
				
			||||||
            except NodeProcessed: pass
 | 
					            except NodeProcessed: pass
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self._owner.RegisterHandler('features',self.FeaturesHandler,xmlns=NS_STREAMS)
 | 
					            self._owner.RegisterHandler('features',self.FeaturesHandler,xmlns=NS_STREAMS)
 | 
				
			||||||
            self.needsUnregister=1
 | 
					            self.needsUnregister=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def plugout(self):
 | 
					    def plugout(self):
 | 
				
			||||||
        """ Remove ComponentBind handler from owner's dispatcher. Used internally. """
 | 
					        """ Remove ComponentBind handler from owner's dispatcher. Used internally. """
 | 
				
			||||||
        if self.needsUnregister:
 | 
					        if self.needsUnregister:
 | 
				
			||||||
            self._owner.UnregisterHandler('features',self.FeaturesHandler,xmlns=NS_STREAMS)
 | 
					            self._owner.UnregisterHandler('features',self.FeaturesHandler,xmlns=NS_STREAMS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def FeaturesHandler(self,conn,feats):
 | 
					    def FeaturesHandler(self,conn,feats):
 | 
				
			||||||
        """ Determine if server supports resource binding and set some internal attributes accordingly. """
 | 
					        """ Determine if server supports resource binding and set some internal attributes accordingly. """
 | 
				
			||||||
        if not feats.getTag('bind',namespace=NS_BIND):
 | 
					        if not feats.getTag('bind',namespace=NS_BIND):
 | 
				
			||||||
            self.bound='failure'
 | 
					            self.bound='failure'
 | 
				
			||||||
            self.DEBUG('Server does not requested binding.','error')
 | 
					            self.DEBUG('Server does not requested binding.','error')
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        if feats.getTag('session',namespace=NS_SESSION): self.session=1
 | 
					        if feats.getTag('session',namespace=NS_SESSION): self.session=1
 | 
				
			||||||
        else: self.session=-1
 | 
					        else: self.session=-1
 | 
				
			||||||
        self.bound=[]
 | 
					        self.bound=[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Bind(self,domain=None):
 | 
					    def Bind(self,domain=None):
 | 
				
			||||||
        """ Perform binding. Use provided domain name (if not provided). """
 | 
					        """ Perform binding. Use provided domain name (if not provided). """
 | 
				
			||||||
        while self.bound is None and self._owner.Process(1): pass
 | 
					        while self.bound is None and self._owner.Process(1): pass
 | 
				
			||||||
        resp=self._owner.SendAndWaitForResponse(Protocol('bind',attrs={'name':domain},xmlns=NS_COMPONENT_1))
 | 
					        resp=self._owner.SendAndWaitForResponse(Protocol('bind',attrs={'name':domain},xmlns=NS_COMPONENT_1))
 | 
				
			||||||
        if resp and resp.getAttr('error'):
 | 
					        if resp and resp.getAttr('error'):
 | 
				
			||||||
            self.DEBUG('Binding failed: %s.'%resp.getAttr('error'),'error')
 | 
					            self.DEBUG('Binding failed: %s.'%resp.getAttr('error'),'error')
 | 
				
			||||||
        elif resp:
 | 
					        elif resp:
 | 
				
			||||||
            self.DEBUG('Successfully bound.','ok')
 | 
					            self.DEBUG('Successfully bound.','ok')
 | 
				
			||||||
            return 'ok'
 | 
					            return 'ok'
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.DEBUG('Binding failed: timeout expired.','error')
 | 
					            self.DEBUG('Binding failed: timeout expired.','error')
 | 
				
			||||||
            return ''
 | 
					            return ''
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -149,11 +149,11 @@ class CommonClient:
 | 
				
			||||||
        """ Example of reconnection method. In fact, it can be used to batch connection and auth as well. """
 | 
					        """ Example of reconnection method. In fact, it can be used to batch connection and auth as well. """
 | 
				
			||||||
        handlerssave=self.Dispatcher.dumpHandlers()
 | 
					        handlerssave=self.Dispatcher.dumpHandlers()
 | 
				
			||||||
        self.Dispatcher.PlugOut()
 | 
					        self.Dispatcher.PlugOut()
 | 
				
			||||||
        if self.__dict__.has_key('NonSASL'): self.NonSASL.PlugOut()
 | 
					        if self.__dict__.has_key('NonSASL'): self.NonSASL.PlugOut()
 | 
				
			||||||
        if self.__dict__.has_key('SASL'): self.SASL.PlugOut()
 | 
					        if self.__dict__.has_key('SASL'): self.SASL.PlugOut()
 | 
				
			||||||
        if self.__dict__.has_key('TLS'): self.TLS.PlugOut()
 | 
					        if self.__dict__.has_key('TLS'): self.TLS.PlugOut()
 | 
				
			||||||
        if self.__dict__.has_key('HTTPPROXYsocket'): self.HTTPPROXYsocket.PlugOut()
 | 
					        if self.__dict__.has_key('HTTPPROXYsocket'): self.HTTPPROXYsocket.PlugOut()
 | 
				
			||||||
        if self.__dict__.has_key('TCPsocket'): self.TCPsocket.PlugOut()
 | 
					        if self.__dict__.has_key('TCPsocket'): self.TCPsocket.PlugOut()
 | 
				
			||||||
        if not self.connect(server=self._Server,proxy=self._Proxy): return
 | 
					        if not self.connect(server=self._Server,proxy=self._Proxy): return
 | 
				
			||||||
        if not self.auth(self._User,self._Password,self._Resource): return
 | 
					        if not self.auth(self._User,self._Password,self._Resource): return
 | 
				
			||||||
        self.Dispatcher.restoreHandlers(handlerssave)
 | 
					        self.Dispatcher.restoreHandlers(handlerssave)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
## $Id: commands.py,v 1.11 2005/11/30 17:03:11 normanr Exp $
 | 
					## $Id: commands.py,v 1.11 2005/11/30 17:03:11 normanr Exp $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Ad-Hoc Command manager
 | 
					## Ad-Hoc Command manager
 | 
				
			||||||
## Mike Albon (c) 5th January 2005
 | 
					## Mike Albon (c) 5th January 2005
 | 
				
			||||||
| 
						 | 
					@ -125,7 +125,7 @@ class Commands(PlugIn):
 | 
				
			||||||
                conn.send(Error(request,ERR_ITEM_NOT_FOUND))
 | 
					                conn.send(Error(request,ERR_ITEM_NOT_FOUND))
 | 
				
			||||||
            raise NodeProcessed
 | 
					            raise NodeProcessed
 | 
				
			||||||
        elif typ == 'info':
 | 
					        elif typ == 'info':
 | 
				
			||||||
            return {'ids':[{'category':'automation','type':'command-list'}],'features':[]}
 | 
					            return {'ids':[{'category':'automation','type':'command-list'}],'features':[]}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def addCommand(self,name,cmddisco,cmdexecute,jid=''):
 | 
					    def addCommand(self,name,cmddisco,cmdexecute,jid=''):
 | 
				
			||||||
        """The method to call if adding a new command to the session, the requred parameters of cmddisco and cmdexecute are the methods to enable that command to be executed"""
 | 
					        """The method to call if adding a new command to the session, the requred parameters of cmddisco and cmdexecute are the methods to enable that command to be executed"""
 | 
				
			||||||
| 
						 | 
					@ -197,7 +197,7 @@ class Command_Handler_Prototype(PlugIn):
 | 
				
			||||||
        self.sessioncount = 0
 | 
					        self.sessioncount = 0
 | 
				
			||||||
        self.sessions = {}
 | 
					        self.sessions = {}
 | 
				
			||||||
        # Disco information for command list pre-formatted as a tuple
 | 
					        # Disco information for command list pre-formatted as a tuple
 | 
				
			||||||
        self.discoinfo = {'ids':[{'category':'automation','type':'command-node','name':self.description}],'features': self.discofeatures}
 | 
					        self.discoinfo = {'ids':[{'category':'automation','type':'command-node','name':self.description}],'features': self.discofeatures}
 | 
				
			||||||
        self._jid = jid
 | 
					        self._jid = jid
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    def plugin(self,owner):
 | 
					    def plugin(self,owner):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ class Debug:
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  # active_flags are those that will trigger output
 | 
					                  # active_flags are those that will trigger output
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  active_flags = None,
 | 
					                  active_flags = None,
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  # Log file should be file object or file namne
 | 
					                  # Log file should be file object or file namne
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@ class Debug:
 | 
				
			||||||
                  # with prefix = chr(27) + '[34m'
 | 
					                  # with prefix = chr(27) + '[34m'
 | 
				
			||||||
                  #      sufix = chr(27) + '[37;1m\n'
 | 
					                  #      sufix = chr(27) + '[37;1m\n'
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  prefix = 'DEBUG: ',
 | 
					                  prefix = 'DEBUG: ',
 | 
				
			||||||
                  sufix = '\n',
 | 
					                  sufix = '\n',
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  # If you want unix style timestamps, 
 | 
					                  # If you want unix style timestamps, 
 | 
				
			||||||
| 
						 | 
					@ -140,7 +140,7 @@ class Debug:
 | 
				
			||||||
                  #  1 before prefix, good when prefix is a string
 | 
					                  #  1 before prefix, good when prefix is a string
 | 
				
			||||||
                  #  2 after prefix, good when prefix is a color
 | 
					                  #  2 after prefix, good when prefix is a color
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  time_stamp = 0,
 | 
					                  time_stamp = 0,
 | 
				
			||||||
                  #
 | 
					                  #
 | 
				
			||||||
                  # flag_show should normaly be of, but can be turned on to get a
 | 
					                  # flag_show should normaly be of, but can be turned on to get a
 | 
				
			||||||
                  # good view of what flags are actually used for calls,
 | 
					                  # good view of what flags are actually used for calls,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -124,7 +124,7 @@ class Dispatcher(PlugIn):
 | 
				
			||||||
            _pendingException = self._pendingExceptions.pop()
 | 
					            _pendingException = self._pendingExceptions.pop()
 | 
				
			||||||
            raise _pendingException[0], _pendingException[1], _pendingException[2]
 | 
					            raise _pendingException[0], _pendingException[1], _pendingException[2]
 | 
				
			||||||
        if self._owner.Connection.pending_data(timeout):
 | 
					        if self._owner.Connection.pending_data(timeout):
 | 
				
			||||||
            try: data=self._owner.Connection.receive()
 | 
					            try: data=self._owner.Connection.receive()
 | 
				
			||||||
            except IOError: return
 | 
					            except IOError: return
 | 
				
			||||||
            self.Stream.Parse(data)
 | 
					            self.Stream.Parse(data)
 | 
				
			||||||
            if len(self._pendingExceptions) > 0:
 | 
					            if len(self._pendingExceptions) > 0:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
##   GNU General Public License for more details.
 | 
					##   GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# $Id: features.py,v 1.22 2005/09/30 20:13:04 mikealbon Exp $
 | 
					# $Id: features.py,v 1.22 2005/09/30 20:13:04 mikealbon Exp $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
This module contains variable stuff that is not worth splitting into separate modules.
 | 
					This module contains variable stuff that is not worth splitting into separate modules.
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,7 @@ def discoverInfo(disp,jid,node=None):
 | 
				
			||||||
    """ Query remote object about info that it publishes. Returns identities and features lists."""
 | 
					    """ Query remote object about info that it publishes. Returns identities and features lists."""
 | 
				
			||||||
    """ According to JEP-0030:
 | 
					    """ According to JEP-0030:
 | 
				
			||||||
        query MAY have node attribute
 | 
					        query MAY have node attribute
 | 
				
			||||||
        identity: MUST HAVE category and name attributes and MAY HAVE type attribute.
 | 
					        identity: MUST HAVE category and name attributes and MAY HAVE type attribute.
 | 
				
			||||||
        feature: MUST HAVE var attribute"""
 | 
					        feature: MUST HAVE var attribute"""
 | 
				
			||||||
    identities , features = [] , []
 | 
					    identities , features = [] , []
 | 
				
			||||||
    for i in _discover(disp,NS_DISCO_INFO,jid,node):
 | 
					    for i in _discover(disp,NS_DISCO_INFO,jid,node):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
##   GNU General Public License for more details.
 | 
					##   GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# $Id: protocol.py,v 1.52 2006/01/09 22:08:57 normanr Exp $
 | 
					# $Id: protocol.py,v 1.52 2006/01/09 22:08:57 normanr Exp $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
Protocol module contains tools that is needed for processing of 
 | 
					Protocol module contains tools that is needed for processing of 
 | 
				
			||||||
| 
						 | 
					@ -21,64 +21,64 @@ xmpp-related data structures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from simplexml import Node,ustr
 | 
					from simplexml import Node,ustr
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
NS_ACTIVITY     ='http://jabber.org/protocol/activity'                  # JEP-0108
 | 
					NS_ACTIVITY     ='http://jabber.org/protocol/activity'                  # JEP-0108
 | 
				
			||||||
NS_ADDRESS      ='http://jabber.org/protocol/address'                   # JEP-0033
 | 
					NS_ADDRESS      ='http://jabber.org/protocol/address'                   # JEP-0033
 | 
				
			||||||
NS_AGENTS       ='jabber:iq:agents'
 | 
					NS_AGENTS       ='jabber:iq:agents'
 | 
				
			||||||
NS_AMP          ='http://jabber.org/protocol/amp'
 | 
					NS_AMP          ='http://jabber.org/protocol/amp'
 | 
				
			||||||
NS_AMP_ERRORS   =NS_AMP+'#errors'
 | 
					NS_AMP_ERRORS   =NS_AMP+'#errors'
 | 
				
			||||||
NS_AUTH         ='jabber:iq:auth'
 | 
					NS_AUTH         ='jabber:iq:auth'
 | 
				
			||||||
NS_BIND         ='urn:ietf:params:xml:ns:xmpp-bind'
 | 
					NS_BIND         ='urn:ietf:params:xml:ns:xmpp-bind'
 | 
				
			||||||
NS_BROWSE       ='jabber:iq:browse'
 | 
					NS_BROWSE       ='jabber:iq:browse'
 | 
				
			||||||
NS_BYTESTREAM   ='http://jabber.org/protocol/bytestreams'               # JEP-0065
 | 
					NS_BYTESTREAM   ='http://jabber.org/protocol/bytestreams'               # JEP-0065
 | 
				
			||||||
NS_CAPS         ='http://jabber.org/protocol/caps'                      # JEP-0115
 | 
					NS_CAPS         ='http://jabber.org/protocol/caps'                      # JEP-0115
 | 
				
			||||||
NS_CHATSTATES   ='http://jabber.org/protocol/chatstates'                # JEP-0085
 | 
					NS_CHATSTATES   ='http://jabber.org/protocol/chatstates'                # JEP-0085
 | 
				
			||||||
NS_CLIENT       ='jabber:client'
 | 
					NS_CLIENT       ='jabber:client'
 | 
				
			||||||
NS_COMMANDS     ='http://jabber.org/protocol/commands'
 | 
					NS_COMMANDS     ='http://jabber.org/protocol/commands'
 | 
				
			||||||
NS_COMPONENT_ACCEPT='jabber:component:accept'
 | 
					NS_COMPONENT_ACCEPT='jabber:component:accept'
 | 
				
			||||||
NS_COMPONENT_1  ='http://jabberd.jabberstudio.org/ns/component/1.0'
 | 
					NS_COMPONENT_1  ='http://jabberd.jabberstudio.org/ns/component/1.0'
 | 
				
			||||||
NS_COMPRESS     ='http://jabber.org/protocol/compress'                  # JEP-0138
 | 
					NS_COMPRESS     ='http://jabber.org/protocol/compress'                  # JEP-0138
 | 
				
			||||||
NS_CONFERENCE   ='jabber:x:conference'
 | 
					NS_CONFERENCE   ='jabber:x:conference'
 | 
				
			||||||
NS_DATA         ='jabber:x:data'                                        # JEP-0004
 | 
					NS_DATA         ='jabber:x:data'                                        # JEP-0004
 | 
				
			||||||
NS_DELAY        ='jabber:x:delay'
 | 
					NS_DELAY        ='jabber:x:delay'
 | 
				
			||||||
NS_DIALBACK     ='jabber:server:dialback'
 | 
					NS_DIALBACK     ='jabber:server:dialback'
 | 
				
			||||||
NS_DISCO        ='http://jabber.org/protocol/disco'
 | 
					NS_DISCO        ='http://jabber.org/protocol/disco'
 | 
				
			||||||
NS_DISCO_INFO   =NS_DISCO+'#info'
 | 
					NS_DISCO_INFO   =NS_DISCO+'#info'
 | 
				
			||||||
NS_DISCO_ITEMS  =NS_DISCO+'#items'
 | 
					NS_DISCO_ITEMS  =NS_DISCO+'#items'
 | 
				
			||||||
NS_ENCRYPTED    ='jabber:x:encrypted'                                   # JEP-0027
 | 
					NS_ENCRYPTED    ='jabber:x:encrypted'                                   # JEP-0027
 | 
				
			||||||
NS_EVENT        ='jabber:x:event'                                       # JEP-0022
 | 
					NS_EVENT        ='jabber:x:event'                                       # JEP-0022
 | 
				
			||||||
NS_FEATURE      ='http://jabber.org/protocol/feature-neg'  
 | 
					NS_FEATURE      ='http://jabber.org/protocol/feature-neg'  
 | 
				
			||||||
NS_FILE         ='http://jabber.org/protocol/si/profile/file-transfer'  # JEP-0096
 | 
					NS_FILE         ='http://jabber.org/protocol/si/profile/file-transfer'  # JEP-0096
 | 
				
			||||||
NS_GEOLOC       ='http://jabber.org/protocol/geoloc'                    # JEP-0080
 | 
					NS_GEOLOC       ='http://jabber.org/protocol/geoloc'                    # JEP-0080
 | 
				
			||||||
NS_GROUPCHAT    ='gc-1.0'
 | 
					NS_GROUPCHAT    ='gc-1.0'
 | 
				
			||||||
NS_HTTP_AUTH    ='http://jabber.org/protocol/http-auth'         # JEP-0070
 | 
					NS_HTTP_AUTH    ='http://jabber.org/protocol/http-auth'         # JEP-0070
 | 
				
			||||||
NS_HTTP_BIND    ='http://jabber.org/protocol/httpbind'                  # JEP-0124
 | 
					NS_HTTP_BIND    ='http://jabber.org/protocol/httpbind'                  # JEP-0124
 | 
				
			||||||
NS_IBB          ='http://jabber.org/protocol/ibb'
 | 
					NS_IBB          ='http://jabber.org/protocol/ibb'
 | 
				
			||||||
NS_INVISIBLE    ='presence-invisible'                                   # Jabberd2
 | 
					NS_INVISIBLE    ='presence-invisible'                                   # Jabberd2
 | 
				
			||||||
NS_IQ           ='iq'                                                   # Jabberd2
 | 
					NS_IQ           ='iq'                                                   # Jabberd2
 | 
				
			||||||
NS_LAST         ='jabber:iq:last'
 | 
					NS_LAST         ='jabber:iq:last'
 | 
				
			||||||
NS_MESSAGE      ='message'                                              # Jabberd2
 | 
					NS_MESSAGE      ='message'                                              # Jabberd2
 | 
				
			||||||
NS_MOOD         ='http://jabber.org/protocol/mood'                      # JEP-0107
 | 
					NS_MOOD         ='http://jabber.org/protocol/mood'                      # JEP-0107
 | 
				
			||||||
NS_MUC          ='http://jabber.org/protocol/muc'
 | 
					NS_MUC          ='http://jabber.org/protocol/muc'
 | 
				
			||||||
NS_MUC_USER     =NS_MUC+'#user'
 | 
					NS_MUC_USER     =NS_MUC+'#user'
 | 
				
			||||||
NS_MUC_ADMIN    =NS_MUC+'#admin'
 | 
					NS_MUC_ADMIN    =NS_MUC+'#admin'
 | 
				
			||||||
NS_MUC_OWNER    =NS_MUC+'#owner'
 | 
					NS_MUC_OWNER    =NS_MUC+'#owner'
 | 
				
			||||||
NS_OFFLINE      ='http://www.jabber.org/jeps/jep-0030.html'             # JEP-0013
 | 
					NS_OFFLINE      ='http://www.jabber.org/jeps/jep-0030.html'             # JEP-0013
 | 
				
			||||||
NS_PHYSLOC      ='http://jabber.org/protocol/physloc'                   # JEP-0112
 | 
					NS_PHYSLOC      ='http://jabber.org/protocol/physloc'                   # JEP-0112
 | 
				
			||||||
NS_PRESENCE     ='presence'                                             # Jabberd2
 | 
					NS_PRESENCE     ='presence'                                             # Jabberd2
 | 
				
			||||||
NS_PRIVACY      ='jabber:iq:privacy'
 | 
					NS_PRIVACY      ='jabber:iq:privacy'
 | 
				
			||||||
NS_PRIVATE      ='jabber:iq:private'
 | 
					NS_PRIVATE      ='jabber:iq:private'
 | 
				
			||||||
NS_PUBSUB       ='http://jabber.org/protocol/pubsub'                    # JEP-0060
 | 
					NS_PUBSUB       ='http://jabber.org/protocol/pubsub'                    # JEP-0060
 | 
				
			||||||
NS_REGISTER     ='jabber:iq:register'
 | 
					NS_REGISTER     ='jabber:iq:register'
 | 
				
			||||||
NS_ROSTER       ='jabber:iq:roster'
 | 
					NS_ROSTER       ='jabber:iq:roster'
 | 
				
			||||||
NS_ROSTERX      ='http://jabber.org/protocol/rosterx'                   # JEP-0144
 | 
					NS_ROSTERX      ='http://jabber.org/protocol/rosterx'                   # JEP-0144
 | 
				
			||||||
NS_RPC          ='jabber:iq:rpc'                                        # JEP-0009
 | 
					NS_RPC          ='jabber:iq:rpc'                                        # JEP-0009
 | 
				
			||||||
NS_SASL         ='urn:ietf:params:xml:ns:xmpp-sasl'
 | 
					NS_SASL         ='urn:ietf:params:xml:ns:xmpp-sasl'
 | 
				
			||||||
NS_SEARCH       ='jabber:iq:search'
 | 
					NS_SEARCH       ='jabber:iq:search'
 | 
				
			||||||
NS_SERVER       ='jabber:server'
 | 
					NS_SERVER       ='jabber:server'
 | 
				
			||||||
NS_SESSION      ='urn:ietf:params:xml:ns:xmpp-session'
 | 
					NS_SESSION      ='urn:ietf:params:xml:ns:xmpp-session'
 | 
				
			||||||
NS_SI           ='http://jabber.org/protocol/si'                        # JEP-0096
 | 
					NS_SI           ='http://jabber.org/protocol/si'                        # JEP-0096
 | 
				
			||||||
NS_SI_PUB       ='http://jabber.org/protocol/sipub'                     # JEP-0137
 | 
					NS_SI_PUB       ='http://jabber.org/protocol/sipub'                     # JEP-0137
 | 
				
			||||||
NS_SIGNED       ='jabber:x:signed'                                      # JEP-0027
 | 
					NS_SIGNED       ='jabber:x:signed'                                      # JEP-0027
 | 
				
			||||||
NS_STANZAS      ='urn:ietf:params:xml:ns:xmpp-stanzas'
 | 
					NS_STANZAS      ='urn:ietf:params:xml:ns:xmpp-stanzas'
 | 
				
			||||||
NS_STREAM       ='http://affinix.com/jabber/stream'
 | 
					NS_STREAM       ='http://affinix.com/jabber/stream'
 | 
				
			||||||
NS_STREAMS      ='http://etherx.jabber.org/streams'
 | 
					NS_STREAMS      ='http://etherx.jabber.org/streams'
 | 
				
			||||||
| 
						 | 
					@ -90,10 +90,10 @@ NS_GMAILNOTIFY  ='google:mail:notify'
 | 
				
			||||||
NS_GTALKSETTING ='google:setting'
 | 
					NS_GTALKSETTING ='google:setting'
 | 
				
			||||||
NS_VCARD_UPDATE =NS_VCARD+':x:update'
 | 
					NS_VCARD_UPDATE =NS_VCARD+':x:update'
 | 
				
			||||||
NS_VERSION      ='jabber:iq:version'
 | 
					NS_VERSION      ='jabber:iq:version'
 | 
				
			||||||
NS_WAITINGLIST  ='http://jabber.org/protocol/waitinglist'               # JEP-0130
 | 
					NS_WAITINGLIST  ='http://jabber.org/protocol/waitinglist'               # JEP-0130
 | 
				
			||||||
NS_XHTML_IM     ='http://jabber.org/protocol/xhtml-im'                  # JEP-0071
 | 
					NS_XHTML_IM     ='http://jabber.org/protocol/xhtml-im'                  # JEP-0071
 | 
				
			||||||
NS_DATA_LAYOUT  ='http://jabber.org/protocol/xdata-layout'              # JEP-0141
 | 
					NS_DATA_LAYOUT  ='http://jabber.org/protocol/xdata-layout'              # JEP-0141
 | 
				
			||||||
NS_DATA_VALIDATE='http://jabber.org/protocol/xdata-validate'            # JEP-0122
 | 
					NS_DATA_VALIDATE='http://jabber.org/protocol/xdata-validate'            # JEP-0122
 | 
				
			||||||
NS_XMPP_STREAMS ='urn:ietf:params:xml:ns:xmpp-streams'
 | 
					NS_XMPP_STREAMS ='urn:ietf:params:xml:ns:xmpp-streams'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xmpp_stream_error_conditions="""
 | 
					xmpp_stream_error_conditions="""
 | 
				
			||||||
| 
						 | 
					@ -695,7 +695,7 @@ class DataForm(Node):
 | 
				
			||||||
        for field in self.getTags('field'):
 | 
					        for field in self.getTags('field'):
 | 
				
			||||||
            name=field.getAttr('var')
 | 
					            name=field.getAttr('var')
 | 
				
			||||||
            typ=field.getType()
 | 
					            typ=field.getType()
 | 
				
			||||||
            if type(typ) in [type(''),type(u'')] and typ[-6:]=='-multi':
 | 
					            if type(typ) in [type(''),type(u'')] and typ[-6:]=='-multi':
 | 
				
			||||||
                val=[]
 | 
					                val=[]
 | 
				
			||||||
                for i in field.getTags('value'): val.append(i.getData())
 | 
					                for i in field.getTags('value'): val.append(i.getData())
 | 
				
			||||||
            else: val=field.getTagData('value')
 | 
					            else: val=field.getTagData('value')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,7 @@ class error:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TCPsocket(PlugIn):
 | 
					class TCPsocket(PlugIn):
 | 
				
			||||||
    """ This class defines direct TCP connection method. """
 | 
					    """ This class defines direct TCP connection method. """
 | 
				
			||||||
    def __init__(self, server=None, use_srv=True):
 | 
					    def __init__(self, server=None, use_srv=True):
 | 
				
			||||||
        """ Cache connection point 'server'. 'server' is the tuple of (host, port)
 | 
					        """ Cache connection point 'server'. 'server' is the tuple of (host, port)
 | 
				
			||||||
            absolutely the same as standard tcp socket uses. """
 | 
					            absolutely the same as standard tcp socket uses. """
 | 
				
			||||||
        PlugIn.__init__(self)
 | 
					        PlugIn.__init__(self)
 | 
				
			||||||
| 
						 | 
					@ -165,12 +165,12 @@ class HTTPPROXYsocket(TCPsocket):
 | 
				
			||||||
    """ HTTP (CONNECT) proxy connection class. Uses TCPsocket as the base class
 | 
					    """ HTTP (CONNECT) proxy connection class. Uses TCPsocket as the base class
 | 
				
			||||||
        redefines only connect method. Allows to use HTTP proxies like squid with
 | 
					        redefines only connect method. Allows to use HTTP proxies like squid with
 | 
				
			||||||
        (optionally) simple authentication (using login and password). """
 | 
					        (optionally) simple authentication (using login and password). """
 | 
				
			||||||
    def __init__(self,proxy,server,use_srv=True):
 | 
					    def __init__(self,proxy,server,use_srv=True):
 | 
				
			||||||
        """ Caches proxy and target addresses.
 | 
					        """ Caches proxy and target addresses.
 | 
				
			||||||
            'proxy' argument is a dictionary with mandatory keys 'host' and 'port' (proxy address)
 | 
					            'proxy' argument is a dictionary with mandatory keys 'host' and 'port' (proxy address)
 | 
				
			||||||
            and optional keys 'user' and 'password' to use for authentication.
 | 
					            and optional keys 'user' and 'password' to use for authentication.
 | 
				
			||||||
            'server' argument is a tuple of host and port - just like TCPsocket uses. """
 | 
					            'server' argument is a tuple of host and port - just like TCPsocket uses. """
 | 
				
			||||||
        TCPsocket.__init__(self,server,use_srv)
 | 
					        TCPsocket.__init__(self,server,use_srv)
 | 
				
			||||||
        self.DBG_LINE=DBG_CONNECT_PROXY
 | 
					        self.DBG_LINE=DBG_CONNECT_PROXY
 | 
				
			||||||
        self._proxy=proxy
 | 
					        self._proxy=proxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,23 +196,23 @@ class HTTPPROXYsocket(TCPsocket):
 | 
				
			||||||
            connector.append('Proxy-Authorization: Basic '+credentials)
 | 
					            connector.append('Proxy-Authorization: Basic '+credentials)
 | 
				
			||||||
        connector.append('\r\n')
 | 
					        connector.append('\r\n')
 | 
				
			||||||
        self.send('\r\n'.join(connector))
 | 
					        self.send('\r\n'.join(connector))
 | 
				
			||||||
        try: reply = self.receive().replace('\r','')
 | 
					        try: reply = self.receive().replace('\r','')
 | 
				
			||||||
        except IOError:
 | 
					        except IOError:
 | 
				
			||||||
            self.DEBUG('Proxy suddenly disconnected','error')
 | 
					            self.DEBUG('Proxy suddenly disconnected','error')
 | 
				
			||||||
            self._owner.disconnected()
 | 
					            self._owner.disconnected()
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        try: proto,code,desc=reply.split('\n')[0].split(' ',2)
 | 
					        try: proto,code,desc=reply.split('\n')[0].split(' ',2)
 | 
				
			||||||
        except: raise error('Invalid proxy reply')
 | 
					        except: raise error('Invalid proxy reply')
 | 
				
			||||||
        if code<>'200':
 | 
					        if code<>'200':
 | 
				
			||||||
            self.DEBUG('Invalid proxy reply: %s %s %s'%(proto,code,desc),'error')
 | 
					            self.DEBUG('Invalid proxy reply: %s %s %s'%(proto,code,desc),'error')
 | 
				
			||||||
            self._owner.disconnected()
 | 
					            self._owner.disconnected()
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        while reply.find('\n\n') == -1:
 | 
					        while reply.find('\n\n') == -1:
 | 
				
			||||||
            try: reply += self.receive().replace('\r','')
 | 
					            try: reply += self.receive().replace('\r','')
 | 
				
			||||||
            except IOError:
 | 
					            except IOError:
 | 
				
			||||||
                self.DEBUG('Proxy suddenly disconnected','error')
 | 
					                self.DEBUG('Proxy suddenly disconnected','error')
 | 
				
			||||||
                self._owner.disconnected()
 | 
					                self._owner.disconnected()
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
        self.DEBUG("Authentification successfull. Jabber server contacted.",'ok')
 | 
					        self.DEBUG("Authentification successfull. Jabber server contacted.",'ok')
 | 
				
			||||||
        return 'ok'
 | 
					        return 'ok'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -256,13 +256,13 @@ class TLS(PlugIn):
 | 
				
			||||||
        self._owner.Connection.send('<starttls xmlns="%s"/>'%NS_TLS)
 | 
					        self._owner.Connection.send('<starttls xmlns="%s"/>'%NS_TLS)
 | 
				
			||||||
        raise NodeProcessed
 | 
					        raise NodeProcessed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def pending_data(self,timeout=0):
 | 
					    def pending_data(self,timeout=0):
 | 
				
			||||||
        """ Returns true if there possible is a data ready to be read. """
 | 
					        """ Returns true if there possible is a data ready to be read. """
 | 
				
			||||||
        return self._tcpsock._seen_data or select.select([self._tcpsock._sock],[],[],timeout)[0]
 | 
					        return self._tcpsock._seen_data or select.select([self._tcpsock._sock],[],[],timeout)[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _startSSL(self):
 | 
					    def _startSSL(self):
 | 
				
			||||||
        """ Immidiatedly switch socket to TLS mode. Used internally."""
 | 
					        """ Immidiatedly switch socket to TLS mode. Used internally."""
 | 
				
			||||||
        """ Here we should switch pending_data to hint mode."""
 | 
					        """ Here we should switch pending_data to hint mode."""
 | 
				
			||||||
        tcpsock=self._owner.Connection
 | 
					        tcpsock=self._owner.Connection
 | 
				
			||||||
        tcpsock._sslObj    = socket.ssl(tcpsock._sock, None, None)
 | 
					        tcpsock._sslObj    = socket.ssl(tcpsock._sock, None, None)
 | 
				
			||||||
        tcpsock._sslIssuer = tcpsock._sslObj.issuer()
 | 
					        tcpsock._sslIssuer = tcpsock._sslObj.issuer()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue