diff --git a/pyad2usb/devices.py b/pyad2usb/devices.py index b93c380..f232ab5 100644 --- a/pyad2usb/devices.py +++ b/pyad2usb/devices.py @@ -4,12 +4,10 @@ Contains different types of devices belonging to the AD2USB family. .. moduleauthor:: Scott Petersen """ -import usb.core -import usb.util +import usb.core, usb.util import time import threading -import serial -import serial.tools.list_ports +import serial, serial.tools.list_ports import socket from OpenSSL import SSL, crypto from pyftdi.pyftdi.ftdi import * @@ -301,6 +299,7 @@ class USBDevice(Device): self._device.write_data(data) self.on_write(data) + except FtdiError, err: raise util.CommError('Error writing to device: {0}'.format(str(err)), err) @@ -740,31 +739,7 @@ class SocketDevice(Device): self._device = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if self._use_ssl: - try: - ctx = SSL.Context(SSL.TLSv1_METHOD) - - if isinstance(self.ssl_key, crypto.PKey): - ctx.use_privatekey(self.ssl_key) - else: - ctx.use_privatekey_file(self.ssl_key) - - if isinstance(self.ssl_certificate, crypto.X509): - ctx.use_certificate(self.ssl_certificate) - else: - ctx.use_certificate_file(self.ssl_certificate) - - if isinstance(self.ssl_ca, crypto.X509): - store = ctx.get_cert_store() - store.add_cert(self.ssl_ca) - else: - ctx.load_verify_locations(self.ssl_ca, None) - - ctx.set_verify(SSL.VERIFY_PEER, self._verify_ssl_callback) - - self._device = SSL.Connection(ctx, self._device) - - except SSL.Error, err: - raise util.CommError('Error setting up SSL connection.', err) + self._init_ssl() self._device.connect((self._host, self._port)) @@ -906,6 +881,33 @@ class SocketDevice(Device): return ret + def _init_ssl(self): + try: + ctx = SSL.Context(SSL.TLSv1_METHOD) + + if isinstance(self.ssl_key, crypto.PKey): + ctx.use_privatekey(self.ssl_key) + else: + ctx.use_privatekey_file(self.ssl_key) + + if isinstance(self.ssl_certificate, crypto.X509): + ctx.use_certificate(self.ssl_certificate) + else: + ctx.use_certificate_file(self.ssl_certificate) + + if isinstance(self.ssl_ca, crypto.X509): + store = ctx.get_cert_store() + store.add_cert(self.ssl_ca) + else: + ctx.load_verify_locations(self.ssl_ca, None) + + ctx.set_verify(SSL.VERIFY_PEER, self._verify_ssl_callback) + + self._device = SSL.Connection(ctx, self._device) + + except SSL.Error, err: + raise util.CommError('Error setting up SSL connection.', err) + def _verify_ssl_callback(self, connection, x509, errnum, errdepth, ok): #print ok return ok diff --git a/pyad2usb/panels.py b/pyad2usb/panels.py index 33d220f..00a2e95 100644 --- a/pyad2usb/panels.py +++ b/pyad2usb/panels.py @@ -1,5 +1,7 @@ """ Representations of Panels and their templates. + +.. moduleauthor:: Scott Petersen """ VISTA20 = 0 diff --git a/pyad2usb/util.py b/pyad2usb/util.py index 5f6aa83..e005e08 100644 --- a/pyad2usb/util.py +++ b/pyad2usb/util.py @@ -1,5 +1,7 @@ """ Provides utility classes for the AD2USB devices. + +.. moduleauthor:: Scott Petersen """ import ad2usb diff --git a/test.py b/test.py index 42814b2..9b49f92 100755 --- a/test.py +++ b/test.py @@ -143,24 +143,27 @@ def test_usb(): dev = pyad2usb.ad2usb.devices.USBDevice(interface=(0, 0)) - #a2u = pyad2usb.ad2usb.AD2USB(dev) - dev.on_open += handle_open - dev.on_close += handle_close - dev.on_read += handle_read - dev.on_write += handle_write + a2u = pyad2usb.ad2usb.AD2USB(dev) + a2u.on_open += handle_open + a2u.on_close += handle_close + #a2u.on_read += handle_read + #a2u.on_write += handle_write + a2u.on_message += handle_message + a2u.on_zone_fault += handle_fault + a2u.on_zone_restore += handle_restore #a2u.on_power_changed += handle_power_changed #a2u.on_alarm += handle_alarm_bell #a2u.on_bypass += handle_bypass - dev.open() + a2u.open() print dev.id while running: time.sleep(0.1) - dev.close() + a2u.close() def test_serial(): dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB1') @@ -242,9 +245,9 @@ def test_factory_watcher(): def test_socket(): dev = pyad2usb.ad2usb.devices.SocketDevice(interface=("10.10.0.1", 10000)) dev.ssl = True - dev.ssl_certificate = 'tmp/certs/client1.pem' - dev.ssl_key = 'tmp/certs/client1.key' - dev.ssl_ca = 'tmp/certs/ca.pem' + dev.ssl_certificate = '../certs-temp/client.pem' + dev.ssl_key = '../certs-temp/client.key' + dev.ssl_ca = '../certs-temp/ca.pem' a2u = pyad2usb.ad2usb.AD2USB(dev) a2u.on_open += handle_open @@ -252,7 +255,7 @@ def test_socket(): a2u.on_read += handle_read #a2u.on_write += handle_write # - #a2u.on_message += handle_message + a2u.on_message += handle_message #a2u.on_power_changed += handle_power_changed #a2u.on_alarm += handle_alarm_bell #a2u.on_bypass += handle_bypass @@ -374,14 +377,14 @@ try: #test_serial() #upload_serial() - test_usb() + #test_usb() #test_usb_serial() #test_factory() #test_factory_watcher() #upload_usb() #upload_usb_serial() - #test_socket() + test_socket() #upload_socket() #test_no_read_thread()