Changeset 414

Show
Ignore:
Timestamp:
01/22/03 23:17:40 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBFoundation/RBFoundation/URIparser.py

    r406 r414  
    119119 
    120120    def __repr__(self): 
    121         return '<URI: %s>' % (self.geturi(),) 
     121        return '<%s>' % (self.geturi(),) 
    122122 
    123123    def __str__(self): 
  • trunk/RBTelepathy/RBTelepathy/Connection.py

    r413 r414  
    3737 
    3838    log = logging.getLogger('Connection') 
     39    StreamPacketHandlers = {} 
    3940    RoutedPacketHandlers = {} 
    40     StreamPacketHandlers = {} 
    4141 
    4242    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4545 
    4646    def __init__(self): 
     47        self.StreamPacketHandlers = self.StreamPacketHandlers.copy() 
    4748        self.RoutedPacketHandlers = self.RoutedPacketHandlers.copy() 
    48         self.StreamPacketHandlers = self.StreamPacketHandlers.copy() 
     49 
     50    def LoadDefaultHandlers(self): 
     51        pass 
    4952 
    5053    def SendPacket(self, *args, **kw): 
  • trunk/RBTelepathy/RBTelepathy/Packet/AuthenticationHandler.py

    r412 r414  
    2424#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2525 
     26import logging 
     27from xml.sax.saxutils import quoteattr as xmlquoteattr 
     28 
    2629from RBMBuilder import * 
    2730import RBMElements 
     31import URIAddress 
    2832 
    2933#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    3135#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3236 
    33 class AuthenticationElement(RBMElements.RootElementBase, XMLClassBuilder.XMLClassBuilderBaseMixin): 
     37class AuthenticationElement(RBMElements.RootElementBase, XMLClassBuilderObjectMixin): 
    3438    NamespaceSynonyms = RBNamespaceSynonyms 
    3539    DefaultNamespace = RBNamespaceSynonyms[None] 
    36     ElementFactories = XMLClassBuilder.ElementFactorySet({ 
     40    ElementFactories = ElementFactorySet({ 
     41            (RBMessagingNamespace, 'simple'): EF.Static(RBMElements.URIAddressElement), 
    3742            (RBMessagingNamespace, ): EF.Static(RBMElements.PacketChildElement), 
    3843        }) 
     44 
     45    def _xmlChildFactory(self, owner, parent, node, attributes, namespacemap): 
     46        return self.ElementFactorySet._GetElementFactory(owner, parent, node, attributes, namespacemap) 
    3947 
    4048#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4654 
    4755    ElementFactories = {(RBMessagingNamespace, 'authentication'): EF.Static(AuthenticationElement)} 
     56    StreamPacketHandlers = ElementFactories.keys() 
     57    RoutedPacketHandlers = () 
    4858 
    4959    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    5868 
    5969    def OnStreamPacket(self, connection, packet, *args, **kw): 
     70        self.log.debug('Received auth type=%r packet', packet._attributes.get('type', )) 
    6071        AuthType = packet._attributes['type'] 
    6172        try: 
     
    7182    def _EnableType(self, AuthType): 
    7283        klass = self.__class__ 
    73         self._ValidTypes[AuthType] = getattr(klass, AuthType) 
     84        self._ValidTypes[AuthType] = getattr(klass, '_type_'+AuthType) 
    7485 
    75     def _send_packet(self, AuthType, XMLBody=None): 
    76         xml = "<authentication xmlns='%s' type='%s'" % (namespace, AuthType) 
     86    def _send_packet(self, connection, AuthType, XMLBody=None): 
     87        xml = "<authentication xmlns='%s' type='%s'" % (RBMessagingNamespace, AuthType) 
    7788        if XMLBody: 
    7889            xml += ">" + XMLBody + "</authentication>" 
    7990        else: xml += "/>" 
     91        #print '* '*10 
     92        #print xml 
     93        #print 
    8094        connection.SendPacket(xml) 
    8195 
     
    8498class ServerAuthenticationHandler(AuthenticationBaseHandler): 
    8599    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     100    #~ Constants / Variables / Etc.  
     101    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     102 
     103    log = logging.getLogger('ServerAuthenticationHandler') 
     104 
     105    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    86106    #~ Public Methods  
    87107    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    88108 
    89109    def __init__(self): 
     110        AuthenticationBaseHandler.__init__(self) 
    90111        self._EnableType('query') 
    91112        self._EnableType('select') 
     
    96117 
    97118    def _type_query(self, connection, packet, *args, **kw): 
    98         self._reply_options(self, connection, packet, *args, **kw) 
     119        self._reply_options(connection, packet, *args, **kw) 
    99120 
    100121    def _reply_options(self, connection, packet, *args, **kw): 
    101         self._send_packet('options', '<simple/>') 
     122        self._send_packet(connection, 'options', '<simple/>') 
    102123 
    103124    def _type_select(self, connection, packet, *args, **kw): 
    104         self._reply_challenge(self, connection, packet, *args, **kw) 
     125        self._reply_challenge(connection, packet, *args, **kw) 
    105126 
    106127    def _reply_challenge(self, connection, packet, *args, **kw): 
    107128        self._EnableType('response') 
    108         self._send_packet('challenge', '<simple addr=""/>') 
     129        self._send_packet(connection, 'challenge', '<simple addr=""/>') 
    109130 
    110131    def _type_response(self, connection, packet, *args, **kw): 
    111         self._reply_success(self, connection, packet, *args, **kw) 
    112         self._reply_failure(self, connection, packet, *args, **kw) 
     132        try: 
     133            simple = packet._getElements(node='simple')[0] 
     134        except (LookupError), e: 
     135            raise ErrorTypes.AuthenticationError('Did not find selected response "simple"') 
     136 
     137        if simple.addr.network: 
     138            connection.OnAuthenticated(True, simple.addr) 
     139            self._reply_success(connection, packet, *args, **kw) 
     140        else: 
     141            connection.OnAuthenticated(False, None) 
     142            self._reply_failure(connection, packet, *args, **kw) 
    113143 
    114144    def _reply_success(self, connection, packet, *args, **kw): 
    115         connection.OnAuthenticated(True) 
    116         self._send_packet('success') 
     145        self._send_packet(connection, 'success') 
    117146 
    118147    def _reply_failure(self, connection, packet, *args, **kw): 
    119         connection.OnAuthenticated(False) 
    120         self._send_packet('failure') 
     148        self._send_packet(connection, 'failure') 
    121149        raise ErrorTypes.AuthenticationError('Invalid response to challenge') 
    122150 
     
    125153class ClientAuthenticationHandler(AuthenticationBaseHandler): 
    126154    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     155    #~ Constants / Variables / Etc.  
     156    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     157 
     158    log = logging.getLogger('ClientAuthenticationHandler') 
     159 
     160    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     161    #~ Public Methods  
     162    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     163 
     164    def AuthorizeAs(self, connection, loginaddr): 
     165        self.loginaddr = URIAddress.URIAddress(loginaddr) 
     166        self._reply_query(connection, None) 
     167 
     168    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    127169    #~ Protected Methods  
    128170    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    130172    def _reply_query(self, connection, packet, *args, **kw): 
    131173        self._EnableType('options') 
    132         self._send_packet('query') 
     174        self._send_packet(connection, 'query') 
    133175 
    134176    def _type_options(self, connection, packet, *args, **kw): 
    135         self._reply_select(self, connection, packet, *args, **kw) 
     177        self._reply_select(connection, packet, *args, **kw) 
    136178 
    137179    def _reply_select(self, connection, packet, *args, **kw): 
    138180        self._EnableType('challenge') 
    139         self._send_packet('select', '<simple/>') 
     181        self._send_packet(connection, 'select', '<simple/>') 
    140182 
    141     def _type_challege(self, connection, packet, *args, **kw): 
    142         self._reply_response(self, connection, packet, *args, **kw) 
     183    def _type_challenge(self, connection, packet, *args, **kw): 
     184        self._reply_response(connection, packet, *args, **kw) 
    143185 
    144186    def _reply_response(self, connection, packet, *args, **kw): 
    145187        self._EnableType('success') 
    146188        self._EnableType('failure') 
    147         self._send_packet('response', '<simple addr="account@network/path"/>'
     189        self._send_packet(connection, 'response', '<simple addr=%s/>' % (xmlquoteattr(str(self.loginaddr)),)
    148190 
    149191    def _type_success(self, connection, packet, *args, **kw): 
    150         connection.OnAuthenticated(True
     192        connection.OnAuthenticated(True, self.loginaddr
    151193 
    152194    def _type_failure(self, connection, packet, *args, **kw): 
    153         connection.OnAuthenticated(False
     195        connection.OnAuthenticated(False, self.loginaddr
    154196 
  • trunk/RBTelepathy/RBTelepathy/Packet/Builder.py

    r413 r414  
    2525 
    2626import weakref 
    27 from RBFoundation.XMLClassBuilder import XMLClassBuilder  
     27from xml.parsers.expat import ExpatError 
     28from RBFoundation.XMLClassBuilder import * 
    2829from RBFoundation.XMLClassBuilder import ElementFactory as EF 
    2930from RBMessaging import ErrorTypes 
     
    7576             # Pass these along... 
    7677            raise 
     78        except ExpatError, e: 
     79            raise ErrorTypes.PacketInvalidXMLError(str(e)) 
    7780        except StandardError, e: 
    7881            # Change these to PacketErrors 
  • trunk/RBTelepathy/RBTelepathy/Packet/ErrorHandler.py

    r412 r414  
    2424#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2525 
     26import logging 
     27from RBMBuilder import * 
     28import RBMElements 
     29 
    2630#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2731#~ Definitions  
    2832#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2933 
    30 class ErrorElement(RBMElements.RootElementBase, XMLClassBuilder.XMLClassBuilderBaseMixin): 
     34class ErrorElement(RBMElements.RootElementBase, XMLClassBuilderBaseMixin): 
    3135    NamespaceSynonyms = RBNamespaceSynonyms 
    3236    DefaultNamespace = RBNamespaceSynonyms[None] 
    33     ElementFactories = XMLClassBuilder.ElementFactorySet({ 
     37    ElementFactories = ElementFactorySet({ 
    3438            (RBMessagingNamespace, ): EF.Static(RBMElements.PacketChildElement), 
    3539        }) 
     40 
     41    def _xmlChildFactory(self, owner, parent, node, attributes, namespacemap): 
     42        return self.ElementFactorySet._GetElementFactory(owner, parent, node, attributes, namespacemap) 
    3643 
    3744#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4350 
    4451    ElementFactories = {(RBMessagingNamespace, 'error'): EF.Static(ErrorElement)} 
     52    StreamPacketHandlers = ElementFactories.keys() 
     53    RoutedPacketHandlers = () 
    4554 
     55#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     56 
     57class LogErrorHandler(ErrorHandler): 
     58    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     59    #~ Constants / Variables / Etc.  
     60    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     61 
     62    log = logging.getLogger('LogErrorHandler') 
     63 
     64    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     65    #~ Public Methods  
     66    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     67 
     68    def OnStreamPacket(self, connection, packet, *args, **kw): 
     69        self.log.warn('%s: %s', packet._attributes.get('type', 'UnknownError'), str(packet)) 
     70 
  • trunk/RBTelepathy/RBTelepathy/Packet/MessageHandler.py

    r412 r414  
    3131#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3232 
    33 class MessageElement(RBMElements.RouteableRootElement, RBM.StreamRootElement, XMLClassBuilder.XMLClassBuilderBaseMixin): 
     33class MessageElement(RBMElements.RouteableRootElement, RBM.StreamRootElement, XMLClassBuilderBaseMixin): 
    3434    NamespaceSynonyms = RBNamespaceSynonyms 
    3535    DefaultNamespace = RBNamespaceSynonyms[None] 
    36     ElementFactories = XMLClassBuilder.ElementFactorySet({ 
     36    ElementFactories = ElementFactorySet({ 
    3737            (RBMessagingNamespace, 'to'): EF.Static(RBMElements.PacketChildElement), 
    3838            (RBMessagingNamespace, 'from'): EF.Static(RBMElements.PacketChildElement), 
    3939            (RBMessagingNamespace, 'stream'): EF.Static(RBMElements.PacketChildElement), 
    4040        }) 
     41 
     42    def _xmlChildFactory(self, owner, parent, node, attributes, namespacemap): 
     43        return self.ElementFactorySet._GetElementFactory(owner, parent, node, attributes, namespacemap) 
    4144 
    4245#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4851 
    4952    ElementFactories = {(RBMessagingNamespace, 'message'), EF.Static(MessageElement)} 
     53    StreamPacketHandlers = ElementFactories.keys() 
     54    RoutedPacketHandlers = () 
    5055 
    5156    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBTelepathy/RBTelepathy/Stream/Protocol.py

    r413 r414  
    2525 
    2626from RBMessaging import ErrorTypes 
    27 from RBMessaging.Packet import StandardStreamPacketBuilder 
    2827from xml.sax.saxutils import escape as xmlescape 
    2928from xml.sax.saxutils import quoteattr as xmlquoteattr  
     
    4039 
    4140    delimiter = '\x1F' # ASCII unit seperator 
    42     data = None 
     41    data = "" 
    4342    stream = None 
    4443    currentpacket = None 
     
    4948    #~ Public Methods  
    5049    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    51  
    52     def __init__(self, PacketBuilderClass=StandardStreamPacketBuilder): 
    53         self.packetbuilder = PacketBuilderClass() 
    5450 
    5551    def OnPacket(self, packet): 
  • trunk/RBTelepathy/RBTelepathy/Stream/SocketAdaptor.py

    r413 r414  
    4848 
    4949    def __init__(self, socket): 
    50         self._socket = socket 
     50        self.socket = socket 
    5151 
    5252    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    7272            if not self.isshutdown: 
    7373                self.OnShutdown(how) 
    74                 self.log.info('Connection closed by "%s" on %s', how, self._socket.getpeername()) 
     74                self.log.info('Connection closed by "%s" on %s', how, self.socket.getpeername()) 
    7575            self.isshutdown |= (allowread << 1) | (allowwrite << 0) 
    7676            if self.isshutdown > 0: 
    77                 self._socket.shutdown(self.isshutdown-1) 
     77                self.socket.shutdown(self.isshutdown-1) 
    7878        except socket.error, exc: 
    7979            self.log.exception("Socket error on shutdown") 
     
    9595 
    9696    def fileno(self):  
    97         if self._socket: 
    98             return self._socket.fileno() 
     97        if self.socket: 
     98            return self.socket.fileno() 
    9999        else: return None 
    100100 
     
    109109 
    110110    def _NeedsRead(self):  
    111         return self._socket and True 
     111        return self.socket and True 
    112112 
    113113    def _ProcessRead(self, *args, **kw):  
     
    119119 
    120120    def _NeedsWrite(self):  
    121         return self._socket and self._sendData and True or False 
     121        return self.socket and self._sendData and True or False 
    122122 
    123123    def _ProcessWrite(self, *args, **kw): 
     
    130130 
    131131    def _NeedsError(self):  
    132         return self._socket and True or False 
     132        return self.socket and True or False 
    133133 
    134134    def _ProcessError(self):  
     
    139139    def _SocketRecv(self, limit=8192): 
    140140        try: 
    141             return self._socket.recv(limit) 
     141            return self.socket.recv(limit) 
    142142        except socket.error, exc: 
    143143            if not self._SetSocketError(exc): 
     
    146146    def _SocketSend(self, data): 
    147147        try: 
    148             return self._socket.send(data) 
     148            return self.socket.send(data) 
    149149        except socket.error, exc: 
    150150            if not self._SetSocketError(exc): 
  • trunk/RBTelepathy/RBTelepathy/Stream/SocketServer.py

    r413 r414  
    3636 
    3737    def __init__(self, socket): 
    38         self.serversocket = socket 
     38        self.socket = socket 
    3939 
    4040    def OnNewConnection(self, server, socket, info): 
     
    4848 
    4949    def fileno(self):  
    50         return self.serversocket.fileno() 
     50        return self.socket.fileno() 
    5151 
    5252    def _NeedsRead(self):  
    53         return self.serversocket and 1 
     53        return self.socket and 1 
    5454    def _ProcessRead(self, *args, **kw):  
    55         socket, info = self.serversocket.accept() 
     55        socket, info = self.socket.accept() 
    5656        self.OnNewConnection(self, socket, info) 
    5757 
     
    6262 
    6363    def _NeedsError(self):  
    64         return self.serversocket and 1 
     64        return self.socket and 1 
    6565    def _ProcessError(self):  
    6666        pass