def run(self):
server_sock = self._init_server()
server_sock.setblocking(0)
while self.is_active:
(rlist, _, _) = select.select(
[server_sock], [], [], SELECT_LOOP_INTERVAL)
if len(rlist) == 0:
continue
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info
try:
# header: a single '0' and then the length of the request string
just_zero = read_varint32(client_sock)
request_length = read_varint32(client_sock)
if just_zero != 0:
raise IOError
if request_length > 2 ** 24:
raise IOError
# request string
unpacker = struct.Struct('! %ss' % request_length)
body = client_sock.recv(unpacker.size, socket.MSG_WAITALL)
request = unpacker.unpack(body)
# send ok
write_varint32(client_sock, 200)
# monkey patch the payment request
# to include our Bluetooth address
fixed_width_bluetooth_address = self.get_bluetooth_address()
payment_request = PaymentRequest()
payment_request.ParseFromString(self.serialized_payment_request)
payment_details = PaymentDetails()
payment_details.ParseFromString(
payment_request.serialized_payment_details)
payment_details.payment_url = 'bt:%s' % \
fixed_width_bluetooth_address.replace(':', '')
payment_request.serialized_payment_details = \
payment_details.SerializeToString()
payment_request.ClearField('pki_type')
payment_request.ClearField('pki_data')
payment_request.ClearField('signature')
data = payment_request.SerializeToString()
# send payment request
write_varint32(client_sock, len(data))
client_sock.send(data)
except IOError:
pass
print "Bluetooth client disconnected"
client_sock.close()
server_sock.close()
评论列表
文章目录