| @@ -1,6 +1,6 @@ | |||||
| """ | """ | ||||
| This module contains :py:class:`SocketDevice` interface for `AlarmDecoder`_ devices | |||||
| that are exposed through `ser2sock`_ or another IP to serial solution. Also supports | |||||
| This module contains :py:class:`SocketDevice` interface for `AlarmDecoder`_ devices | |||||
| that are exposed through `ser2sock`_ or another IP to serial solution. Also supports | |||||
| SSL if using `ser2sock`_. | SSL if using `ser2sock`_. | ||||
| .. _ser2sock: http://github.com/nutechsoftware/ser2sock | .. _ser2sock: http://github.com/nutechsoftware/ser2sock | ||||
| @@ -136,6 +136,25 @@ class SocketDevice(Device): | |||||
| """ | """ | ||||
| self._ssl_ca = value | self._ssl_ca = value | ||||
| @property | |||||
| def ssl_allow_self_signed(self): | |||||
| """ | |||||
| Retrieves whether this socket is to allow self signed SSL certificates. | |||||
| :returns: True if self signed certificates are allowed, otherwise False | |||||
| """ | |||||
| return self._ssl_allow_self_signed | |||||
| @ssl_allow_self_signed.setter | |||||
| def ssl_allow_self_signed(self, value): | |||||
| """ | |||||
| Sets whether this socket is to allow self signed SSL certificates. | |||||
| :param value: True if self signed certificates are to be allowed, otherwise False (or don't set it at all) | |||||
| :type value: bool | |||||
| """ | |||||
| self._ssl_allow_self_signed = value | |||||
| def __init__(self, interface=("localhost", 10000)): | def __init__(self, interface=("localhost", 10000)): | ||||
| """ | """ | ||||
| Constructor | Constructor | ||||
| @@ -150,6 +169,7 @@ class SocketDevice(Device): | |||||
| self._ssl_certificate = None | self._ssl_certificate = None | ||||
| self._ssl_key = None | self._ssl_key = None | ||||
| self._ssl_ca = None | self._ssl_ca = None | ||||
| self._ssl_allow_self_signed = False | |||||
| def open(self, baudrate=None, no_reader_thread=False): | def open(self, baudrate=None, no_reader_thread=False): | ||||
| """ | """ | ||||
| @@ -217,7 +237,7 @@ class SocketDevice(Device): | |||||
| def fileno(self): | def fileno(self): | ||||
| """ | """ | ||||
| Returns the file number associated with the device | Returns the file number associated with the device | ||||
| :returns: int | :returns: int | ||||
| """ | """ | ||||
| return self._device.fileno() | return self._device.fileno() | ||||
| @@ -385,7 +405,11 @@ class SocketDevice(Device): | |||||
| else: | else: | ||||
| ctx.load_verify_locations(self.ssl_ca, None) | ctx.load_verify_locations(self.ssl_ca, None) | ||||
| ctx.set_verify(SSL.VERIFY_PEER, self._verify_ssl_callback) | |||||
| verify_method = SSL.VERIFY_PEER | |||||
| if (self._ssl_allow_self_signed): | |||||
| verify_method = SSL.VERIFY_NONE | |||||
| ctx.set_verify(verify_method, self._verify_ssl_callback) | |||||
| self._device = SSL.Connection(ctx, self._device) | self._device = SSL.Connection(ctx, self._device) | ||||