Esempio n. 1
0
 def test_hidden_entries(self):
     sequence = seq.Sequence("bob", [
         fld.Field("cat:", 8, fld.Field.INTEGER),
         fld.Field("dog", 24, fld.Field.TEXT)])
     data = inst.decode(sequence, dt.Data.from_hex('6e7a6970'))
     self.assertTrue('cat' not in "".join(dir(data)))
     self.assertEqual("zip", data.dog)
Esempio n. 2
0
 def test_sequence(self):
     sequence = seq.Sequence("bob", [
         fld.Field("cat", 8, fld.Field.INTEGER),
         fld.Field("dog", 24, fld.Field.TEXT)])
     data = inst.decode(sequence, dt.Data.from_hex('6e7a6970'))
     self.assertEqual(110, data.cat)
     self.assertEqual("zip", data.dog)
Esempio n. 3
0
    def decode(self, input_file):
        # Encode aivdm data back into binary
        fragments = []
        payload = self._aivdm[1][0]
        data = Data(input_file)
        while data:
            try:
                calculated_crc = self._get_crc(data)
                packet = decode(self._aivdm[0], data)
                if packet.checksum != calculated_crc:
                    sys.stderr.write('Crc mismatch; expected %02X, but '
                            'calculated %02X. Skipping packet.\n' %
                            (packet.checksum, calculated_crc))
                    continue

                bits = encode(payload, list(ord(c.character) for c in packet.payload))
                bits = bits.pop(len(bits) - packet.num_fill_bits)
                if len(fragments) == packet.fragment_number - 1:
                    fragments.append(bits)
                    if len(fragments) == packet.fragment_count:
                        self._decode_ais(reduce(operator.add, fragments))
                        fragments = []
                else:
                    sys.stderr.write('Expected fragment number %i, got %i (of %i)\n' % (
                        len(fragments) + 1, packet.fragment_number, packet.fragment_count))
                    fragments = []
            except DecodeError, ex:
                filename, line_number, column_number = self._aivdm[2][ex.entry]
                sys.stderr.write('%s[%i] - %s\n' %  (filename, line_number, ex))
                fragments = []

                # Read to the next newline
                while data and data.pop(8).text('ascii') != '\n':
                    pass
Esempio n. 4
0
 def test_sequenceof(self):
     sequenceof = sof.SequenceOf("bob", 
         fld.Field("cat", 8, fld.Field.INTEGER),
         4)
     data = inst.decode(sequenceof, dt.Data.from_hex('6e7a6970'))
     self.assertTrue(isinstance(data, list))
     self.assertEqual(4, len(data))
     self.assertEqual(0x6e, int(data[0]))
     self.assertEqual(0x7a, int(data[1]))
     self.assertEqual(0x69, int(data[2]))
     self.assertEqual(0x70, int(data[3]))
Esempio n. 5
0
    def _encode(self, protocol, value):
        """
        Wrapper around inst.encode.

        Also validates that we can decode the encoded data, and get the
        same data back again.
        """
        data = inst.encode(protocol, value)

        # Now validate that we can decode that data...
        re_decoded = inst.decode(protocol, data.copy())
        self.assertEqual(data, inst.encode(protocol, re_decoded))
        return data.bytes()
Esempio n. 6
0
    def test_delayed_referenced_common_elements_are_independant(self):
        # Here we test that so called 'delayed referenced' objects are
        # independant (ie: that an embedded referenced object doesn't
        # affect an outer object).
        text = """
            <protocol>
                <common>
                    <field name="integer" length="8" min="48" max="57" type="text" />

                    <sequence name="array">
                        <field name="opener" length="8" value="0x5b" />
                        <sequenceof name="values">
                            <choice name="entry">
                                <field name="closer" length="8" value="0x5d"><end-sequenceof /></field>
                                <reference name="object" />
                            </choice>
                        </sequenceof>
                    </sequence>

                    <choice name="object">
                        <reference name="integer" />
                        <reference name="array" />
                    </choice>
                </common>
                <reference name="object" />
            </protocol>
            """
        protocol = loads(text)[0]
        data = dt.Data("[12[34[56]7]8]unused")
        result = inst.decode(protocol, data)
        self.assertEqual("1", result.array.values[0].object.integer)
        self.assertEqual("2", result.array.values[1].object.integer)
        self.assertEqual("3", result.array.values[2].object.array.values[0].object.integer)
        self.assertEqual("4", result.array.values[2].object.array.values[1].object.integer)
        self.assertEqual("5", result.array.values[2].object.array.values[2].object.array.values[0].object.integer)
        self.assertEqual("6", result.array.values[2].object.array.values[2].object.array.values[1].object.integer)
        self.assertEqual("7", result.array.values[2].object.array.values[3].object.integer)
        self.assertEqual("8", result.array.values[3].object.integer)
        self.assertEqual("unused", data.bytes())
Esempio n. 7
0
 def test_field(self):
     field = fld.Field("bob", 8, fld.Field.INTEGER)
     data = inst.decode(field, dt.Data.from_hex('6e'))
     self.assertEqual(110, data)
Esempio n. 8
0
 def test_sequence_with_hidden_field_to_string(self):
     a = seq.Sequence('a', [fld.Field('length:', 8), fld.Field('b', format=fld.Field.TEXT, length=parse('${length:} * 8'))])
     data = inst.decode(a, dt.Data('\x03cat'))
     self.assertEqual(u"{'b': u'cat'}", unicode(data))
Esempio n. 9
0
 def test_sequence_to_string(self):
     a = seq.Sequence('a', [fld.Field('b', 8, format=fld.Field.INTEGER)])
     data = inst.decode(a, dt.Data('\x09'))
     self.assertEqual("{'b': 9}", str(data))
Esempio n. 10
0
 def test_exception_when_seequence_is_not_an_int(self):
     a = seq.Sequence('a', [])
     data = inst.decode(a, dt.Data())
     self.assertRaises(TypeError, int, data)
Esempio n. 11
0
 def test_sequence_with_children_and_value(self):
     a = seq.Sequence('a', [fld.Field('b', length=8, format=fld.Field.INTEGER)], value=parse('7'))
     data = inst.decode(a, dt.Data('\x33'))
     self.assertEqual(0x33, data.b)
     self.assertEqual(7, int(data))
Esempio n. 12
0
 def test_sequence_value(self):
     a = seq.Sequence('a', [seq.Sequence('hidden:', [])], value=parse('5'))
     data = inst.decode(a, dt.Data())
     self.assertEqual(5, data)
Esempio n. 13
0
 def test_reference_name(self):
     a = fld.Field('a', 8)
     b = seq.Sequence('b', [Child('c', a)])
     data = inst.decode(b, dt.Data('\x33'))
     self.assertEqual(0x33, int(data.c))
Esempio n. 14
0
from bdec.data import Data
from bdec import DecodeError
from bdec.spec.xmlspec import load
from bdec.spec import load_specs
from bdec.output.instance import decode

from bdec.spec.references import References
references = References()

def get_pb_line(fpath):
    with open(fpath) as f:
        for line in f:
            yield line

count = 0 
with open('playback.xml', 'r') as xml_f:
    spec = load_specs(["playback.xml"])[0]
    for line in get_pb_line(sys.argv[1]):
        try:
            values = decode(spec, Data(line))
        except DecodeError, err:
            print 'Oh oh...', err
            raise
        count += 0
        print(values)
        #import pdb
        #pdb.set_trace()
        #print(2)

print("done", count)
Esempio n. 15
0
 def test_children_of_hidden_entries_are_not_visible(self):
     sequence = seq.Sequence("bob:", [fld.Field("cat", 8, fld.Field.INTEGER), fld.Field("dog", 8, fld.Field.INTEGER)])
     data = inst.decode(sequence, dt.Data("\x38\x7a"))
     assert data is None
Esempio n. 16
0
from bdec.data import Data
from bdec import DecodeError
from bdec.spec.xmlspec import load
from bdec.spec import load_specs
from bdec.output.instance import decode

from bdec.spec.references import References
references = References()
import sys
with open(sys.argv[1], 'r') as pb:
    data = pb.read()
    spec = load_specs(["playback_faster.xml"])[0]
    try:
        values = decode(spec, Data(data))
    except DecodeError, err:
        print 'Oh oh...', err
        raise
    for value in values:
        print(value)
        break

print("done")
Esempio n. 17
0
 def test_sequenceof_to_string(self):
     a = sof.SequenceOf('a', fld.Field('b', 8, format=fld.Field.INTEGER), count=parse('3'))
     data = inst.decode(a, dt.Data('\x09\x01\x0a'))
     self.assertEqual("[9, 1, 10]", str(data))