In [ ]:
import socket
from pack import *
class Connection:
"""
Handles communication between the two bluetooth fakes.
"""
def __init__(self,stream):
self.stream = stream
def __send(self, binary_data):
self.stream.write(binary_data)
self.stream.flush()
def __recv(self, minlength):
return self.stream.read(minlength)
def send_neg(self, ID):
self.__send(pack_neg(ID))
def recv_neg(self):
return unpack_neg(self.__recv(8))
def send_init(self, clock, rand, link_key):
self.__send(pack_init(clock,rand,link_key))
def recv_init(self):
return unpack_init(self.__recv(40))
def send_data(self, clock, data):
self.__send(pack_data(clock,data))
def recv_data(self):
data = self.__recv(12)
l = unpack_data_length(data)
extra_data = self.__recv(l)
return unpack_data(data+extra_data)
def listen(port):
"""
Listen on port for incoming tcp connection.
Accept first connection attempt and return socket handle.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', port))
s.listen(0)
conn, addr = s.accept()
print('accepted connection from %s', addr)
return conn
def connect(addr, port):
"""
Creates tcp connection to addr (ip/hostname) on port.
Returns handle to connected socket.
Throws error on failure.
"""
conn = socket.create_connection((addr, port))
return conn