Changeset 452

Show
Ignore:
Timestamp:
02/24/03 17:31:32 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBTelepathy/RBTelepathy/Packet/Builder.py

    r450 r452  
    6363            return self.Parse(*args, **kw) 
    6464        except ErrorTypes.RBMessagingError, e: 
    65              # Pass these along... 
    66             raise 
     65            raise # Pass these along... 
    6766        except ExpatError, e: 
    6867            raise ErrorTypes.PacketInvalidXMLError(str(e)) 
     
    8382            raise ErrorTypes.PacketHandlerError(str(e)) 
    8483 
    85     def _GetOwner(self): 
    86         if self._elements: 
    87             return weakref.proxy(self._elements[0]) 
    88         else: return None 
     84    def RootElement(self): 
     85        if self._elements:  
     86            return self._elements[0] 
     87        else:  
     88            return None 
    8989 
  • trunk/RBTelepathy/RBTelepathy/Packet/Elements.py

    r450 r452  
    159159 
    160160#class XMLAdaptor(XMLProduction.NodeXMLAdaptor): pass 
     161XMLAdaptor = XMLProduction.NodeXMLAdaptor 
    161162#class Factory(XMLProduction.XMLNodeFactory): xmladaptor = XMLAdaptor  
    162 XMLAdaptor = XMLProduction.NodeXMLAdaptor 
    163163Factory = XMLProduction.XMLNodeFactory 
    164164 
    165165class RootXMLAdaptor(XMLAdaptor): 
    166     def _xmlChildFactory(self, owner, parent, node, attributes, namespacemap): 
    167         try: GetEF = self.result.ElementFactorySet._GetElementFactory 
    168         except AttributeError: pass 
    169         else: return GetEF(owner, parent, node, attributes, namespacemap) 
     166    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     167    #~ Constants / Variables / Etc.  
     168    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     169 
     170    __slots__ = ['owner'] 
     171 
     172    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     173    #~ Methods  
     174    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     175 
     176    def __init__(self, owner, *args, **kw): 
     177        XMLAdaptor.__init__(self, owner, *args, **kw) 
     178        self.owner = owner 
     179 
     180    def _xmlInitStarted(self):  
     181        try:  
     182            EFS = self.result.ElementFactorySet 
     183            self.owner.PushElementFactorySet(EFS) 
     184        except AttributeError:  
     185            pass 
     186        return XMLAdaptor._xmlInitStarted(self) 
     187 
     188    def _xmlInitComplete(self):  
     189        try:  
     190            EFS = self.result.ElementFactorySet 
     191            self.owner.PopElementFactorySet() 
     192        except AttributeError:  
     193            pass 
     194        return XMLAdaptor._xmlInitComplete(self) 
     195 
     196    #def _xmlChildFactory(self, owner, parent, node, attributes, namespacemap): 
     197    #    try: GetEF = self.result.ElementFactorySet._GetElementFactory 
     198    #    except AttributeError: pass 
     199    #    else: return GetEF(owner, parent, node, attributes, namespacemap) 
    170200 
    171201class RootFactory(Factory): 
     202    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     203    #~ Constants / Variables / Etc.  
     204    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     205 
     206    __slots__ = [] 
    172207    xmladaptor = RootXMLAdaptor 
    173208 
  • trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py

    r448 r452  
    169169    def __init__(self, owner, *args, **kw): 
    170170        XMLAdaptor.__init__(self, owner, *args, **kw) 
    171         owner.result.datastreams.append(self.result) 
     171        owner.RootElement().result.datastreams.append(self.result) 
    172172 
    173173class StreamFormatFactory(Factory): 
  • trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py

    r451 r452  
    4141    DefaultNamespace = NamespaceSynonyms[None] 
    4242    ElementFactories = ElementFactorySet({ 
    43             (DefaultNamespace, 'simple'): RBME.Factory(RBME.URIAddressElement), 
     43            (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 
    4444            (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
    4545        }) 
     
    6363    def __init__(self, connection): 
    6464        self.connection = connection 
    65         self._ValidTypes = {} 
    6665 
    6766    def OnRoutedPacket(self, packet, *args, **kw): 
     
    7069    def OnStreamPacket(self, packet, *args, **kw): 
    7170        self.log.debug('Received auth type=%r packet', packet.attrs.get('type', )) 
    72         try: 
    73             AuthType = packet.attrs['type'] 
     71        try: AuthType = packet.attrs['type'] 
    7472        except KeyError: 
    7573            raise ErrorTypes.AuthenticationError('Sequence type not specified') 
    7674 
    77         try: 
    78             OnAuthType = self._ValidTypes[AuthType] 
    79             return OnAuthType(self, packet, *args, **kw) 
    80         except KeyError: 
     75        try: OnAuthType = self._CallOnAuthType(AuthType) 
     76        except AttributeError: 
    8177            raise ErrorTypes.AuthenticationError('Invalid or out of sequence type "%s"' % (AuthType,)) 
     78        else: return OnAuthType(packet, *args, **kw) 
    8279 
    8380    def AuthorizeAs(self, loginaddr): 
    8481        self.loginaddr = URIAddress.URIAddress(loginaddr) 
    85         self._reply_query(None) 
     82        #self._reply_query(None) 
     83        self._reply_response(None) 
    8684 
    8785    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    8987    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    9088 
    91     def _EnableType(self, AuthType): 
    92         klass = self.__class__ 
    93         self._ValidTypes[AuthType] = getattr(klass, '_type_'+AuthType) 
    94  
    95     def _send_packet(self, AuthType, XMLBody=None): 
    96         xml = "<authentication xmlns='%s' type='%s'" % (DefaultNamespace, AuthType) 
    97         if XMLBody: 
    98             xml += ">" + XMLBody + "</authentication>" 
    99         else: xml += "/>" 
    100         self.connection.SendPacket(xml) 
     89    def _CallOnAuthType(self, AuthType): 
     90        return getattr(self, '_type_'+AuthType) 
    10191 
    10292    def _reply_query(self, packet, *args, **kw): 
    103         self._EnableType('options') 
    104         self._send_packet('query') 
     93        packet = authentication() 
     94        packet.attrs['type'] = 'query' 
     95        packet += 'as', 
     96        packet[-1].attrs['addr'] = str(self.loginaddr) 
     97        self.connection.SendPacket(packet) 
    10598 
    10699    def _type_options(self, packet, *args, **kw): 
     
    108101 
    109102    def _reply_select(self, packet, *args, **kw): 
    110         self._EnableType('challenge') 
    111         self._send_packet('select', '<simple/>') 
     103        packet = authentication() 
     104        packet.attrs['type'] = 'select' 
     105        packet += 'as', 
     106        packet[-1].attrs['addr'] = str(self.loginaddr) 
     107        packet += 'method', 
     108        packet[-1].attrs['type'] = 'plaintext' 
     109        self.connection.SendPacket(packet) 
    112110 
    113111    def _type_challenge(self, packet, *args, **kw): 
     
    115113 
    116114    def _reply_response(self, packet, *args, **kw): 
    117         self._EnableType('success') 
    118         self._EnableType('failure') 
    119         self._send_packet('response', '<simple addr=%s/>' % (xmlquoteattr(str(self.loginaddr)),)) 
     115        packet = authentication() 
     116        packet.attrs['type'] = 'response' 
     117        packet += 'as', 
     118        packet[-1].attrs['addr'] = str(self.loginaddr) 
     119        packet += 'method', 
     120        #packet[-1].attrs['type'] = 'passkey' 
     121        packet[-1].attrs['type'] = 'plaintext' 
     122        packet[-1] += 'challenge', 
     123        packet[-1][-1] += 'password' 
     124        packet[-1] += 'response', 
     125        packet[-1][-1] += 'secret' 
     126        self.connection.SendPacket(packet) 
    120127 
    121128    def _type_success(self, packet, *args, **kw): 
  • trunk/RBTelepathy/demo/simple/client/TestClient.py

    r449 r452  
    5454#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5555 
     56class TestSBP(StreamPacketBuilder): 
     57    NamespaceSynonyms = {None: DefaultNamespace} 
     58    DefaultNamespace = NamespaceSynonyms[None] 
     59 
     60#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     61 
    5662class ClientConnection(SocketConnections.ProtocolConnection): 
    5763    """Created at the request of an in-process client, client connections represent outbound requests to external services. 
     
    7177    def LoadDefaultHandlers(self): 
    7278        SocketConnections.ProtocolConnection.LoadDefaultHandlers(self) 
    73         self.protocol.packetbuilder = StreamPacketBuilder() 
     79        self.protocol.packetbuilder = TestSBP() 
    7480        self.LoadHandler(ErrorHandler.ErrorHandler) 
    7581        self.LoadHandler(AuthenticationHandler.ClientAuthenticationHandler) 
     
    124130#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    125131 
    126 def Run(name, to=None, msg='Testing'): 
    127     model = TestModel() 
    128     conn = model.Connect(name, None) 
    129     while not getattr(conn, 'loginaddr', None): 
    130         model.Process(0.1) 
    131  
    132     if to:  
    133         conn.Message(to, msg) 
    134  
    135     try: 
    136         while 1: 
    137             model.Process(0.1) 
    138             yield True 
    139     except KeyboardInterrupt: 
    140         pass 
    141  
    142 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    143  
    144132if __name__ == '__main__': 
    145133    try: 
  • trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py

    r451 r452  
    4141    DefaultNamespace = NamespaceSynonyms[None] 
    4242    ElementFactories = ElementFactorySet({ 
    43             (DefaultNamespace, 'simple'): RBME.Factory(RBME.URIAddressElement), 
     43            (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 
    4444            (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
    4545        }) 
     
    6363    def __init__(self, connection): 
    6464        self.connection = connection 
    65         self._ValidTypes = {} 
    66         self._EnableType('query') 
    67         self._EnableType('select') 
    6865 
    6966    def OnRoutedPacket(self, packet, *args, **kw): 
     
    7269    def OnStreamPacket(self, packet, *args, **kw): 
    7370        self.log.debug('Received auth type=%r packet', packet.attrs.get('type', )) 
    74         try: 
    75             AuthType = packet.attrs['type'] 
     71        try: AuthType = packet.attrs['type'] 
    7672        except KeyError: 
    7773            raise ErrorTypes.AuthenticationError('Sequence type not specified') 
    7874 
    79         try: 
    80             OnAuthType = self._ValidTypes[AuthType] 
    81             return OnAuthType(self, packet, *args, **kw) 
    82         except KeyError: 
     75        try: OnAuthType = self._CallOnAuthType(AuthType) 
     76        except AttributeError: 
    8377            raise ErrorTypes.AuthenticationError('Invalid or out of sequence type "%s"' % (AuthType,)) 
     78        else: return OnAuthType(packet, *args, **kw) 
    8479 
    8580    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    8782    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8883 
    89     def _EnableType(self, AuthType): 
    90         klass = self.__class__ 
    91         self._ValidTypes[AuthType] = getattr(klass, '_type_'+AuthType) 
    92  
    93     def _send_packet(self, AuthType, XMLBody=None): 
    94         xml = "<authentication xmlns='%s' type='%s'" % (DefaultNamespace, AuthType) 
    95         if XMLBody: 
    96             xml += ">" + XMLBody + "</authentication>" 
    97         else: xml += "/>" 
    98         self.connection.SendPacket(xml) 
    99  
    100     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    101     #~ Protected Methods  
    102     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     84    def _CallOnAuthType(self, AuthType): 
     85        return getattr(self, '_type_'+AuthType) 
    10386 
    10487    def _type_query(self, packet, *args, **kw): 
     
    10689 
    10790    def _reply_options(self, packet, *args, **kw): 
    108         self._send_packet('options', '<simple/>') 
     91        packet.attrs['type'] = 'options' 
     92        packet += 'method', 
     93        packet[-1].attrs['type'] = 'plaintext' 
     94        self.connection.SendPacket(packet) 
    10995 
    11096    def _type_select(self, packet, *args, **kw): 
     
    11298 
    11399    def _reply_challenge(self, packet, *args, **kw): 
    114         self._EnableType('response') 
    115         self._send_packet('challenge', '<simple addr=""/>'
     100        packet.attrs['type'] = 'challenge' 
     101        self.connection.SendPacket(packet
    116102 
    117103    def _type_response(self, packet, *args, **kw): 
    118         try: 
    119             simple = packet['simple',][0] 
     104        try: as_ = packet['as',][0] 
    120105        except (LookupError), e: 
    121             raise ErrorTypes.AuthenticationError('Did not find selected response "simple"') 
     106            raise ErrorTypes.AuthenticationError('Did not find response "as" element') 
     107        try: method = packet['method',][0] 
     108        except (LookupError), e: 
     109            raise ErrorTypes.AuthenticationError('Did not find response "method" element') 
    122110 
    123         if simple.addr.authority: 
    124             self.connection.OnAuthenticated(True, simple.addr) 
     111        del packet['method',] 
     112        if as_.addr.authority: 
     113            self.connection.OnAuthenticated(True, as_.addr) 
    125114            self._reply_success(packet, *args, **kw) 
    126115        else: 
    127             self.connection.OnAuthenticated(False, simple.addr) 
     116            self.connection.OnAuthenticated(False, as_.addr) 
    128117            self._reply_failure(packet, *args, **kw) 
    129118 
    130119    def _reply_success(self, packet, *args, **kw): 
    131         self._send_packet('success') 
     120        packet.attrs['type'] = 'success' 
     121        self.connection.SendPacket(packet) 
    132122 
    133123    def _reply_failure(self, packet, *args, **kw): 
    134         self._send_packet('failure') 
     124        packet.attrs['type'] = 'failure' 
     125        self.connection.SendPacket(packet) 
    135126        raise ErrorTypes.AuthenticationError('Invalid response to challenge') 
    136127 
  • trunk/RBTelepathy/demo/simple/host/TestServer.py

    r449 r452  
    4848#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4949 
     50class TestSBP(StreamPacketBuilder): 
     51    NamespaceSynonyms = {None: DefaultNamespace} 
     52    DefaultNamespace = NamespaceSynonyms[None] 
     53 
     54#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     55 
    5056class HostConnection(SocketConnections.ProtocolConnection): 
    5157    """Created in response to inbound requests, host connections handle inbound traffic *from* a client connection.""" 
     
    6672    def LoadDefaultHandlers(self): 
    6773        SocketConnections.ProtocolConnection.LoadDefaultHandlers(self) 
    68         self.protocol.packetbuilder = StreamPacketBuilder() 
     74        self.protocol.packetbuilder = TestSBP() 
    6975        self.LoadHandler(ErrorHandler.ErrorHandler) 
    7076        self.LoadHandler(AuthenticationHandler.HostAuthenticationHandler) 
     
    7985 
    8086#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     87 
     88logging.basicConfig() 
     89logging.root.setLevel(logging.INFO) 
     90#logging.root.setLevel(logging.DEBUG) 
     91 
     92#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8193#~ Main 
    8294#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8395 
    8496if __name__ == '__main__': 
    85     logging.basicConfig() 
    86     #logging.root.setLevel(logging.INFO) 
    87     logging.root.setLevel(logging.DEBUG) 
    88  
    8997    model = Model.MessagingModel() 
    9098    model.Routers[(DefaultNamespace, 'message')] = SimpleRouter.AuthorityDictRouter()