Пример #1
0
def read(btctxstore, msg):

    # not a valid message
    if base.read(btctxstore, msg) is None:
        return None

    # check token
    if msg[2] != "info":
        return None

    # check info given
    info = msg[3]
    if not isinstance(info, list):
        return None
    if len(info) != 3:
        return None
    version, storage, network = info

    # check version
    if not isinstance(version, str):
        return None
    if not re.match("^\d+\.\d+.\d+$", version):
        return None

    if not _validate_storage(storage):
        return None
    if not _validate_network(network):  # TODO test it
        return None

    msg[3] = Info(version, Storage(*storage), Network(*network))
    return base.Message(*msg)
Пример #2
0
    def test_read_invalid_version_value(self):
        created = base.create(self.btctxstore, self.wif, None, None)

        # repack to eliminate namedtuples and simulate io
        repacked = umsgpack.unpackb(umsgpack.packb(created))

        repacked[1] = -1

        self.assertIsNone(base.read(self.btctxstore, repacked))
Пример #3
0
    def test_read_invalid_signature(self):
        created = base.create(self.btctxstore, self.wif, None, None)

        # repack to eliminate namedtuples and simulate io
        repacked = umsgpack.unpackb(umsgpack.packb(created))

        repacked[4] = "x" * 65

        self.assertIsNone(base.read(self.btctxstore, repacked))
Пример #4
0
    def test_read_invalid_nodeid_len(self):
        created = base.create(self.btctxstore, self.wif, None, None)

        # repack to eliminate namedtuples and simulate io
        repacked = umsgpack.unpackb(umsgpack.packb(created))

        repacked[0] = "invalidnodeidlen"

        self.assertIsNone(base.read(self.btctxstore, repacked))
Пример #5
0
    def test_create_read(self):

        # test create
        created = base.create(self.btctxstore, self.wif, "token", "body")

        # repack to eliminate namedtuples and simulate io
        repacked = umsgpack.unpackb(umsgpack.packb(created))

        # test read
        read = base.read(self.btctxstore, repacked)
        self.assertIsNotNone(read)
        self.assertEqual(created, read)
Пример #6
0
def read(btctxstore, msg, name):
    # FIXME raise exception if > max package size

    # not a valid message
    msg = base.read(btctxstore, msg)
    if msg is None:
        return None

    # check token
    if msg.token != "signal":
        return None

    # check signal name
    if msg.body != name:
        return None

    return msg
Пример #7
0
def read(btctxstore, msg):

    # not a valid message
    if base.read(btctxstore, msg) is None:
        return None

    # check token
    if msg[2] != "info":
        return None

    # check info given
    info = msg[3]
    if not isinstance(info, list):
        return None
    if len(info) != 4:
        return None
    version, storage, network, plat = info

    # check version
    if not isinstance(version, six.string_types):
        return None
    if not re.match("^\d+\.\d+.\d+$", version):
        return None

    if not _validate_storage(storage):
        return None
    if not _validate_network(network):
        return None

    # validate platform
    if not isinstance(plat, list):
        return None
    if len(plat) != 4:
        return None
    if not all([isinstance(prop, six.string_types) for prop in plat]):
        return None

    msg[3] = Info(version, Storage(*storage),
                  Network(*network), Platform(*plat))
    return base.Message(*msg)
Пример #8
0
def read(btctxstore, msg):

    # not a valid message
    msg = base.read(btctxstore, msg)
    if msg is None:
        return None

    # correct token
    if msg.token != "peers":
        return None

    peers = msg.body

    # must be a byte array of concatenated peer ids
    if not isinstance(peers, bytes):
        return None

    # one peer every 20 bytes
    if len(peers) % 20 != 0:
        return None

    return msg
Пример #9
0
 def test_read_invalid_message_len(self):
     self.assertIsNone(base.read(self.btctxstore, []))
Пример #10
0
 def test_read_invalid_message_type(self):
     self.assertIsNone(base.read(self.btctxstore, None))