Mini Shell
# Copyright (c) 2016 Kontron Europe GmbH
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
class Session(object):
AUTH_TYPE_NONE = 0x00
AUTH_TYPE_MD2 = 0x01
AUTH_TYPE_MD5 = 0x02
AUTH_TYPE_PASSWORD = 0x04
AUTH_TYPE_OEM = 0x05
PRIV_LEVEL_USER = 2
PRIV_LEVEL_OPERATOR = 3
PRIV_LEVEL_ADMINISTRATOR = 4
PRIV_LEVEL_OEM = 5
session_id = None
_interface = None
_priv_level = PRIV_LEVEL_ADMINISTRATOR
_auth_type = AUTH_TYPE_NONE
_auth_username = None
_auth_password = None
_rmcp_host = None
_rmcp_port = None
_serial_port = None
_serial_baudrate = None
def __init__(self):
self.established = False
self.sid = 0
self.sequence_number = 0
self.activated = False
def _get_interface(self):
try:
return self._interface
except AttributeError:
raise RuntimeError('No interface has been set')
def _set_interface(self, interface):
self._interface = interface
def increment_sequence_number(self):
self.sequence_number += 1
if self.sequence_number > 0xffffffff:
self.sequence_number = 1
def set_session_type_rmcp(self, host, port=623):
self._rmcp_host = host
self._rmcp_port = port
@property
def rmcp_host(self):
return self._rmcp_host
@property
def rmcp_port(self):
return self._rmcp_port
def set_session_type_serial(self, port, baudrate):
self._serial_port = port
self._serial_baudrate = baudrate
@property
def serial_port(self):
return self._serial_port
@property
def serial_baudrate(self):
return self._serial_baudrate
@property
def priv_level(self):
return self._priv_level
def set_priv_level(self, level):
LEVELS = {
'user': self.PRIV_LEVEL_USER,
'operator': self.PRIV_LEVEL_OPERATOR,
'administrator': self.PRIV_LEVEL_ADMINISTRATOR,
}
self._priv_level = LEVELS[level.lower()]
def _set_auth_type(self, auth_type):
self._auth_type = auth_type
def _get_auth_type(self):
return self._auth_type
def set_auth_type_user(self, username, password):
self._auth_type = self.AUTH_TYPE_PASSWORD
self._auth_username = username
self._auth_password = password
@property
def auth_username(self):
return self._auth_username
@property
def auth_password(self):
return self._auth_password
def establish(self):
if hasattr(self.interface, 'establish_session'):
self.interface.establish_session(self)
def close(self):
if hasattr(self.interface, 'close_session'):
self.interface.close_session()
def rmcp_ping(self):
if hasattr(self.interface, 'rmcp_ping'):
self.interface.rmcp_ping()
def __str__(self):
string = 'Session:\n'
string += ' ID: 0x%08x\n' % self.sid
string += ' Seq: 0x%08x\n' % self.sequence_number
string += ' Host: %s:%s\n' % (self._rmcp_host, self._rmcp_port)
string += ' Auth.: %s\n' % self.auth_type
string += ' User: %s\n' % self._auth_username
string += ' Password: %s\n' % self._auth_password
string += '\n'
return string
interface = property(_get_interface, _set_interface)
auth_type = property(_get_auth_type, _set_auth_type)
Zerion Mini Shell 1.0