bluetoothservice.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:bitpay-brick 作者: javgh 项目源码 文件源码
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()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号