# -*- coding: utf-8 -*- # _state.py # Copyright (C) 2017 LEAP Encryption Access Project # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ VPN State. """ import time class State(object): """ Possible States in an OpenVPN connection, according to the OpenVPN Management documentation. """ CONNECTING = 'CONNECTING' WAIT = 'WAIT' AUTH = 'AUTH' GET_CONFIG = 'GET_CONFIG' ASSIGN_IP = 'ASSIGN_IP' ADD_ROUTES = 'ADD_ROUTES' CONNECTED = 'CONNECTED' RECONNECTING = 'RECONNECTING' EXITING = 'EXITING' OFF = 'OFF' ON = 'ON' STARTING = 'STARTING' STOPPING = 'STOPPING' FAILED = 'FAILED' _legend = { 'CONNECTING': 'Connecting to remote server', 'WAIT': 'Waiting from initial response from server', 'AUTH': 'Authenticating with server', 'GET_CONFIG': 'Downloading configuration options from server', 'ASSIGN_IP': 'Assigning IP address to virtual network interface', 'ADD_ROUTES': 'Adding routes to system', 'CONNECTED': 'Initialization Sequence Completed', 'RECONNECTING': 'A restart has occurred', 'EXITING': 'A graceful exit is in progress', 'OFF': 'Disconnected', 'FAILED': 'A failure has occurred', } _simple = { 'CONNECTING': STARTING, 'WAIT': STARTING, 'AUTH': STARTING, 'GET_CONFIG': STARTING, 'ASSIGN_IP': STARTING, 'ADD_ROUTES': STARTING, 'CONNECTED': ON, 'RECONNECTING': STARTING, 'EXITING': STOPPING, 'OFF': OFF, 'FAILED': OFF } def __init__(self, state, timestamp): self.state = state self.timestamp = timestamp @classmethod def get_legend(cls, state): return cls._legend.get(state) @classmethod def get_simple(cls, state): return cls._simple.get(state) @property def simple(self): return self.get_simple(self.state) @property def legend(self): return self.get_legend(self.state) def __repr__(self): return '' % ( self.state, time.ctime(int(self.timestamp)))