fix spelling of TREZOR
This commit is contained in:
parent
c665350a35
commit
f3449fcbd7
|
@ -4,7 +4,7 @@ python-trezor
|
||||||
.. image:: https://travis-ci.org/trezor/python-trezor.svg?branch=master
|
.. image:: https://travis-ci.org/trezor/python-trezor.svg?branch=master
|
||||||
:target: https://travis-ci.org/trezor/python-trezor
|
:target: https://travis-ci.org/trezor/python-trezor
|
||||||
|
|
||||||
Client side implementation for Trezor-compatible Bitcoin hardware wallets.
|
Client side implementation for TREZOR-compatible Bitcoin hardware wallets.
|
||||||
|
|
||||||
See http://bitcointrezor.com for more information.
|
See http://bitcointrezor.com for more information.
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ class TestZeroSig(common.TrezorTest):
|
||||||
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
|
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
|
||||||
siglen = ord(serialized_tx[44])
|
siglen = ord(serialized_tx[44])
|
||||||
|
|
||||||
# Trezor must strip leading zero from signature
|
# TREZOR must strip leading zero from signature
|
||||||
self.assertEqual(siglen, 67)
|
self.assertEqual(siglen, 67)
|
||||||
|
|
||||||
def test_two_zero_signature(self):
|
def test_two_zero_signature(self):
|
||||||
|
@ -79,7 +79,7 @@ class TestZeroSig(common.TrezorTest):
|
||||||
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
|
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
|
||||||
siglen = ord(serialized_tx[44])
|
siglen = ord(serialized_tx[44])
|
||||||
|
|
||||||
# Trezor must strip leading zero from signature
|
# TREZOR must strip leading zero from signature
|
||||||
self.assertEqual(siglen, 66)
|
self.assertEqual(siglen, 66)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Use Trezor as a hardware key for opening EncFS filesystem!
|
Use TREZOR as a hardware key for opening EncFS filesystem!
|
||||||
|
|
||||||
Demo usage:
|
Demo usage:
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ from trezorlib.transport_hid import HidTransport
|
||||||
def wait_for_devices():
|
def wait_for_devices():
|
||||||
devices = HidTransport.enumerate()
|
devices = HidTransport.enumerate()
|
||||||
while not len(devices):
|
while not len(devices):
|
||||||
sys.stderr.write("Please connect Trezor to computer and press Enter...")
|
sys.stderr.write("Please connect TREZOR to computer and press Enter...")
|
||||||
raw_input()
|
raw_input()
|
||||||
devices = HidTransport.enumerate()
|
devices = HidTransport.enumerate()
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ def wait_for_devices():
|
||||||
|
|
||||||
def choose_device(devices):
|
def choose_device(devices):
|
||||||
if not len(devices):
|
if not len(devices):
|
||||||
raise Exception("No Trezor connected!")
|
raise Exception("No TREZOR connected!")
|
||||||
|
|
||||||
if len(devices) == 1:
|
if len(devices) == 1:
|
||||||
try:
|
try:
|
||||||
|
@ -78,7 +78,7 @@ def main():
|
||||||
sys.stderr.write('Please provide label for new drive: ')
|
sys.stderr.write('Please provide label for new drive: ')
|
||||||
label = raw_input()
|
label = raw_input()
|
||||||
|
|
||||||
sys.stderr.write('Computer asked Trezor for new strong password.\n')
|
sys.stderr.write('Computer asked TREZOR for new strong password.\n')
|
||||||
sys.stderr.write('Please confirm action on your device.\n')
|
sys.stderr.write('Please confirm action on your device.\n')
|
||||||
|
|
||||||
# 32 bytes, good for AES
|
# 32 bytes, good for AES
|
||||||
|
|
|
@ -10,7 +10,7 @@ import tempfile
|
||||||
from trezorlib.client import TrezorClient, TrezorClientDebug
|
from trezorlib.client import TrezorClient, TrezorClientDebug
|
||||||
|
|
||||||
def parse_args(commands):
|
def parse_args(commands):
|
||||||
parser = argparse.ArgumentParser(description='Commandline tool for Trezor devices.')
|
parser = argparse.ArgumentParser(description='Commandline tool for TREZOR devices.')
|
||||||
parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Prints communication to device')
|
parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Prints communication to device')
|
||||||
parser.add_argument('-t', '--transport', dest='transport', choices=['usb', 'serial', 'pipe', 'socket', 'bridge'], default='usb', help="Transport used for talking with the device")
|
parser.add_argument('-t', '--transport', dest='transport', choices=['usb', 'serial', 'pipe', 'socket', 'bridge'], default='usb', help="Transport used for talking with the device")
|
||||||
parser.add_argument('-p', '--path', dest='path', default='', help="Path used by the transport (usually serial port)")
|
parser.add_argument('-p', '--path', dest='path', default='', help="Path used by the transport (usually serial port)")
|
||||||
|
@ -46,7 +46,7 @@ def get_transport(transport_string, path, **kwargs):
|
||||||
try:
|
try:
|
||||||
path = list_usb()[0][0]
|
path = list_usb()[0][0]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
raise Exception("No Trezor found on USB")
|
raise Exception("No TREZOR found on USB")
|
||||||
|
|
||||||
for d in HidTransport.enumerate():
|
for d in HidTransport.enumerate():
|
||||||
# Two-tuple of (normal_interface, debug_interface)
|
# Two-tuple of (normal_interface, debug_interface)
|
||||||
|
@ -237,14 +237,14 @@ class Commands(object):
|
||||||
|
|
||||||
fp.seek(0)
|
fp.seek(0)
|
||||||
if fp.read(4) != 'TRZR':
|
if fp.read(4) != 'TRZR':
|
||||||
raise Exception("Trezor firmware header expected")
|
raise Exception("TREZOR firmware header expected")
|
||||||
|
|
||||||
print "Please confirm action on device..."
|
print "Please confirm action on device..."
|
||||||
|
|
||||||
fp.seek(0)
|
fp.seek(0)
|
||||||
return self.client.firmware_update(fp=fp)
|
return self.client.firmware_update(fp=fp)
|
||||||
|
|
||||||
list.help = 'List connected Trezor USB devices'
|
list.help = 'List connected TREZOR USB devices'
|
||||||
ping.help = 'Send ping message'
|
ping.help = 'Send ping message'
|
||||||
get_address.help = 'Get bitcoin address in base58 encoding'
|
get_address.help = 'Get bitcoin address in base58 encoding'
|
||||||
get_entropy.help = 'Get example entropy'
|
get_entropy.help = 'Get example entropy'
|
||||||
|
|
|
@ -105,6 +105,9 @@ class BaseClient(object):
|
||||||
self.transport = transport
|
self.transport = transport
|
||||||
super(BaseClient, self).__init__() # *args, **kwargs)
|
super(BaseClient, self).__init__() # *args, **kwargs)
|
||||||
|
|
||||||
|
def cancel(self):
|
||||||
|
self.transport.write(proto.Cancel())
|
||||||
|
|
||||||
def call_raw(self, msg):
|
def call_raw(self, msg):
|
||||||
try:
|
try:
|
||||||
self.transport.session_begin()
|
self.transport.session_begin()
|
||||||
|
|
|
@ -21,7 +21,7 @@ class PinMatrixWidget(QWidget):
|
||||||
'''
|
'''
|
||||||
Displays widget with nine blank buttons and password box.
|
Displays widget with nine blank buttons and password box.
|
||||||
Encodes button clicks into sequence of numbers for passing
|
Encodes button clicks into sequence of numbers for passing
|
||||||
into PinAck messages of Trezor.
|
into PinAck messages of TREZOR.
|
||||||
|
|
||||||
show_strength=True may be useful for entering new PIN
|
show_strength=True may be useful for entering new PIN
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -12,31 +12,31 @@ class Transport(object):
|
||||||
self.device = device
|
self.device = device
|
||||||
self.session_depth = 0
|
self.session_depth = 0
|
||||||
self._open()
|
self._open()
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
||||||
def _session_begin(self):
|
def _session_begin(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _session_end(self):
|
def _session_end(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
"""
|
"""
|
||||||
Returns True if there is data to be read from the transport. Otherwise, False.
|
Returns True if there is data to be read from the transport. Otherwise, False.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
||||||
def session_begin(self):
|
def session_begin(self):
|
||||||
"""
|
"""
|
||||||
Apply a lock to the device in order to preform synchronous multistep "conversations" with the device. For example, before entering the transaction signing workflow, one begins a session. After the transaction is complete, the session may be ended.
|
Apply a lock to the device in order to preform synchronous multistep "conversations" with the device. For example, before entering the transaction signing workflow, one begins a session. After the transaction is complete, the session may be ended.
|
||||||
|
@ -44,7 +44,7 @@ class Transport(object):
|
||||||
if self.session_depth == 0:
|
if self.session_depth == 0:
|
||||||
self._session_begin()
|
self._session_begin()
|
||||||
self.session_depth += 1
|
self.session_depth += 1
|
||||||
|
|
||||||
def session_end(self):
|
def session_end(self):
|
||||||
"""
|
"""
|
||||||
End a session. Se session_begin for an in depth description of TREZOR sessions.
|
End a session. Se session_begin for an in depth description of TREZOR sessions.
|
||||||
|
@ -53,13 +53,13 @@ class Transport(object):
|
||||||
self.session_depth = max(0, self.session_depth)
|
self.session_depth = max(0, self.session_depth)
|
||||||
if self.session_depth == 0:
|
if self.session_depth == 0:
|
||||||
self._session_end()
|
self._session_end()
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""
|
"""
|
||||||
Close the connection to the physical device or file descriptor represented by the Transport.
|
Close the connection to the physical device or file descriptor represented by the Transport.
|
||||||
"""
|
"""
|
||||||
self._close()
|
self._close()
|
||||||
|
|
||||||
def write(self, msg):
|
def write(self, msg):
|
||||||
"""
|
"""
|
||||||
Write mesage to tansport. msg should be a member of a valid `protobuf class <https://developers.google.com/protocol-buffers/docs/pythontutorial>`_ with a SerializeToString() method.
|
Write mesage to tansport. msg should be a member of a valid `protobuf class <https://developers.google.com/protocol-buffers/docs/pythontutorial>`_ with a SerializeToString() method.
|
||||||
|
@ -79,9 +79,9 @@ class Transport(object):
|
||||||
data = self._read()
|
data = self._read()
|
||||||
if data == None:
|
if data == None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self._parse_message(data)
|
return self._parse_message(data)
|
||||||
|
|
||||||
def read_blocking(self):
|
def read_blocking(self):
|
||||||
"""
|
"""
|
||||||
Same as read, except blocks untill data is available to be read.
|
Same as read, except blocks untill data is available to be read.
|
||||||
|
@ -90,7 +90,7 @@ class Transport(object):
|
||||||
data = self._read()
|
data = self._read()
|
||||||
if data != None:
|
if data != None:
|
||||||
break
|
break
|
||||||
|
|
||||||
return self._parse_message(data)
|
return self._parse_message(data)
|
||||||
|
|
||||||
def _parse_message(self, data):
|
def _parse_message(self, data):
|
||||||
|
@ -101,7 +101,7 @@ class Transport(object):
|
||||||
inst = mapping.get_class(msg_type)()
|
inst = mapping.get_class(msg_type)()
|
||||||
inst.ParseFromString(data)
|
inst.ParseFromString(data)
|
||||||
return inst
|
return inst
|
||||||
|
|
||||||
def _read_headers(self, read_f):
|
def _read_headers(self, read_f):
|
||||||
# Try to read headers until some sane value are detected
|
# Try to read headers until some sane value are detected
|
||||||
is_ok = False
|
is_ok = False
|
||||||
|
@ -129,5 +129,5 @@ class Transport(object):
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
raise Exception("Cannot parse header length")
|
raise Exception("Cannot parse header length")
|
||||||
|
|
||||||
return (msg_type, datalen)
|
return (msg_type, datalen)
|
||||||
|
|
|
@ -50,7 +50,7 @@ class BridgeTransport(Transport):
|
||||||
|
|
||||||
enum = r.json()
|
enum = r.json()
|
||||||
|
|
||||||
return enum;
|
return enum
|
||||||
|
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
|
|
|
@ -7,18 +7,18 @@ from transport import Transport, NotImplementedException
|
||||||
class FakeTransport(Transport):
|
class FakeTransport(Transport):
|
||||||
def __init__(self, device, *args, **kwargs):
|
def __init__(self, device, *args, **kwargs):
|
||||||
super(FakeTransport, self).__init__(device, *args, **kwargs)
|
super(FakeTransport, self).__init__(device, *args, **kwargs)
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
raise NotImplementedException("Not implemented")
|
raise NotImplementedException("Not implemented")
|
||||||
|
|
|
@ -6,8 +6,8 @@ import platform
|
||||||
from transport import Transport, ConnectionError, NotImplementedException
|
from transport import Transport, ConnectionError, NotImplementedException
|
||||||
|
|
||||||
DEVICE_IDS = [
|
DEVICE_IDS = [
|
||||||
# (0x10c4, 0xea80), # Shield
|
# (0x10c4, 0xea80), # TREZOR Shield
|
||||||
(0x534c, 0x0001), # Trezor
|
(0x534c, 0x0001), # TREZOR
|
||||||
(0x2b24, 0x0001), # KeepKey
|
(0x2b24, 0x0001), # KeepKey
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class FakeRead(object):
|
||||||
# Let's pretend we have a file-like interface
|
# Let's pretend we have a file-like interface
|
||||||
def __init__(self, func):
|
def __init__(self, func):
|
||||||
self.func = func
|
self.func = func
|
||||||
|
|
||||||
def read(self, size):
|
def read(self, size):
|
||||||
return self.func(size)
|
return self.func(size)
|
||||||
|
|
||||||
|
@ -65,35 +65,35 @@ class HidTransport(Transport):
|
||||||
if d['path'] == self.device:
|
if d['path'] == self.device:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
self.buffer = ''
|
self.buffer = ''
|
||||||
self.hid = hid.device()
|
self.hid = hid.device()
|
||||||
self.hid.open_path(self.device)
|
self.hid.open_path(self.device)
|
||||||
self.hid.set_nonblocking(True)
|
self.hid.set_nonblocking(True)
|
||||||
# the following was needed just for Trezor Shield
|
# the following was needed just for TREZOR Shield
|
||||||
# self.hid.send_feature_report([0x41, 0x01]) # enable UART
|
# self.hid.send_feature_report([0x41, 0x01]) # enable UART
|
||||||
# self.hid.send_feature_report([0x43, 0x03]) # purge TX/RX FIFOs
|
# self.hid.send_feature_report([0x43, 0x03]) # purge TX/RX FIFOs
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
self.hid.close()
|
self.hid.close()
|
||||||
self.buffer = ''
|
self.buffer = ''
|
||||||
self.hid = None
|
self.hid = None
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
msg = bytearray(msg)
|
msg = bytearray(msg)
|
||||||
while len(msg):
|
while len(msg):
|
||||||
# Report ID, data padded to 63 bytes
|
# Report ID, data padded to 63 bytes
|
||||||
self.hid.write([63, ] + list(msg[:63]) + [0] * (63 - len(msg[:63])))
|
self.hid.write([63, ] + list(msg[:63]) + [0] * (63 - len(msg[:63])))
|
||||||
msg = msg[63:]
|
msg = msg[63:]
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
(msg_type, datalen) = self._read_headers(FakeRead(self._raw_read))
|
(msg_type, datalen) = self._read_headers(FakeRead(self._raw_read))
|
||||||
return (msg_type, self._raw_read(datalen))
|
return (msg_type, self._raw_read(datalen))
|
||||||
|
|
||||||
def _raw_read(self, length):
|
def _raw_read(self, length):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
while len(self.buffer) < length:
|
while len(self.buffer) < length:
|
||||||
|
@ -112,11 +112,11 @@ class HidTransport(Transport):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
report_id = data[0]
|
report_id = data[0]
|
||||||
|
|
||||||
if report_id > 63:
|
if report_id > 63:
|
||||||
# Command report
|
# Command report
|
||||||
raise Exception("Not implemented")
|
raise Exception("Not implemented")
|
||||||
|
|
||||||
# Payload received, skip the report ID
|
# Payload received, skip the report ID
|
||||||
self.buffer += str(bytearray(data[1:]))
|
self.buffer += str(bytearray(data[1:]))
|
||||||
|
|
||||||
|
|
|
@ -8,14 +8,14 @@ from transport import Transport
|
||||||
class PipeTransport(Transport):
|
class PipeTransport(Transport):
|
||||||
def __init__(self, device, is_device, *args, **kwargs):
|
def __init__(self, device, is_device, *args, **kwargs):
|
||||||
self.is_device = is_device # Set True if act as device
|
self.is_device = is_device # Set True if act as device
|
||||||
|
|
||||||
super(PipeTransport, self).__init__(device, *args, **kwargs)
|
super(PipeTransport, self).__init__(device, *args, **kwargs)
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
if self.is_device:
|
if self.is_device:
|
||||||
self.filename_read = self.device+'.to'
|
self.filename_read = self.device+'.to'
|
||||||
self.filename_write = self.device+'.from'
|
self.filename_write = self.device+'.from'
|
||||||
|
|
||||||
os.mkfifo(self.filename_read, 0600)
|
os.mkfifo(self.filename_read, 0600)
|
||||||
os.mkfifo(self.filename_write, 0600)
|
os.mkfifo(self.filename_write, 0600)
|
||||||
else:
|
else:
|
||||||
|
@ -24,13 +24,13 @@ class PipeTransport(Transport):
|
||||||
|
|
||||||
if not os.path.exists(self.filename_write):
|
if not os.path.exists(self.filename_write):
|
||||||
raise Exception("Not connected")
|
raise Exception("Not connected")
|
||||||
|
|
||||||
self.write_fd = os.open(self.filename_write, os.O_RDWR)#|os.O_NONBLOCK)
|
self.write_fd = os.open(self.filename_write, os.O_RDWR)#|os.O_NONBLOCK)
|
||||||
self.write_f = os.fdopen(self.write_fd, 'w+')
|
self.write_f = os.fdopen(self.write_fd, 'w+')
|
||||||
|
|
||||||
self.read_fd = os.open(self.filename_read, os.O_RDWR)#|os.O_NONBLOCK)
|
self.read_fd = os.open(self.filename_read, os.O_RDWR)#|os.O_NONBLOCK)
|
||||||
self.read_f = os.fdopen(self.read_fd, 'rb')
|
self.read_f = os.fdopen(self.read_fd, 'rb')
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
self.read_f.close()
|
self.read_f.close()
|
||||||
self.write_f.close()
|
self.write_f.close()
|
||||||
|
@ -41,7 +41,7 @@ class PipeTransport(Transport):
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
rlist, _, _ = select([self.read_f], [], [], 0)
|
rlist, _, _ = select([self.read_f], [], [], 0)
|
||||||
return len(rlist) > 0
|
return len(rlist) > 0
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
try:
|
try:
|
||||||
self.write_f.write(msg)
|
self.write_f.write(msg)
|
||||||
|
@ -49,7 +49,7 @@ class PipeTransport(Transport):
|
||||||
except OSError:
|
except OSError:
|
||||||
print "Error while writing to socket"
|
print "Error while writing to socket"
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
try:
|
try:
|
||||||
(msg_type, datalen) = self._read_headers(self.read_f)
|
(msg_type, datalen) = self._read_headers(self.read_f)
|
||||||
|
|
|
@ -10,18 +10,18 @@ class SerialTransport(Transport):
|
||||||
def __init__(self, device, *args, **kwargs):
|
def __init__(self, device, *args, **kwargs):
|
||||||
self.serial = None
|
self.serial = None
|
||||||
super(SerialTransport, self).__init__(device, *args, **kwargs)
|
super(SerialTransport, self).__init__(device, *args, **kwargs)
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
self.serial = serial.Serial(self.device, 115200, timeout=10, writeTimeout=10)
|
self.serial = serial.Serial(self.device, 115200, timeout=10, writeTimeout=10)
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
self.serial.close()
|
self.serial.close()
|
||||||
self.serial = None
|
self.serial = None
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
rlist, _, _ = select([self.serial], [], [], 0)
|
rlist, _, _ = select([self.serial], [], [], 0)
|
||||||
return len(rlist) > 0
|
return len(rlist) > 0
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
try:
|
try:
|
||||||
self.serial.write(msg)
|
self.serial.write(msg)
|
||||||
|
@ -29,7 +29,7 @@ class SerialTransport(Transport):
|
||||||
except serial.SerialException:
|
except serial.SerialException:
|
||||||
print "Error while writing to socket"
|
print "Error while writing to socket"
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
try:
|
try:
|
||||||
(msg_type, datalen) = self._read_headers(self.serial)
|
(msg_type, datalen) = self._read_headers(self.serial)
|
||||||
|
|
|
@ -12,26 +12,26 @@ class SocketTransportClient(Transport):
|
||||||
else:
|
else:
|
||||||
device = (device[0], int(device[1]))
|
device = (device[0], int(device[1]))
|
||||||
|
|
||||||
self.socket = None
|
self.socket = None
|
||||||
super(SocketTransportClient, self).__init__(device, *args, **kwargs)
|
super(SocketTransportClient, self).__init__(device, *args, **kwargs)
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.socket.connect(self.device)
|
self.socket.connect(self.device)
|
||||||
self.filelike = self.socket.makefile()
|
self.filelike = self.socket.makefile()
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
self.socket.close()
|
self.socket.close()
|
||||||
self.socket = None
|
self.socket = None
|
||||||
self.filelike = None
|
self.filelike = None
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
rlist, _, _ = select([self.socket], [], [], 0)
|
rlist, _, _ = select([self.socket], [], [], 0)
|
||||||
return len(rlist) > 0
|
return len(rlist) > 0
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
self.socket.sendall(msg)
|
self.socket.sendall(msg)
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
try:
|
try:
|
||||||
(msg_type, datalen) = self._read_headers(self.filelike)
|
(msg_type, datalen) = self._read_headers(self.filelike)
|
||||||
|
@ -53,27 +53,27 @@ class SocketTransport(Transport):
|
||||||
self.filelike = None
|
self.filelike = None
|
||||||
|
|
||||||
super(SocketTransport, self).__init__(device, *args, **kwargs)
|
super(SocketTransport, self).__init__(device, *args, **kwargs)
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
#self.socket.setblocking(0)
|
#self.socket.setblocking(0)
|
||||||
|
|
||||||
self.socket.bind(self.device)
|
self.socket.bind(self.device)
|
||||||
self.socket.listen(5)
|
self.socket.listen(5)
|
||||||
|
|
||||||
def _disconnect_client(self):
|
def _disconnect_client(self):
|
||||||
print "Disconnecting client"
|
print "Disconnecting client"
|
||||||
if self.client != None:
|
if self.client != None:
|
||||||
self.client.close()
|
self.client.close()
|
||||||
self.client = None
|
self.client = None
|
||||||
self.filelike = None
|
self.filelike = None
|
||||||
|
|
||||||
def _close(self):
|
def _close(self):
|
||||||
self._disconnect_client()
|
self._disconnect_client()
|
||||||
self.socket.close()
|
self.socket.close()
|
||||||
self.socket = None
|
self.socket = None
|
||||||
|
|
||||||
def ready_to_read(self):
|
def ready_to_read(self):
|
||||||
if self.filelike:
|
if self.filelike:
|
||||||
# Connected
|
# Connected
|
||||||
|
@ -88,18 +88,18 @@ class SocketTransport(Transport):
|
||||||
self.filelike = self.client.makefile()
|
self.filelike = self.client.makefile()
|
||||||
return self.ready_to_read()
|
return self.ready_to_read()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _write(self, msg, protobuf_msg):
|
def _write(self, msg, protobuf_msg):
|
||||||
if self.filelike:
|
if self.filelike:
|
||||||
# None on disconnected client
|
# None on disconnected client
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.filelike.write(msg)
|
self.filelike.write(msg)
|
||||||
self.filelike.flush()
|
self.filelike.flush()
|
||||||
except socket.error:
|
except socket.error:
|
||||||
print "Socket error"
|
print "Socket error"
|
||||||
self._disconnect_client()
|
self._disconnect_client()
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
try:
|
try:
|
||||||
(msg_type, datalen) = self._read_headers(self.filelike)
|
(msg_type, datalen) = self._read_headers(self.filelike)
|
||||||
|
|
Loading…
Reference in New Issue