diff options
| author | kali <kali@leap.se> | 2013-02-15 09:31:51 +0900 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2013-02-15 09:31:51 +0900 | 
| commit | 9cea9c8a34343f8792d65b96f93ae22bd8685878 (patch) | |
| tree | 9f512367b1d47ced5614702a00f3ff0a8fe746d7 /src/leap/base/connection.py | |
| parent | 7159734ec6c0b76fc7f3737134cd22fdaaaa7d58 (diff) | |
| parent | 1032e07a50c8bb265ff9bd31b3bb00e83ddb451e (diff) | |
Merge branch 'release/v0.2.0'
Conflicts:
	README.txt
Diffstat (limited to 'src/leap/base/connection.py')
| -rw-r--r-- | src/leap/base/connection.py | 115 | 
1 files changed, 115 insertions, 0 deletions
| diff --git a/src/leap/base/connection.py b/src/leap/base/connection.py new file mode 100644 index 00000000..41d13935 --- /dev/null +++ b/src/leap/base/connection.py @@ -0,0 +1,115 @@ +""" +Base Connection Classs +""" +from __future__ import (division, unicode_literals, print_function) + +import logging + +from leap.base.authentication import Authentication + +logger = logging.getLogger(name=__name__) + + +class Connection(Authentication): +    # JSONLeapConfig +    #spec = {} + +    def __init__(self, *args, **kwargs): +        self.connection_state = None +        self.desired_connection_state = None +        #XXX FIXME diamond inheritance gotcha.. +        #If you inherit from >1 class, +        #super is only initializing one +        #of the bases..!! +        # I think we better pass config as a constructor +        # parameter -- kali 2012-08-30 04:33 +        super(Connection, self).__init__(*args, **kwargs) + +    def connect(self): +        """ +        entry point for connection process +        """ +        pass + +    def disconnect(self): +        """ +        disconnects client +        """ +        pass + +    #def shutdown(self): +        #""" +        #shutdown and quit +        #""" +        #self.desired_con_state = self.status.DISCONNECTED + +    def connection_state(self): +        """ +        returns the current connection state +        """ +        return self.status.current + +    def desired_connection_state(self): +        """ +        returns the desired_connection state +        """ +        return self.desired_connection_state + +    def get_icon_name(self): +        """ +        get icon name from status object +        """ +        return self.status.get_state_icon() + +    # +    # private methods +    # + +    def _disconnect(self): +        """ +        private method for disconnecting +        """ +        if self.subp is not None: +            self.subp.terminate() +            self.subp = None +        # XXX signal state changes! :) + +    def _is_alive(self): +        """ +        don't know yet +        """ +        pass + +    def _connect(self): +        """ +        entry point for connection cascade methods. +        """ +        #conn_result = ConState.DISCONNECTED +        try: +            conn_result = self._try_connection() +        except UnrecoverableError as except_msg: +            logger.error("FATAL: %s" % unicode(except_msg)) +            conn_result = self.status.UNRECOVERABLE +        except Exception as except_msg: +            self.error_queue.append(except_msg) +            logger.error("Failed Connection: %s" % +                         unicode(except_msg)) +        return conn_result + + +class ConnectionError(Exception): +    """ +    generic connection error +    """ +    def __str__(self): +        if len(self.args) >= 1: +            return repr(self.args[0]) +        else: +            raise self() + + +class UnrecoverableError(ConnectionError): +    """ +    we cannot do anything about it, sorry +    """ +    pass | 
