Changeset 452
- Timestamp:
- 02/24/03 17:31:32 (6 years ago)
- Files:
-
- trunk/RBTelepathy/RBTelepathy/Packet/Builder.py (modified) (2 diffs)
- trunk/RBTelepathy/RBTelepathy/Packet/Elements.py (modified) (1 diff)
- trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py (modified) (1 diff)
- trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py (modified) (6 diffs)
- trunk/RBTelepathy/demo/simple/client/TestClient.py (modified) (3 diffs)
- trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py (modified) (6 diffs)
- trunk/RBTelepathy/demo/simple/host/TestServer.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBTelepathy/RBTelepathy/Packet/Builder.py
r450 r452 63 63 return self.Parse(*args, **kw) 64 64 except ErrorTypes.RBMessagingError, e: 65 # Pass these along... 66 raise 65 raise # Pass these along... 67 66 except ExpatError, e: 68 67 raise ErrorTypes.PacketInvalidXMLError(str(e)) … … 83 82 raise ErrorTypes.PacketHandlerError(str(e)) 84 83 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 89 89 trunk/RBTelepathy/RBTelepathy/Packet/Elements.py
r450 r452 159 159 160 160 #class XMLAdaptor(XMLProduction.NodeXMLAdaptor): pass 161 XMLAdaptor = XMLProduction.NodeXMLAdaptor 161 162 #class Factory(XMLProduction.XMLNodeFactory): xmladaptor = XMLAdaptor 162 XMLAdaptor = XMLProduction.NodeXMLAdaptor163 163 Factory = XMLProduction.XMLNodeFactory 164 164 165 165 class 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) 170 200 171 201 class RootFactory(Factory): 202 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 203 #~ Constants / Variables / Etc. 204 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 205 206 __slots__ = [] 172 207 xmladaptor = RootXMLAdaptor 173 208 trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py
r448 r452 169 169 def __init__(self, owner, *args, **kw): 170 170 XMLAdaptor.__init__(self, owner, *args, **kw) 171 owner. result.datastreams.append(self.result)171 owner.RootElement().result.datastreams.append(self.result) 172 172 173 173 class StreamFormatFactory(Factory): trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py
r451 r452 41 41 DefaultNamespace = NamespaceSynonyms[None] 42 42 ElementFactories = ElementFactorySet({ 43 (DefaultNamespace, ' simple'): RBME.Factory(RBME.URIAddressElement),43 (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 44 44 (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 45 45 }) … … 63 63 def __init__(self, connection): 64 64 self.connection = connection 65 self._ValidTypes = {}66 65 67 66 def OnRoutedPacket(self, packet, *args, **kw): … … 70 69 def OnStreamPacket(self, packet, *args, **kw): 71 70 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'] 74 72 except KeyError: 75 73 raise ErrorTypes.AuthenticationError('Sequence type not specified') 76 74 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: 81 77 raise ErrorTypes.AuthenticationError('Invalid or out of sequence type "%s"' % (AuthType,)) 78 else: return OnAuthType(packet, *args, **kw) 82 79 83 80 def AuthorizeAs(self, loginaddr): 84 81 self.loginaddr = URIAddress.URIAddress(loginaddr) 85 self._reply_query(None) 82 #self._reply_query(None) 83 self._reply_response(None) 86 84 87 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 89 87 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 90 88 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) 101 91 102 92 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) 105 98 106 99 def _type_options(self, packet, *args, **kw): … … 108 101 109 102 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) 112 110 113 111 def _type_challenge(self, packet, *args, **kw): … … 115 113 116 114 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) 120 127 121 128 def _type_success(self, packet, *args, **kw): trunk/RBTelepathy/demo/simple/client/TestClient.py
r449 r452 54 54 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 55 55 56 class TestSBP(StreamPacketBuilder): 57 NamespaceSynonyms = {None: DefaultNamespace} 58 DefaultNamespace = NamespaceSynonyms[None] 59 60 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61 56 62 class ClientConnection(SocketConnections.ProtocolConnection): 57 63 """Created at the request of an in-process client, client connections represent outbound requests to external services. … … 71 77 def LoadDefaultHandlers(self): 72 78 SocketConnections.ProtocolConnection.LoadDefaultHandlers(self) 73 self.protocol.packetbuilder = StreamPacketBuilder()79 self.protocol.packetbuilder = TestSBP() 74 80 self.LoadHandler(ErrorHandler.ErrorHandler) 75 81 self.LoadHandler(AuthenticationHandler.ClientAuthenticationHandler) … … 124 130 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 125 131 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 True139 except KeyboardInterrupt:140 pass141 142 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~143 144 132 if __name__ == '__main__': 145 133 try: trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py
r451 r452 41 41 DefaultNamespace = NamespaceSynonyms[None] 42 42 ElementFactories = ElementFactorySet({ 43 (DefaultNamespace, ' simple'): RBME.Factory(RBME.URIAddressElement),43 (DefaultNamespace, 'as'): RBME.Factory(RBME.URIAddressElement), 44 44 (DefaultNamespace, ): RBME.Factory(RBME.PacketChildElement), 45 45 }) … … 63 63 def __init__(self, connection): 64 64 self.connection = connection 65 self._ValidTypes = {}66 self._EnableType('query')67 self._EnableType('select')68 65 69 66 def OnRoutedPacket(self, packet, *args, **kw): … … 72 69 def OnStreamPacket(self, packet, *args, **kw): 73 70 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'] 76 72 except KeyError: 77 73 raise ErrorTypes.AuthenticationError('Sequence type not specified') 78 74 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: 83 77 raise ErrorTypes.AuthenticationError('Invalid or out of sequence type "%s"' % (AuthType,)) 78 else: return OnAuthType(packet, *args, **kw) 84 79 85 80 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 87 82 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 88 83 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) 103 86 104 87 def _type_query(self, packet, *args, **kw): … … 106 89 107 90 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) 109 95 110 96 def _type_select(self, packet, *args, **kw): … … 112 98 113 99 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) 116 102 117 103 def _type_response(self, packet, *args, **kw): 118 try: 119 simple = packet['simple',][0] 104 try: as_ = packet['as',][0] 120 105 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') 122 110 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) 125 114 self._reply_success(packet, *args, **kw) 126 115 else: 127 self.connection.OnAuthenticated(False, simple.addr)116 self.connection.OnAuthenticated(False, as_.addr) 128 117 self._reply_failure(packet, *args, **kw) 129 118 130 119 def _reply_success(self, packet, *args, **kw): 131 self._send_packet('success') 120 packet.attrs['type'] = 'success' 121 self.connection.SendPacket(packet) 132 122 133 123 def _reply_failure(self, packet, *args, **kw): 134 self._send_packet('failure') 124 packet.attrs['type'] = 'failure' 125 self.connection.SendPacket(packet) 135 126 raise ErrorTypes.AuthenticationError('Invalid response to challenge') 136 127 trunk/RBTelepathy/demo/simple/host/TestServer.py
r449 r452 48 48 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49 49 50 class TestSBP(StreamPacketBuilder): 51 NamespaceSynonyms = {None: DefaultNamespace} 52 DefaultNamespace = NamespaceSynonyms[None] 53 54 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 55 50 56 class HostConnection(SocketConnections.ProtocolConnection): 51 57 """Created in response to inbound requests, host connections handle inbound traffic *from* a client connection.""" … … 66 72 def LoadDefaultHandlers(self): 67 73 SocketConnections.ProtocolConnection.LoadDefaultHandlers(self) 68 self.protocol.packetbuilder = StreamPacketBuilder()74 self.protocol.packetbuilder = TestSBP() 69 75 self.LoadHandler(ErrorHandler.ErrorHandler) 70 76 self.LoadHandler(AuthenticationHandler.HostAuthenticationHandler) … … 79 85 80 86 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 87 88 logging.basicConfig() 89 logging.root.setLevel(logging.INFO) 90 #logging.root.setLevel(logging.DEBUG) 91 92 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 81 93 #~ Main 82 94 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 83 95 84 96 if __name__ == '__main__': 85 logging.basicConfig()86 #logging.root.setLevel(logging.INFO)87 logging.root.setLevel(logging.DEBUG)88 89 97 model = Model.MessagingModel() 90 98 model.Routers[(DefaultNamespace, 'message')] = SimpleRouter.AuthorityDictRouter()
