Changeset 465

Show
Ignore:
Timestamp:
03/03/03 00:05:52 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBMessaging/RBMessaging/Client/Handlers/Authentication.py

    r463 r465  
    4444#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4545 
    46 class method(Elements.PacketElement, XMLClassBuilderObjectMixin): 
     46class method(Elements.PacketElement): 
    4747    __slots__ = [] 
    4848    ElementFactories = PacketFactorySet({ 
     
    8787#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8888 
    89 class authentication(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     89class authentication(Elements.RootElementBase): 
    9090    __slots__ = [] 
    9191    ElementFactories = PacketFactorySet({ 
  • trunk/RBMessaging/RBMessaging/Client/Handlers/Error.py

    r463 r465  
    3030#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3131 
    32 class error(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     32class error(Elements.RootElementBase): 
    3333    __slots__ = [] 
    3434    ElementFactories = PacketFactorySet({ 
  • trunk/RBMessaging/RBMessaging/Client/Handlers/Message.py

    r463 r465  
    3131#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3232 
    33 class message(Elements.StreamRootElement, XMLClassBuilderObjectMixin): 
     33class message(Elements.StreamRootElement): 
    3434    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3535    #~ Constants / Variables / Etc.  
  • trunk/RBMessaging/RBMessaging/Host/Handlers/Authentication.py

    r463 r465  
    2525 
    2626from RBTelepathy.Handlers import * 
     27from RBMessaging.Packet import AuthenticationMethods 
    2728 
    2829#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    3031#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3132 
    32 class AuthBaseMethod(Elements.PacketElement, XMLClassBuilderObjectMixin): 
    33     __slots__ = [] 
    34     ElementFactories = PacketFactorySet({ 
    35             'response': Elements.Factory(Elements.PacketElement), 
    36             'challenge': Elements.Factory(Elements.PacketElement), 
    37         }) 
    38  
    39     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    40     #~ Properties  
    41     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    42  
    43     def _get_challenge(self): 
    44         challenge = self['challenge',] 
    45         if len(challenge) > 1: 
    46             raise ErrorTypes.AuthenticationError, '"%s" expected a single "challenge" element' % (self.node,) 
    47         elif len(challenge) == 1: 
    48             challenge = ''.join(map(str, challenge[0].iterdata())) 
    49         else: challenge = 'password' 
    50         return challenge 
    51     def _set_challenge(self, challenge): 
    52         self.delnodes('challenge') 
    53         self.addnode('challenge').adddata(challenge) 
    54     def _del_challenge(self, challenge): 
    55         self.delnodes('challenge') 
    56     challenge = property(_get_challenge, _set_challenge, _del_challenge) 
    57  
    58     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    59  
    60     def _get_response(self): 
    61         response = self['response',] 
    62         if len(response) != 1: 
    63             raise ErrorTypes.AuthenticationError, '"%s" expected a single "response" child element' % (self.node,) 
    64         else: response = ''.join(map(str, response[0].iterdata())) 
    65         return response 
    66     def _set_response(self, response): 
    67         self.delnodes('response') 
    68         self.addnode('response').adddata(response) 
    69     def _del_response(self, response): 
    70         self.delnodes('response') 
    71     response = property(_get_response, _set_response, _del_response) 
    72  
    73 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    74  
    75 class AuthPlaintext(AuthBaseMethod): 
    76     AuthDB = { ('send', 'password'): 'secret', ('recv', 'password'): 'secret' } 
    77     def Authenticate(self, handler, asaddr): 
    78         correct = self.AuthDB[asaddr.account, self.challenge]  
    79         return self.response == correct 
    80  
    81 class AuthMD5(AuthBaseMethod): 
    82     AuthDB = { 'send': 'secret', 'recv': 'secret' } 
    83     def Authenticate(self, handler, asaddr): 
    84         import md5 
    85         correct = md5.new(self.AuthDB[asaddr.account] + self.challenge).hexdigest() 
    86         return self.response == correct 
    87  
    88 class AuthSHA(AuthBaseMethod): 
    89     AuthDB = { 'send': 'secret', 'recv': 'secret' } 
    90     def Authenticate(self, handler, asaddr): 
    91         import sha 
    92         correct = sha.new(self.AuthDB[asaddr.account] + self.challenge).hexdigest() 
    93         return self.response == correct 
    94  
    95 try: 
    96     raise ImportError 
    97     from Crypto.PublicKey import RSA 
    98     import pickle 
    99     class AuthPublicKey(AuthBaseMethod): 
    100         AuthDB = {  
    101             'send': pickle.load(open('send.rsa')), 
    102             'recv': pickle.load(open('send.rsa')), 
    103             } 
    104         def Authenticate(self, handler, asaddr): 
    105             signature = long(self.response) 
    106             key = self.AuthDB[asaddr.account] 
    107             return key.verify(self.challenge, (signature,)) 
    108  
    109     DefaultAuthMethod = AuthPublicKey # XXX:XXX:XXX:XXX 
    110 except ImportError:  
    111     DefaultAuthMethod = AuthSHA # XXX:XXX:XXX:XXX 
    112  
    113 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    114  
    115 class authentication(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     33class authentication(Elements.RootElementBase): 
    11634    __slots__ = [] 
    11735    ElementFactories = PacketFactorySet({ 
    11836        'as': Elements.Factory(Elements.URIAddressElement), 
    119         'method': Elements.Factory(DefaultAuthMethod), 
     37        'method': AuthenticationMethods.MethodFactory(), 
    12038        }) 
    12139 
     
    15371        else: return OnAuthType(packet, *args, **kw) 
    15472 
     73    def GetAccountData(self, asaddr, *args): 
     74        return "secret" 
     75        raise ErrorTypes.AuthenticationError('Authentication data not available') 
     76 
    15577    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    15678    #~ Protected Methods  
     
    16688        packet.attrs['type'] = 'options' 
    16789        for authmethod in ('passkey', 'plaintext', 'md5-hash', 'sha-hash', 'publickey', 'radius'): 
    168             packet += AuthBaseMethod() 
     90            packet += AuthenticationMethod.AuthenticationBaseMethod() 
    16991            packet[-1].attrs['type'] = authmethod 
    17092        self.SendPacket(packet) 
     
    185107            raise ErrorTypes.AuthenticationError('Did not find response "method" element') 
    186108 
    187         if method.Authenticate(self, as_.addr): 
    188             self.connection.OnAuthenticated(True, as_.addr) 
    189             self._reply_success(packet, *args, **kw) 
    190         else: 
     109        try: 
     110            if method.Verify(self, as_.addr): 
     111                self.connection.OnAuthenticated(True, as_.addr) 
     112                self._reply_success(packet, *args, **kw) 
     113            else: 
     114                self.connection.OnAuthenticated(False, as_.addr) 
     115                self._reply_failure(packet, *args, **kw) 
     116                raise ErrorTypes.AuthenticationError('Invalid authentication') 
     117        except ErrorTypes.AuthenticationError, err: 
    191118            self.connection.OnAuthenticated(False, as_.addr) 
    192119            self._reply_failure(packet, *args, **kw) 
    193             raise ErrorTypes.AuthenticationError('Invalid authentication') 
     120            raise 
    194121 
    195122    def _reply_success(self, packet, *args, **kw): 
  • trunk/RBMessaging/RBMessaging/Host/Handlers/Error.py

    r463 r465  
    3030#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3131 
    32 class error(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     32class error(Elements.RootElementBase): 
    3333    __slots__ = [] 
    3434    ElementFactories = PacketFactorySet({ 
  • trunk/RBMessaging/RBMessaging/Host/Handlers/Message.py

    r463 r465  
    3131#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3232 
    33 class message(Elements.StreamRootElement, XMLClassBuilderObjectMixin): 
     33class message(Elements.StreamRootElement): 
    3434    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3535    #~ Constants / Variables / Etc.  
  • trunk/RBTelepathy/RBTelepathy/Handlers/__init__.py

    r463 r465  
    3535documentation is painfully wrong, here is a short pseudocode stub:: 
    3636 
    37     class PacketElementToBuild(Element.RootElementBase, XMLClassBuilderBaseMixin): 
     37    class PacketElementToBuild(Element.RootElementBase) 
    3838        NamespaceSynonyms = { 
    3939            'shortname': 'an.extremely.long.xmlns.that.is.used.frequently',  
     
    7979 
    8080from RBTelepathy import ErrorTypes 
    81 from RBTelepathy.Packet import * 
    82 from RBTelepathy.Packet.Builder import * 
    8381from RBTelepathy.Packet import Elements 
    8482from RBTelepathy.Packet import StreamElements 
    8583from RBTelepathy.Packet import URIAddress 
     84from RBTelepathy.Packet.Builder import PacketFactorySet 
    8685 
    8786#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBTelepathy/RBTelepathy/Packet/Elements.py

    r461 r465  
    2525 
    2626from RBFoundation import XMLNode 
     27from RBFoundation import XMLClassBuilder 
    2728import URIAddress 
    2829 
     
    5758#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5859 
    59 class PacketElement(PacketElementBase): 
     60class LeafElement(PacketElementBase): 
    6061    pass 
    6162 
    6263#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6364 
    64 class RootElementBase(PacketElementBase): 
     65class PacketElement(PacketElementBase, XMLClassBuilder.XMLClassBuilderBaseMixin): 
     66    pass 
     67 
     68#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     69 
     70class RootElementBase(PacketElement): 
    6571    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6672    #~ Public Methods  
  • trunk/RBTelepathy/RBTelepathy/Stream/SocketAdaptor.py

    r464 r465  
    4949    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5050 
    51     _sendData = "" 
     51    _sendData = None 
    5252    isshutdown = False 
    5353    _isshutdown_send = False 
     
    7373 
    7474    def _getSendData(self): 
     75        if self._sendData is None: 
     76            self._sendData = [] 
    7577        return self._sendData 
    7678    def _setSendData(self, data): 
     
    7880            raise ErrorTypes.StreamError('Cannot write to stream after shutdown') 
    7981        else: 
    80             self._sendData = data 
     82            self._sendData.append([data, len(data)]) 
    8183    def _delSendData(self): 
    8284        del self._sendData 
     
    8587 
    8688    def send(self, data): 
    87         self.SendData += data 
     89        self.SendData.append([data, len(data)]) 
    8890    write = send 
    8991 
     
    142144 
    143145    def _ProcessWrite(self, *args, **kw): 
    144         nSent = self._SocketSend(self._sendData, *args, **kw) 
    145         self._sendData = self._sendData[nSent:] 
     146        remaining = self._sendData[0][1] 
     147        data = self._sendData[0][0] 
     148        if remaining > 100000: 
     149            start, end = -remaining, -remaining + 100000 
     150            nSent = self._SocketSend(data[start:end], *args, **kw) 
     151        else: 
     152            nSent = self._SocketSend(data[-remaining:], *args, **kw) 
     153        if nSent is not None: 
     154            remaining -= nSent 
     155            if remaining > 0: 
     156                print ":: Sent", nSent 
     157                self._sendData[0][1] = remaining 
     158            else: 
     159                self._sendData.pop(0) 
     160 
    146161        if self.isshutdown: 
    147162            # Ok, we're shutdown, but were still sending data 
     
    218233        try: 
    219234            self._sendDataLock.acquire(True) 
    220             SocketStream._delSendData(
     235            SocketStream._delSendData(self
    221236        finally: 
    222237            self._sendDataLock.release() 
  • trunk/RBTelepathy/demo/simple/client/AuthenticationHandler.py

    r463 r465  
    4545#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4646 
    47 class method(Elements.PacketElement, XMLClassBuilderObjectMixin): 
     47class method(Elements.PacketElement): 
    4848    __slots__ = [] 
    4949    NamespaceSynonyms = {None: DefaultNamespace} 
     
    9090#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    9191 
    92 class authentication(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     92class authentication(Elements.RootElementBase): 
    9393    __slots__ = [] 
    9494    NamespaceSynonyms = {None: DefaultNamespace} 
  • trunk/RBTelepathy/demo/simple/client/ErrorHandler.py

    r463 r465  
    3636#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3737 
    38 class error(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     38class error(Elements.RootElementBase): 
    3939    __slots__ = [] 
    4040    NamespaceSynonyms = {None: DefaultNamespace} 
  • trunk/RBTelepathy/demo/simple/client/MessageHandler.py

    r463 r465  
    3737#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3838 
    39 class message(Elements.StreamRootElement, XMLClassBuilderObjectMixin): 
     39class message(Elements.StreamRootElement): 
    4040    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4141    #~ Constants / Variables / Etc.  
  • trunk/RBTelepathy/demo/simple/host/AuthenticationHandler.py

    r463 r465  
    3636#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3737 
    38 class AuthBaseMethod(Elements.PacketElement, XMLClassBuilderObjectMixin): 
     38class AuthBaseMethod(Elements.PacketElement): 
    3939    __slots__ = [] 
    4040    NamespaceSynonyms = {None: DefaultNamespace} 
     
    120120#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    121121 
    122 class authentication(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     122class authentication(Elements.RootElementBase): 
    123123    __slots__ = [] 
    124124    NamespaceSynonyms = {None: DefaultNamespace} 
  • trunk/RBTelepathy/demo/simple/host/ErrorHandler.py

    r463 r465  
    3636#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3737 
    38 class error(Elements.RootElementBase, XMLClassBuilderObjectMixin): 
     38class error(Elements.RootElementBase): 
    3939    __slots__ = [] 
    4040    NamespaceSynonyms = {None: DefaultNamespace} 
  • trunk/RBTelepathy/demo/simple/host/MessageHandler.py

    r463 r465  
    3737#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3838 
    39 class message(Elements.StreamRootElement, XMLClassBuilderObjectMixin): 
     39class message(Elements.StreamRootElement): 
    4040    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4141    #~ Constants / Variables / Etc.