Changeset 453
- Timestamp:
- 02/25/03 17:58:01 (6 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/XMLNamespaceMap.py (modified) (1 diff)
- trunk/RBFoundation/RBFoundation/XMLNode.py (modified) (7 diffs)
- trunk/RBTelepathy/RBTelepathy/Handlers/__init__.py (modified) (2 diffs)
- trunk/RBTelepathy/RBTelepathy/Packet/Elements.py (modified) (5 diffs)
- trunk/RBTelepathy/RBTelepathy/Routing/KeylistRouterBase.py (modified) (2 diffs)
- trunk/RBTelepathy/RBTelepathy/Routing/RouterBase.py (modified) (2 diffs)
- trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py (modified) (7 diffs)
- trunk/RBTelepathy/demo/simple/client/ErrorHandler.py (modified) (1 diff)
- trunk/RBTelepathy/demo/simple/client/MessageHandler.py (modified) (4 diffs)
- trunk/RBTelepathy/demo/simple/client/TestClient.py (modified) (2 diffs)
- trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py (modified) (6 diffs)
- trunk/RBTelepathy/demo/simple/host/ErrorHandler.py (modified) (1 diff)
- trunk/RBTelepathy/demo/simple/host/MessageHandler.py (modified) (4 diffs)
- trunk/RBTelepathy/demo/simple/host/TestServer.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/XMLNamespaceMap.py
r446 r453 58 58 def __contains__(self, key): 59 59 return key in self.xmlnsmap 60 61 def __len__(self): 62 return len(self.xmlnsmap) 60 63 61 64 def __getitem__(self, key): trunk/RBFoundation/RBFoundation/XMLNode.py
r448 r453 263 263 264 264 def deldata(self, *args, **kw): 265 kw['idxonly'] = 1 265 266 dellist = [x for x in self.enumdata(*args, **kw)] 266 267 dellist.reverse() … … 278 279 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 279 280 280 def enumnodes(self, node=_any, namespace=_any, prefix=_any, idxonly=True):281 def enumnodes(self, *args, **kw): 281 282 """Returns a generator to iterate through the matching child node indicies of xmlnode. 282 283 obj.enumnodes(node=_any, namespace=_any, prefix=_any)""" … … 311 312 def delnodes(self, *args, **kw): 312 313 """Removes all matching child nodes of xmlnode""" 314 kw['idxonly'] = 1 313 315 dellist = [x for x in self.enumnodes(*args, **kw)] 314 316 dellist.reverse() … … 414 416 return ''.join(result) 415 417 416 def toXML(self, *args, **kw):417 """See toxml."""418 return self.toxml(*args, **kw)419 420 418 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 421 419 #~ Protected Methods 422 420 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 423 424 def _toXML(self, *args, **kw):425 """See toxml."""426 return self.toxml(*args, **kw)427 421 428 422 def _getnodefactory(self, *args, **kw): … … 489 483 def __init__(self, owner, parent, node, attributes, namespacemap): 490 484 prefix = namespacemap.prefix(node[0]) 491 if node[0] in namespacemap: 492 nodename, xmlns = node[1], node[0]493 else: nodename, xmlns = node[1], None485 if node[0] in namespacemap: xmlns, nodename = node 486 elif namespacemap.nextmap is None: xmlns, nodename = node 487 else: xmlns, nodename = None, node[1] 494 488 xmlnode.__init__(self, nodename, xmlns, prefix, default_namespaces=namespacemap) 495 489 … … 512 506 def _toXML(self, *args, **kw): 513 507 return self.toxml() 508 def _toXML(self, *args, **kw): 509 """See toxml.""" 510 return self.toxml(*args, **kw) 514 511 515 512 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 522 519 def __init__(self, owner, parent, node, attributes, namespacemap, nodebuilder=xmlnode): 523 520 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], None521 if node[0] in namespacemap: xmlns, nodename = node 522 elif namespacemap.nextmap is None: xmlns, nodename = node 523 else: xmlns, nodename = None, node[1] 527 524 nodebuilder = nodebuilder or self.nodebuilder 528 525 self.result = nodebuilder(nodename, xmlns, prefix, default_namespaces=namespacemap) trunk/RBTelepathy/RBTelepathy/Handlers/__init__.py
r451 r453 79 79 80 80 from RBMessaging import ErrorTypes 81 from RBMessaging import ErrorTypes82 81 from RBMessaging.Packet import * 83 82 from RBMessaging.Packet.RBMBuilder import * … … 114 113 raise NotImplementedError 115 114 115 def SendPacket(self, *args, **kw): 116 return self.connection.SendPacket(*args, **kw) 117 trunk/RBTelepathy/RBTelepathy/Packet/Elements.py
r452 r453 54 54 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 55 55 56 class Packet ChildElement(PacketElementBase):56 class PacketElement(PacketElementBase): 57 57 pass 58 58 … … 158 158 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 159 159 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 161 class XMLAdaptor(_NodeXMLAdaptor): 166 162 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 167 163 #~ Constants / Variables / Etc. … … 175 171 176 172 def __init__(self, owner, *args, **kw): 177 XMLAdaptor.__init__(self, owner, *args, **kw)173 _NodeXMLAdaptor.__init__(self, owner, *args, **kw) 178 174 self.owner = owner 179 175 … … 184 180 except AttributeError: 185 181 pass 186 return XMLAdaptor._xmlInitStarted(self)182 return _NodeXMLAdaptor._xmlInitStarted(self) 187 183 188 184 def _xmlInitComplete(self): … … 192 188 except AttributeError: 193 189 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 192 class Factory(XMLProduction.XMLNodeFactory): 206 193 __slots__ = [] 207 xmladaptor = RootXMLAdaptor 208 194 xmladaptor = XMLAdaptor 195 196 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 197 198 RootXMLAdaptor = XMLAdaptor 199 RootFactory = Factory 200 trunk/RBTelepathy/RBTelepathy/Routing/KeylistRouterBase.py
r442 r453 32 32 33 33 class KeylistRouterBase(RouterBase): 34 def OnRoutedPacket(self, packet, keylist):34 def RoutePacket(self, packet, keylist): 35 35 """Template method for generalized packet routing. 36 36 … … 71 71 elif isinstance(destination, RouterBase): 72 72 # Chained router -- delegate to allow extension of command results 73 return destination. OnRoutedPacket(packet, keylist)73 return destination.RoutedPacket(packet, keylist) 74 74 else: 75 75 # Standard result -- just wrap it in a command trunk/RBTelepathy/RBTelepathy/Routing/RouterBase.py
r443 r453 40 40 class RouterBase(object): 41 41 def RoutePacket(self, *args, **kw): 42 """Synonym for OnRoutedPacket"""43 return self.OnRoutedPacket(*args, **kw)44 45 def OnRoutedPacket(self, packet, *args, **kw):46 42 """Entry point for generalized packet routing. 47 43 … … 91 87 92 88 def Commit(self): 93 return self.destination .OnRoutedPacket(self.packet, self.keylist)89 return self.destination(self.packet, self.keylist) 94 90 trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py
r452 r453 36 36 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 37 37 38 class 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 38 83 class authentication(RBME.RootElementBase, XMLClassBuilderObjectMixin): 39 84 __slots__ = [] … … 42 87 ElementFactories = ElementFactorySet({ 43 88 (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 44 (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement),89 (DefaultNamespace, 'method'): RBME.Factory(method), 45 90 }) 46 91 … … 73 118 raise ErrorTypes.AuthenticationError('Sequence type not specified') 74 119 120 print 121 print "AuthRecving:", packet.toxml(True) 122 print 123 75 124 try: OnAuthType = self._CallOnAuthType(AuthType) 76 125 except AttributeError: … … 78 127 else: return OnAuthType(packet, *args, **kw) 79 128 80 def AuthorizeAs(self, loginaddr ):129 def AuthorizeAs(self, loginaddr, bShort=True): 81 130 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) 84 139 85 140 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 95 150 packet += 'as', 96 151 packet[-1].attrs['addr'] = str(self.loginaddr) 97 self. connection.SendPacket(packet)152 self.SendPacket(packet) 98 153 99 154 def _type_options(self, packet, *args, **kw): … … 105 160 packet += 'as', 106 161 packet[-1].attrs['addr'] = str(self.loginaddr) 107 packet += 'method',162 packet += method() 108 163 packet[-1].attrs['type'] = 'plaintext' 109 self. connection.SendPacket(packet)164 self.SendPacket(packet) 110 165 111 166 def _type_challenge(self, packet, *args, **kw): … … 113 168 114 169 def _reply_response(self, packet, *args, **kw): 115 packet = authentication( )170 packet = authentication(namespace=DefaultNamespace) 116 171 packet.attrs['type'] = 'response' 117 172 packet += 'as', 118 173 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' 122 176 packet[-1] += 'challenge', 123 177 packet[-1][-1] += 'password' 124 178 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) 127 182 128 183 def _type_success(self, packet, *args, **kw): trunk/RBTelepathy/demo/simple/client/ErrorHandler.py
r451 r453 41 41 DefaultNamespace = NamespaceSynonyms[None] 42 42 ElementFactories = ElementFactorySet({ 43 (DefaultNamespace, ): RBME.Factory(RBME.Packet ChildElement),43 (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 44 44 }) 45 45 trunk/RBTelepathy/demo/simple/client/MessageHandler.py
r451 r453 49 49 (DefaultNamespace, 'from'): RBME.Factory(RBME.URIAddressElement), 50 50 (DefaultNamespace, 'stream'): RBMStream.StreamFormatFactory(), 51 (DefaultNamespace, ): RBME.Factory(RBME.Packet ChildElement),52 None: RBME.Factory(RBME.Packet ChildElement),51 (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 52 None: RBME.Factory(RBME.PacketElement), 53 53 }) 54 54 default_namespaces = RBME.StreamRootElement.default_namespaces .copy() … … 66 66 def SetAddresses(self, addresses, nodename='to'): 67 67 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 Methods83 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~84 85 def __init__(self, connection):86 self.connection = connection87 self.router = connection.model().GetRouter((DefaultNamespace, 'message'))88 if self.router:89 key = connection.loginaddr.authority90 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 addresses95 #packet = copy.copy(packet)96 # Change the address lists in the packet97 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 out103 #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 ()116 68 117 69 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 137 89 def OnRoutedPacket(self, packet, addresses): 138 90 print 'OnRoutedPacket:' 139 print packet. _toXML()91 print packet.toxml() 140 92 print 141 93 for stream in packet.datastreams: … … 145 97 def OnStreamPacket(self, packet): 146 98 print 'OnStreamPacket:' 147 print packet. _toXML()99 print packet.toxml() 148 100 print 149 101 for stream in packet.datastreams: trunk/RBTelepathy/demo/simple/client/TestClient.py
r452 r453 123 123 124 124 logging.basicConfig() 125 logging.root.setLevel(logging.INFO)126 #logging.root.setLevel(logging.DEBUG)125 if 1: logging.root.setLevel(logging.INFO) 126 else: logging.root.setLevel(logging.DEBUG) 127 127 128 128 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 134 134 model = TestModel() 135 135 send = model.Connect('send', None) 136 while not getattr(send, 'loginaddr', None): 137 model.Process(0.1) 136 138 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): 138 140 model.Process(0.1) 139 141 send.Message('recv', 'Some text for recv!') trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py
r452 r453 36 36 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 37 37 38 class 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 83 class 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 89 class 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 96 class 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 103 class 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 112 DefaultAuthMethod = AuthSHA # XXX:XXX:XXX:XXX 38 113 class authentication(RBME.RootElementBase, XMLClassBuilderObjectMixin): 39 114 __slots__ = [] … … 42 117 ElementFactories = ElementFactorySet({ 43 118 (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 44 (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement),119 (DefaultNamespace, 'method'): RBME.Factory(DefaultAuthMethod), 45 120 }) 46 121 … … 90 165 def _reply_options(self, packet, *args, **kw): 91 166 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) 95 171 96 172 def _type_select(self, packet, *args, **kw): … … 99 175 def _reply_challenge(self, packet, *args, **kw): 100 176 packet.attrs['type'] = 'challenge' 101 self. connection.SendPacket(packet)177 self.SendPacket(packet) 102 178 103 179 def _type_response(self, packet, *args, **kw): … … 109 185 raise ErrorTypes.AuthenticationError('Did not find response "method" element') 110 186 111 del packet['method',] 112 if as_.addr.authority: 187 if method.Authenticate(self, as_.addr): 113 188 self.connection.OnAuthenticated(True, as_.addr) 114 189 self._reply_success(packet, *args, **kw) … … 116 191 self.connection.OnAuthenticated(False, as_.addr) 117 192 self._reply_failure(packet, *args, **kw) 193 raise ErrorTypes.AuthenticationError('Invalid authentication') 118 194 119 195 def _reply_success(self, packet, *args, **kw): 196 packet.delnodes('method') 120 197 packet.attrs['type'] = 'success' 121 self. connection.SendPacket(packet)198 self.SendPacket(packet) 122 199 123 200 def _reply_failure(self, packet, *args, **kw): 201 packet.delnodes('method') 124 202 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 41 41 DefaultNamespace = NamespaceSynonyms[None] 42 42 ElementFactories = ElementFactorySet({ 43 (DefaultNamespace, ): RBME.Factory(RBME.Packet ChildElement),43 (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 44 44 }) 45 45 trunk/RBTelepathy/demo/simple/host/MessageHandler.py
r451 r453 49 49 (DefaultNamespace, 'from'): RBME.Factory(RBME.URIAddressElement), 50 50 (DefaultNamespace, 'stream'): RBMStream.StreamFormatFactory(), 51 (DefaultNamespace, ): RBME.Factory(RBME.Packet ChildElement),52 None: RBME.Factory(RBME.Packet ChildElement),51 (DefaultNamespace, ): RBME.Factory(RBME.PacketElement), 52 None: RBME.Factory(RBME.PacketElement), 53 53 }) 54 54 default_namespaces = RBME.StreamRootElement.default_namespaces .copy() … … 60 60 61 61 def GetAddresses(self, nodename='to'): 62 existing = self.iternodes(nodename , DefaultNamespace)62 existing = self.iternodes(nodename) 63 63 result = [each.addr for each in existing] 64 64 return result … … 89 89 key = connection.loginaddr.authority 90 90 self.log.info('Registering %r with router', key) 91 self.router.AuthorityRoutes[key] = [self ]91 self.router.AuthorityRoutes[key] = [self.OnRoutedPacket] 92 92 93 93 def OnRoutedPacket(self, packet, addresses): … … 97 97 packet.SetAddresses(addresses) 98 98 self.log.debug('Sending routed packet to protocol') 99 self. connection.SendPacket(packet)99 self.SendPacket(packet) 100 100 101 101 def OnStreamPacket(self, packet): 102 102 # TODO: Flush out 103 103 #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' 106 105 tolist = packet.GetAddresses('to') 107 106 108 107 self.log.info('Sending "%s" packet to Router', packet.node) 109 108 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' 111 112 routecommands = self.router.RoutePacket(packet, tolist) 112 113 if routecommands: trunk/RBTelepathy/demo/simple/host/TestServer.py
r452 r453 87 87 88 88 logging.basicConfig() 89 logging.root.setLevel(logging.INFO)90 #logging.root.setLevel(logging.DEBUG)89 if 1: logging.root.setLevel(logging.INFO) 90 else: logging.root.setLevel(logging.DEBUG) 91 91 92 92 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
