Changeset 453

Show
Ignore:
Timestamp:
02/25/03 17:58:01 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

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

    r446 r453  
    5858    def __contains__(self, key): 
    5959        return key in self.xmlnsmap 
     60 
     61    def __len__(self): 
     62        return len(self.xmlnsmap) 
    6063 
    6164    def __getitem__(self, key): 
  • trunk/RBFoundation/RBFoundation/XMLNode.py

    r448 r453  
    263263 
    264264    def deldata(self, *args, **kw): 
     265        kw['idxonly'] = 1 
    265266        dellist = [x for x in self.enumdata(*args, **kw)] 
    266267        dellist.reverse() 
     
    278279    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    279280 
    280     def enumnodes(self, node=_any, namespace=_any, prefix=_any, idxonly=True): 
     281    def enumnodes(self, *args, **kw): 
    281282        """Returns a generator to iterate through the matching child node indicies of xmlnode. 
    282283        obj.enumnodes(node=_any, namespace=_any, prefix=_any)""" 
     
    311312    def delnodes(self, *args, **kw): 
    312313        """Removes all matching child nodes of xmlnode""" 
     314        kw['idxonly'] = 1 
    313315        dellist = [x for x in self.enumnodes(*args, **kw)] 
    314316        dellist.reverse() 
     
    414416        return ''.join(result)   
    415417 
    416     def toXML(self, *args, **kw):  
    417         """See toxml.""" 
    418         return self.toxml(*args, **kw) 
    419  
    420418    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    421419    #~ Protected Methods  
    422420    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    423  
    424     def _toXML(self, *args, **kw): 
    425         """See toxml.""" 
    426         return self.toxml(*args, **kw) 
    427421 
    428422    def _getnodefactory(self, *args, **kw): 
     
    489483        def __init__(self, owner, parent, node, attributes, namespacemap): 
    490484            prefix = namespacemap.prefix(node[0]) 
    491             if node[0] in namespacemap: 
    492                 nodename, xmlns = node[1], node[0] 
    493             else: nodename, xmlns = node[1], None 
     485            if node[0] in namespacemap: xmlns, nodename = node 
     486            elif namespacemap.nextmap is None: xmlns, nodename = node 
     487            else: xmlns, nodename = None, node[1] 
    494488            xmlnode.__init__(self, nodename, xmlns, prefix, default_namespaces=namespacemap) 
    495489 
     
    512506        def _toXML(self, *args, **kw): 
    513507            return self.toxml() 
     508        def _toXML(self, *args, **kw): 
     509            """See toxml.""" 
     510            return self.toxml(*args, **kw) 
    514511 
    515512    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    522519        def __init__(self, owner, parent, node, attributes, namespacemap, nodebuilder=xmlnode): 
    523520            prefix = namespacemap.prefix(node[0]) 
    524             if node[0] in namespacemap or not namespacemap.nextmap: 
    525                 nodename, xmlns = node[1], node[0] 
    526             else: nodename, xmlns = node[1], None 
     521            if node[0] in namespacemap: xmlns, nodename = node 
     522            elif namespacemap.nextmap is None: xmlns, nodename = node 
     523            else: xmlns, nodename = None, node[1] 
    527524            nodebuilder = nodebuilder or self.nodebuilder 
    528525            self.result = nodebuilder(nodename, xmlns, prefix, default_namespaces=namespacemap) 
  • trunk/RBTelepathy/RBTelepathy/Handlers/__init__.py

    r451 r453  
    7979 
    8080from RBMessaging import ErrorTypes 
    81 from RBMessaging import ErrorTypes 
    8281from RBMessaging.Packet import * 
    8382from RBMessaging.Packet.RBMBuilder import * 
     
    114113        raise NotImplementedError 
    115114 
     115    def SendPacket(self, *args, **kw): 
     116        return self.connection.SendPacket(*args, **kw) 
     117 
  • trunk/RBTelepathy/RBTelepathy/Packet/Elements.py

    r452 r453  
    5454#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5555 
    56 class PacketChildElement(PacketElementBase): 
     56class PacketElement(PacketElementBase): 
    5757    pass 
    5858 
     
    158158#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    159159 
    160 #class XMLAdaptor(XMLProduction.NodeXMLAdaptor): pass 
    161 XMLAdaptor = XMLProduction.NodeXMLAdaptor 
    162 #class Factory(XMLProduction.XMLNodeFactory): xmladaptor = XMLAdaptor  
    163 Factory = XMLProduction.XMLNodeFactory 
    164  
    165 class RootXMLAdaptor(XMLAdaptor): 
     160_NodeXMLAdaptor = XMLProduction.NodeXMLAdaptor 
     161class XMLAdaptor(_NodeXMLAdaptor): 
    166162    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    167163    #~ Constants / Variables / Etc.  
     
    175171 
    176172    def __init__(self, owner, *args, **kw): 
    177         XMLAdaptor.__init__(self, owner, *args, **kw) 
     173        _NodeXMLAdaptor.__init__(self, owner, *args, **kw) 
    178174        self.owner = owner 
    179175 
     
    184180        except AttributeError:  
    185181            pass 
    186         return XMLAdaptor._xmlInitStarted(self) 
     182        return _NodeXMLAdaptor._xmlInitStarted(self) 
    187183 
    188184    def _xmlInitComplete(self):  
     
    192188        except AttributeError:  
    193189            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) 
    200  
    201 class RootFactory(Factory): 
    202     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    203     #~ Constants / Variables / Etc.  
    204     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    205  
     190        return _NodeXMLAdaptor._xmlInitComplete(self) 
     191 
     192class Factory(XMLProduction.XMLNodeFactory):  
    206193    __slots__ = [] 
    207     xmladaptor = RootXMLAdaptor 
    208  
     194    xmladaptor = XMLAdaptor  
     195 
     196#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     197 
     198RootXMLAdaptor = XMLAdaptor 
     199RootFactory = Factory 
     200 
  • trunk/RBTelepathy/RBTelepathy/Routing/KeylistRouterBase.py

    r442 r453  
    3232 
    3333class KeylistRouterBase(RouterBase): 
    34     def OnRoutedPacket(self, packet, keylist): 
     34    def RoutePacket(self, packet, keylist): 
    3535        """Template method for generalized packet routing. 
    3636 
     
    7171        elif isinstance(destination, RouterBase): 
    7272            # Chained router -- delegate to allow extension of command results 
    73             return destination.OnRoutedPacket(packet, keylist) 
     73            return destination.RoutedPacket(packet, keylist) 
    7474        else: 
    7575            # Standard result -- just wrap it in a command 
  • trunk/RBTelepathy/RBTelepathy/Routing/RouterBase.py

    r443 r453  
    4040class RouterBase(object): 
    4141    def RoutePacket(self, *args, **kw): 
    42         """Synonym for OnRoutedPacket""" 
    43         return self.OnRoutedPacket(*args, **kw) 
    44  
    45     def OnRoutedPacket(self, packet, *args, **kw): 
    4642        """Entry point for generalized packet routing. 
    4743 
     
    9187 
    9288    def Commit(self): 
    93         return self.destination.OnRoutedPacket(self.packet, self.keylist) 
     89        return self.destination(self.packet, self.keylist) 
    9490 
  • trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py

    r452 r453  
    3636#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3737 
     38class method(RBME.PacketElement, XMLClassBuilderObjectMixin): 
     39    __slots__ = [] 
     40    NamespaceSynonyms = {None: DefaultNamespace} 
     41    DefaultNamespace = NamespaceSynonyms[None] 
     42    ElementFactories = ElementFactorySet({ 
     43            (DefaultNamespace, 'response'): RBME.Factory(RBME.PacketElement), 
     44            (DefaultNamespace, 'challenge'): RBME.Factory(RBME.PacketElement), 
     45        }) 
     46 
     47    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     48    #~ Properties  
     49    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     50 
     51    def _get_challenge(self): 
     52        challenge = self['challenge',] 
     53        if len(challenge) > 1: 
     54            raise ErrorTypes.AuthenticationError, '"%s" expected a single "challenge" element' % (self.node,) 
     55        elif len(challenge) == 1: 
     56            challenge = ''.join(map(str, challenge[0].iterdata())) 
     57        else: challenge = 'password' 
     58        return challenge 
     59    def _set_challenge(self, challenge): 
     60        self.delnodes('challenge') 
     61        self.addnode('challenge').adddata(challenge) 
     62    def _del_challenge(self, challenge): 
     63        self.delnodes('challenge') 
     64    challenge = property(_get_challenge, _set_challenge, _del_challenge) 
     65 
     66    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     67 
     68    def _get_response(self): 
     69        response = self['response',] 
     70        if len(response) != 1: 
     71            raise ErrorTypes.AuthenticationError, '"%s" expected a single "response" child element' % (self.node,) 
     72        else: response = ''.join(map(str, response[0].iterdata())) 
     73        return response 
     74    def _set_response(self, response): 
     75        self.delnodes('response') 
     76        self.addnode('response').adddata(response) 
     77    def _del_response(self, response): 
     78        self.delnodes('response') 
     79    response = property(_get_response, _set_response, _del_response) 
     80 
     81#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     82 
    3883class authentication(RBME.RootElementBase, XMLClassBuilderObjectMixin): 
    3984    __slots__ = [] 
     
    4287    ElementFactories = ElementFactorySet({ 
    4388            (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 
    44             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
     89            (DefaultNamespace, 'method'): RBME.Factory(method), 
    4590        }) 
    4691 
     
    73118            raise ErrorTypes.AuthenticationError('Sequence type not specified') 
    74119 
     120        print 
     121        print "AuthRecving:", packet.toxml(True) 
     122        print 
     123 
    75124        try: OnAuthType = self._CallOnAuthType(AuthType) 
    76125        except AttributeError: 
     
    78127        else: return OnAuthType(packet, *args, **kw) 
    79128 
    80     def AuthorizeAs(self, loginaddr): 
     129    def AuthorizeAs(self, loginaddr, bShort=True): 
    81130        self.loginaddr = URIAddress.URIAddress(loginaddr) 
    82         #self._reply_query(None) 
    83         self._reply_response(None) 
     131        if bShort: self._reply_response(None) 
     132        else: self._reply_query(None) 
     133 
     134    def SendPacket(self, packet, *args, **kw): 
     135        print 
     136        print "AuthSending:", packet.toxml(True) 
     137        print 
     138        return self.connection.SendPacket(packet, *args, **kw) 
    84139 
    85140    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    95150        packet += 'as', 
    96151        packet[-1].attrs['addr'] = str(self.loginaddr) 
    97         self.connection.SendPacket(packet) 
     152        self.SendPacket(packet) 
    98153 
    99154    def _type_options(self, packet, *args, **kw): 
     
    105160        packet += 'as', 
    106161        packet[-1].attrs['addr'] = str(self.loginaddr) 
    107         packet += 'method', 
     162        packet += method() 
    108163        packet[-1].attrs['type'] = 'plaintext' 
    109         self.connection.SendPacket(packet) 
     164        self.SendPacket(packet) 
    110165 
    111166    def _type_challenge(self, packet, *args, **kw): 
     
    113168 
    114169    def _reply_response(self, packet, *args, **kw): 
    115         packet = authentication(
     170        packet = authentication(namespace=DefaultNamespace
    116171        packet.attrs['type'] = 'response' 
    117172        packet += 'as', 
    118173        packet[-1].attrs['addr'] = str(self.loginaddr) 
    119         packet += 'method', 
    120         #packet[-1].attrs['type'] = 'passkey' 
    121         packet[-1].attrs['type'] = 'plaintext' 
     174        packet += method() 
     175        packet[-1].attrs['type'] = 'sha-hash' 
    122176        packet[-1] += 'challenge', 
    123177        packet[-1][-1] += 'password' 
    124178        packet[-1] += 'response', 
    125         packet[-1][-1] += 'secret' 
    126         self.connection.SendPacket(packet) 
     179        import sha 
     180        packet[-1][-1] += sha.new('secret'+'password').hexdigest() 
     181        self.SendPacket(packet) 
    127182 
    128183    def _type_success(self, packet, *args, **kw): 
  • trunk/RBTelepathy/demo/simple/client/ErrorHandler.py

    r451 r453  
    4141    DefaultNamespace = NamespaceSynonyms[None] 
    4242    ElementFactories = ElementFactorySet({ 
    43             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
     43            (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 
    4444        }) 
    4545 
  • trunk/RBTelepathy/demo/simple/client/MessageHandler.py

    r451 r453  
    4949            (DefaultNamespace, 'from'): RBME.Factory(RBME.URIAddressElement), 
    5050            (DefaultNamespace, 'stream'): RBMStream.StreamFormatFactory(), 
    51             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
    52             None: RBME.Factory(RBME.PacketChildElement), 
     51            (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 
     52            None: RBME.Factory(RBME.PacketElement), 
    5353        }) 
    5454    default_namespaces = RBME.StreamRootElement.default_namespaces .copy() 
     
    6666    def SetAddresses(self, addresses, nodename='to'): 
    6767        print "XXX: RouteableRootElement.SetAddresses needs work" 
    68  
    69 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    70  
    71 class HostMessageHandler(PacketHandler): 
    72     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    73     #~ Constants / Variables / Etc.  
    74     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    75  
    76     ElementFactories = {(DefaultNamespace, 'message'): RBME.RootFactory(message)} 
    77     StreamPacketHandlers = ElementFactories.keys() 
    78  
    79     log = logging.getLogger('HostMessageHandler') 
    80  
    81     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    82     #~ Public Methods  
    83     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    84  
    85     def __init__(self, connection): 
    86         self.connection = connection 
    87         self.router = connection.model().GetRouter((DefaultNamespace, 'message')) 
    88         if self.router: 
    89             key = connection.loginaddr.authority 
    90             self.log.info('Registering %r with router', key) 
    91             self.router.AuthorityRoutes[key] = [self] 
    92  
    93     def OnRoutedPacket(self, packet, addresses): 
    94         # Copy the root level packet, so we can adjust it's addresses 
    95         #packet = copy.copy(packet) 
    96         # Change the address lists in the packet 
    97         packet.SetAddresses(addresses) 
    98         self.log.debug('Sending routed packet to protocol') 
    99         self.connection.SendPacket(packet) 
    100  
    101     def OnStreamPacket(self, packet): 
    102         # TODO: Flush out 
    103         #fromlist = packet.GetAddresses('from') 
    104         #if fromlist:  
    105         #    raise ValueError, '"from" element not allowed on a user connection' 
    106         tolist = packet.GetAddresses('to') 
    107  
    108         self.log.info('Sending "%s" packet to Router', packet.node) 
    109         if not self.router: 
    110             raise ErrorTypes.RoutingError, 'No router available' 
    111         routecommands = self.router.RoutePacket(packet, tolist) 
    112         if routecommands: 
    113             self.log.debug('Sending routed packet "%s" to destination', packet.node) 
    114             return [routecmd() for routecmd in routecommands] 
    115         else: return () 
    11668 
    11769#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    13789    def OnRoutedPacket(self, packet, addresses): 
    13890        print 'OnRoutedPacket:' 
    139         print packet._toXML() 
     91        print packet.toxml() 
    14092        print 
    14193        for stream in packet.datastreams: 
     
    14597    def OnStreamPacket(self, packet): 
    14698        print 'OnStreamPacket:' 
    147         print packet._toXML() 
     99        print packet.toxml() 
    148100        print 
    149101        for stream in packet.datastreams: 
  • trunk/RBTelepathy/demo/simple/client/TestClient.py

    r452 r453  
    123123 
    124124logging.basicConfig() 
    125 logging.root.setLevel(logging.INFO) 
    126 #logging.root.setLevel(logging.DEBUG) 
     125if 1: logging.root.setLevel(logging.INFO) 
     126else: logging.root.setLevel(logging.DEBUG) 
    127127 
    128128#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    134134        model = TestModel() 
    135135        send = model.Connect('send', None) 
     136        while not getattr(send, 'loginaddr', None): 
     137            model.Process(0.1) 
    136138        recv = model.Connect('recv', None) 
    137         while not getattr(send, 'loginaddr', None) or not getattr(recv, 'loginaddr', None): 
     139        while not getattr(recv, 'loginaddr', None): 
    138140            model.Process(0.1) 
    139141        send.Message('recv', 'Some text for recv!') 
  • trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py

    r452 r453  
    3636#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3737 
     38class AuthBaseMethod(RBME.PacketElement, XMLClassBuilderObjectMixin): 
     39    __slots__ = [] 
     40    NamespaceSynonyms = {None: DefaultNamespace} 
     41    DefaultNamespace = NamespaceSynonyms[None] 
     42    ElementFactories = ElementFactorySet({ 
     43            (DefaultNamespace, 'response'): RBME.Factory(RBME.PacketElement), 
     44            (DefaultNamespace, 'challenge'): RBME.Factory(RBME.PacketElement), 
     45        }) 
     46 
     47    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     48    #~ Properties  
     49    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     50 
     51    def _get_challenge(self): 
     52        challenge = self['challenge',] 
     53        if len(challenge) > 1: 
     54            raise ErrorTypes.AuthenticationError, '"%s" expected a single "challenge" element' % (self.node,) 
     55        elif len(challenge) == 1: 
     56            challenge = ''.join(map(str, challenge[0].iterdata())) 
     57        else: challenge = 'password' 
     58        return challenge 
     59    def _set_challenge(self, challenge): 
     60        self.delnodes('challenge') 
     61        self.addnode('challenge').adddata(challenge) 
     62    def _del_challenge(self, challenge): 
     63        self.delnodes('challenge') 
     64    challenge = property(_get_challenge, _set_challenge, _del_challenge) 
     65 
     66    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     67 
     68    def _get_response(self): 
     69        response = self['response',] 
     70        if len(response) != 1: 
     71            raise ErrorTypes.AuthenticationError, '"%s" expected a single "response" child element' % (self.node,) 
     72        else: response = ''.join(map(str, response[0].iterdata())) 
     73        return response 
     74    def _set_response(self, response): 
     75        self.delnodes('response') 
     76        self.addnode('response').adddata(response) 
     77    def _del_response(self, response): 
     78        self.delnodes('response') 
     79    response = property(_get_response, _set_response, _del_response) 
     80 
     81#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     82 
     83class AuthPlaintext(AuthBaseMethod): 
     84    AuthDB = { ('send', 'password'): 'secret', ('recv', 'password'): 'secret' } 
     85    def Authenticate(self, handler, asaddr): 
     86        correct = self.AuthDB[asaddr.account, self.challenge]  
     87        return self.response == correct 
     88 
     89class AuthMD5(AuthBaseMethod): 
     90    AuthDB = { 'send': 'secret', 'recv': 'secret' } 
     91    def Authenticate(self, handler, asaddr): 
     92        import md5 
     93        correct = md5.new(self.AuthDB[asaddr.account] + self.challenge).hexdigest() 
     94        return self.response == correct 
     95 
     96class AuthSHA(AuthBaseMethod): 
     97    AuthDB = { 'send': 'secret', 'recv': 'secret' } 
     98    def Authenticate(self, handler, asaddr): 
     99        import sha 
     100        correct = sha.new(self.AuthDB[asaddr.account] + self.challenge).hexdigest() 
     101        return self.response == correct 
     102 
     103class AuthPublickey(AuthBaseMethod): 
     104    AuthDB = { 'send': 'secret', 'recv': 'secret' } 
     105    def Authenticate(self, handler, asaddr): 
     106        import sha 
     107        correct = sha.new(self.AuthDB[asaddr.account] + self.challenge).hexdigest() 
     108        return self.response == correct 
     109 
     110#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     111 
     112DefaultAuthMethod = AuthSHA # XXX:XXX:XXX:XXX 
    38113class authentication(RBME.RootElementBase, XMLClassBuilderObjectMixin): 
    39114    __slots__ = [] 
     
    42117    ElementFactories = ElementFactorySet({ 
    43118            (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 
    44             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
     119            (DefaultNamespace, 'method'): RBME.Factory(DefaultAuthMethod), 
    45120        }) 
    46121 
     
    90165    def _reply_options(self, packet, *args, **kw): 
    91166        packet.attrs['type'] = 'options' 
    92         packet += 'method', 
    93         packet[-1].attrs['type'] = 'plaintext' 
    94         self.connection.SendPacket(packet) 
     167        for authmethod in ('passkey', 'plaintext', 'md5-hash', 'sha-hash', 'publickey', 'radius'): 
     168            packet += AuthBaseMethod() 
     169            packet[-1].attrs['type'] = authmethod 
     170        self.SendPacket(packet) 
    95171 
    96172    def _type_select(self, packet, *args, **kw): 
     
    99175    def _reply_challenge(self, packet, *args, **kw): 
    100176        packet.attrs['type'] = 'challenge' 
    101         self.connection.SendPacket(packet) 
     177        self.SendPacket(packet) 
    102178 
    103179    def _type_response(self, packet, *args, **kw): 
     
    109185            raise ErrorTypes.AuthenticationError('Did not find response "method" element') 
    110186 
    111         del packet['method',] 
    112         if as_.addr.authority: 
     187        if method.Authenticate(self, as_.addr): 
    113188            self.connection.OnAuthenticated(True, as_.addr) 
    114189            self._reply_success(packet, *args, **kw) 
     
    116191            self.connection.OnAuthenticated(False, as_.addr) 
    117192            self._reply_failure(packet, *args, **kw) 
     193            raise ErrorTypes.AuthenticationError('Invalid authentication') 
    118194 
    119195    def _reply_success(self, packet, *args, **kw): 
     196        packet.delnodes('method') 
    120197        packet.attrs['type'] = 'success' 
    121         self.connection.SendPacket(packet) 
     198        self.SendPacket(packet) 
    122199 
    123200    def _reply_failure(self, packet, *args, **kw): 
     201        packet.delnodes('method') 
    124202        packet.attrs['type'] = 'failure' 
    125         self.connection.SendPacket(packet) 
    126         raise ErrorTypes.AuthenticationError('Invalid response to challenge') 
    127  
     203        self.SendPacket(packet) 
     204 
  • trunk/RBTelepathy/demo/simple/host/ErrorHandler.py

    r451 r453  
    4141    DefaultNamespace = NamespaceSynonyms[None] 
    4242    ElementFactories = ElementFactorySet({ 
    43             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
     43            (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 
    4444        }) 
    4545 
  • trunk/RBTelepathy/demo/simple/host/MessageHandler.py

    r451 r453  
    4949            (DefaultNamespace, 'from'): RBME.Factory(RBME.URIAddressElement), 
    5050            (DefaultNamespace, 'stream'): RBMStream.StreamFormatFactory(), 
    51             (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 
    52             None: RBME.Factory(RBME.PacketChildElement), 
     51            (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 
     52            None: RBME.Factory(RBME.PacketElement), 
    5353        }) 
    5454    default_namespaces = RBME.StreamRootElement.default_namespaces .copy() 
     
    6060 
    6161    def GetAddresses(self, nodename='to'): 
    62         existing = self.iternodes(nodename, DefaultNamespace
     62        existing = self.iternodes(nodename
    6363        result = [each.addr for each in existing] 
    6464        return result 
     
    8989            key = connection.loginaddr.authority 
    9090            self.log.info('Registering %r with router', key) 
    91             self.router.AuthorityRoutes[key] = [self
     91            self.router.AuthorityRoutes[key] = [self.OnRoutedPacket
    9292 
    9393    def OnRoutedPacket(self, packet, addresses): 
     
    9797        packet.SetAddresses(addresses) 
    9898        self.log.debug('Sending routed packet to protocol') 
    99         self.connection.SendPacket(packet) 
     99        self.SendPacket(packet) 
    100100 
    101101    def OnStreamPacket(self, packet): 
    102102        # TODO: Flush out 
    103103        #fromlist = packet.GetAddresses('from') 
    104         #if fromlist:  
    105         #    raise ValueError, '"from" element not allowed on a user connection' 
     104        #if fromlist: raise ValueError, '"from" element not allowed on a user connection' 
    106105        tolist = packet.GetAddresses('to') 
    107106 
    108107        self.log.info('Sending "%s" packet to Router', packet.node) 
    109108        if not self.router: 
    110             raise ErrorTypes.RoutingError, 'No router available' 
     109            self.router = connection.model().GetRouter((DefaultNamespace, 'message')) 
     110            if not self.router: 
     111                raise ErrorTypes.RoutingError, 'No router available' 
    111112        routecommands = self.router.RoutePacket(packet, tolist) 
    112113        if routecommands: 
  • trunk/RBTelepathy/demo/simple/host/TestServer.py

    r452 r453  
    8787 
    8888logging.basicConfig() 
    89 logging.root.setLevel(logging.INFO) 
    90 #logging.root.setLevel(logging.DEBUG) 
     89if 1: logging.root.setLevel(logging.INFO) 
     90else: logging.root.setLevel(logging.DEBUG) 
    9191 
    9292#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~