Changeset 144

Show
Ignore:
Timestamp:
05/08/02 10:03:06 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/Client.py

    r143 r144  
    4848 
    4949from xml.sax.saxutils import escape, quoteattr 
    50 from Foundation.Jabber import Base 
    5150from Foundation.Jabber import ClientNodes 
    5251from Foundation.Jabber import JID 
     52from Foundation.Jabber.Base import JabberConnection 
    5353from Foundation import SubjectObserver 
    5454 
     
    5757#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5858 
    59 class Client(Base.BasicClient): 
     59class Client(JabberConnection): 
    6060    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6161    #~ Constants / Variables / Etc.  
     
    8585    def __init__(self, *args, **kw): 
    8686        self.stream = SubjectObserver.BidableCategorySubject() 
     87        self.stream.IncludeSend = kw.get('xmlsend', 0) 
     88        self.stream.IncludeRecv = kw.get('xmlrecv', 0) 
    8789        self.information = SubjectObserver.AttributedSubject.AttributedSubject() 
    88         apply(Base.BasicClient.__init__, (self,) + args, kw) 
     90        self.information.jid = JID.JID() 
     91        self.information.authorized = 0 
     92        apply(self.__super.__init__, (self,) + args, kw) 
    8993         
    9094        self.SupportedNS = [] 
     
    100104        return str(self.__NextID) 
    101105 
     106    def _SocketRecv(self, limit=8192): 
     107        """Overrides socket access so that stream events can be created.""" 
     108        result = self.__super._SocketRecv(self, limit) 
     109        if self.stream.IncludeRecv and result: self.stream.UpdateObservers(xmlrecv=result) 
     110        return result 
     111 
     112    def _SocketSend(self, data): 
     113        """Overrides socket access so that stream events can be created.""" 
     114        if self.stream.IncludeSend and data: self.stream.UpdateObservers(xmlsend=data) 
     115        return self.__super._SocketSend(self, data) 
     116 
    102117    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    103118    #~ Public Methods  
    104119    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     120 
     121    def Shutdown(self): 
     122        """Politely disconnects the socket and parser from the jabber stream""" 
     123        self.__super.Shutdown(self) 
     124        self.information.jid = JID.JID() 
     125        self.information.authorized = 0 
    105126 
    106127    def Authenticate(self, username, password, resource, callback=None): 
     
    231252        return self.Presence(toJID=toJID, type=type) 
    232253 
    233  
     254#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     255# Make a super  
     256Client._Client__super = super(Client) 
     257 
     258 
  • trunk/RBJabber/RBJabber/ClientNodes.py

    r143 r144  
    103103 
    104104    def _xmlInitStarted(self): 
     105        self._client.ServerJID = self.from_ 
    105106        self._client.stream.UpdateObservers(settings=self) 
    106107    def _addElement(self, namespace, node, element): pass 
  • trunk/RBJabber/RBJabber/Conference.py

    r143 r144  
    114114        return self.JC().Query('jabber:iq:conference', toJID=self.ConferenceJID, type='get', callback=callback) 
    115115 
    116     def JoinAs(self, Nick, Secret='', callback=None): 
     116    def JoinAs(self, Nick, Secret='', Privacy=0, callback=None): 
    117117        """Joins the conference using Nick(s), and Secret if need be.   
    118118         
    119119        Returns iqQuery object.""" 
    120         if not isinstance(Nick, (list, tuple)): Nick = (Nick,) 
    121         xmlNick = ''.join(['<nick>%s</nick>' % x for x in Nick]) 
    122         xmlSecret = Secret and ('<secret>%s</secret>' % Secret) or '' 
     120        xml = '' 
     121        if Nick: 
     122            if not isinstance(Nick, (list, tuple)): Nick = (Nick,) 
     123            xml = ''.join(['<nick>%s</nick>' % x for x in Nick]) 
     124        if Secret: xml += '<secret>%s</secret>' % Secret 
     125        if Privacy: xml += '<privacy/>' 
     126 
    123127        self.Presence() 
    124         return self.JC().Query('jabber:iq:conference', toJID=self.ConferenceJID, type='set', xml=xmlNick + xmlSecret, callback=callback) 
     128 
     129        return self.JC().Query('jabber:iq:conference', toJID=self.ConferenceJID, type='set', xml=xml, callback=callback) 
    125130 
    126131    def ChangeNick(self, Nick, callback=None): 
  • trunk/RBJabber/RBJabber/JabberConnection.py

    r143 r144  
    5959#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6060 
    61 _xmlJabberHeader = '''<?xml version="1.0" encoding="UTF-8" ?><stream:stream to="%s" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">''' 
     61_xmlJabberHeader = '''<?xml version="1.0" encoding="UTF-8" ?><stream:stream to="%s" xmlns="%s" xmlns:stream="http://etherx.jabber.org/streams">''' 
    6262_xmlJabberFooter = '''</stream:stream>''' 
    6363 
     
    6666#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6767 
    68 class BasicClient(XMLBuilderMixin, SmartSelect.SmartSelectClientBase): 
     68class JabberConnection(XMLBuilderMixin, SmartSelect.SmartSelectClientBase): 
    6969    """Very basic Jabber client, including: 
    7070        - Smart select socket handling,  
     
    8484    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8585 
    86     def __init__(self, JabberServerURL, port=5222, fileIn=None, fileOut=None): 
     86    def __init__(self, JabberServerURL, port=5222, ServerJID=None, namespace='jabber:client', fileIn=None, fileOut=None, **kw): 
     87        """Creates a Socket and XML parser to handle connection to a Jabber server. 
     88 
     89        JabberServerURL & port specify how the socket is connected to Jabber server,  
     90        ServerJID is to be set if the ServerJID is different than the JabberServerURL hostname, and 
     91        fileIn and fileOut should be file-like-objects to receive the influx and outflux streams. 
     92 
     93        """ 
    8794        self._SetDebug(fileIn, fileOut) 
    8895 
     
    96103        self._socket.connect((params[0], port)) 
    97104        self.fileno = self._socket.fileno 
    98         self.ServerJID = JID.JID(params[0]) 
     105         
     106        self.ServerJID = JID.JID(ServerJID or params[0]) 
    99107 
    100108        # Create our xml parser 
     
    102110 
    103111        # Send the initial header 
    104         self.SendXML(_xmlJabberHeader % self.ServerJID
     112        self.SendXML(_xmlJabberHeader % (self.ServerJID, namespace)
    105113 
    106114    def __del__(self): 
     
    165173    def _ProcessRead(self): 
    166174        """Called by the SmartSelect mechanism when the socket is ready to be read from.""" 
    167         data = self._socket.recv(8192
     175        data = self._SocketRecv(
    168176        if self._fileIn: print >> self._fileIn, data 
    169177        self._parser.Parse(data) 
     
    174182    def _ProcessWrite(self): 
    175183        """Called by the SmartSelect mechanism when the socket is ready to be written to.""" 
    176         nSent = self._socket.send(self._sendData) 
     184        nSent = self._SocketSend(self._sendData) 
    177185        if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
    178186        self._sendData = self._sendData[nSent:] 
     
    187195        self._sendData += xml 
    188196        while self._sendData and select.select([], [self._socket], []): 
    189             nSent = self._socket.send(self._sendData) 
     197            nSent = self._SocketSend(self._sendData) 
    190198            if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
    191199            self._sendData = self._sendData[nSent:] 
    192200 
     201    def _SocketRecv(self, limit=8192): 
     202        return self._socket.recv(limit) 
     203 
     204    def _SocketSend(self, data): 
     205        return self._socket.send(data) 
     206 
    193207# Keep the super around for speed 
    194 BasicClient._BasicClient__super = super(BasicClient
     208JabberConnection._JabberConnection__super = super(JabberConnection
  • trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py

    r125 r144  
    7171 
    7272class AttributedSubject(AttributedSubjectMixin, Subject):  
    73     pass 
     73    def AddObserver(self, observer, call=0): 
     74        Subject.AddObserver(self, observer) 
     75        if call: observer(self) 
    7476