Example #1
0
 def __init__(self, parent, name, **kw):
     FieldSet.__init__(self, parent, name, **kw)
     code = self["bytecode"].value
     if code not in self.bytecode_info:
         raise ParserError('Unknown bytecode: "%s"' % code)
     self.code_info = self.bytecode_info[code]
     if not name:
         self._name = self.code_info[0]
     if code == "l":
         self.createValue = self.createValueLong
     elif code in ("i", "I", "f", "g"):
         self.createValue = lambda: self["value"].value
     elif code == "T":
         self.createValue = lambda: True
     elif code == "F":
         self.createValue = lambda: False
     elif code in ("x", "y"):
         self.createValue = self.createValueComplex
     elif code in ("s", "t", "u"):
         self.createValue = self.createValueString
         self.createDisplay = self.createDisplayString
         if code == 't':
             if not hasattr(self.root,'string_table'):
                 self.root.string_table=[]
             self.root.string_table.append(self)
     elif code == 'R':
         if hasattr(self.root,'string_table'):
             self.createValue = self.createValueStringRef
Example #2
0
    def __init__(self, parent, ids):
        FieldSet.__init__(self, parent, "?[]")

        # Set name
        id = self['id'].value
        self.val = ids.get(id)
        if not self.val:
            if id == 0xBF:
                self.val = 'CRC-32[]', Binary
            elif id == 0xEC:
                self.val = 'Void[]', Binary
            elif id == 0x1B538667:
                self.val = 'SignatureSlot[]', signature
            else:
                self.val = 'Unknown[]', Binary
        self._name = self.val[0]

        # Compute size
        size = self['size']
        if size.value is not None:
            self._size = size.address + size.size + size.value * 8
        elif self._parent._parent:
            raise ParserError("Unknown length (only allowed for the last Level 0 element)")
        elif self._parent._size is not None:
            self._size = self._parent._size - self.address
Example #3
0
 def __init__(self, parent, name, desc=None):
     FieldSet.__init__(self, parent, name, desc)
     pos = self.stream.searchBytesLength(CrossReferenceTable.MAGIC, False)
     if pos == None:
         raise ParserError("Can't find xref starting at %u" %
                           (self.absolute_address//8))
     self._size = 8*pos-self.absolute_address
Example #4
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     if not self._size:
         frame_size = self.getFrameSize()
         if not frame_size:
             raise ParserError("MPEG audio: Invalid frame %s" % self.path)
         self._size = min(frame_size * 8, self.parent.size - self.address)
Example #5
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     key = self["type"].value & 31
     if self["class"].value == 0:
         # universal object
         if key in self.TYPE_INFO:
             self._name, self._handler, self._description, create_desc = self.TYPE_INFO[key]
             if create_desc:
                 self.createDescription = lambda: "%s: %s" % (self.TYPE_INFO[key][2], create_desc(self))
                 self._description = None
         elif key == 31:
             raise ParserError("ASN.1 Object: tag bigger than 30 are not supported")
         else:
             self._handler = None
     elif self["form"].value:
         # constructed: treat as sequence
         self._name = "seq[]"
         self._handler = readSequence
         self._description = "constructed object type %i" % key
     else:
         # primitive, context/private
         self._name = "raw[]"
         self._handler = readASCIIString
         self._description = "%s object type %i" % (self["class"].display, key)
     field = self["size"]
     self._size = field.address + field.size + field.value * 8
Example #6
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     if not hasattr(self.root,'streamgroups'):
         self.root.streamgroups={}
         for tag in range(0xBC, 0x100):
             self.root.streamgroups[tag]=None
     tag = self["tag"].value
     if tag in self.tag_info:
         self._name, self.parser, self._description = self.tag_info[tag]
     elif 0xBC <= tag <= 0xFF:
         if 0xC0 <= tag < 0xE0:
             # audio
             streamid = tag-0xC0
             self._name, self.parser, self._description = ("audio[%i][]"%streamid, Stream, "Audio Stream %i Packet"%streamid)
         elif 0xE0 <= tag < 0xF0:
             # video
             streamid = tag-0xE0
             self._name, self.parser, self._description = ("video[%i][]"%streamid, Stream, "Video Stream %i Packet"%streamid)
         else:
             self._name, self.parser, self._description = ("stream[]", Stream, "Data Stream Packet")
     else:
         self.parser = defaultParser
     
     if not self.parser:
         self.parser = defaultParser
     elif self.parser != PackHeader and "length" in self:
         self._size = (6 + self["length"].value) * 8
Example #7
0
 def __init__(self, parent, name, width, height, item_class, row_name="row", item_name="item", *args, **kwargs):
     FieldSet.__init__(self, parent, name, *args, **kwargs)
     self.width = width
     self.height = height
     self.item_class = item_class
     self.row_name = row_name
     self.item_name = item_name
Example #8
0
 def __init__(self, parent, name, num_digests, digest_desc=None, desc=None):
     FieldSet.__init__(self, parent, name, desc)
     self.num_digests = num_digests
     if digest_desc is None:
         self.digest_desc = ["stream %d" % i for i in xrange(num_digests)]
     else:
         self.digest_desc = digest_desc
Example #9
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = self["size"].value * 8
     type = self["type"].value
     if type in self.ATTR_INFO:
         self._name = self.ATTR_INFO[type][0]
         self._parser = self.ATTR_INFO[type][2]
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     value = 0
     for field in self:
         value <<= 15
         value += field.value & 0x7FFF
     self.createValue = lambda: value
Example #11
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     tag = self["tag"].value
     if tag in self.TAG_INFO:
         self._name, self._description = self.TAG_INFO[tag]
     else:
         self._parser = None
Example #12
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     code = self["code"].value
     if code in self.ext_code:
         self._name, self.parser, self._description = self.ext_code[code]
     else:
         self.parser = defaultExtensionParser
Example #13
0
 def __init__(self, parent, name, desc=None):
     FieldSet.__init__(self, parent, name, description=desc)
     pos = self.stream.searchBytesLength(Trailer.MAGIC, False)
     if pos == None:
         raise ParserError("Can't find '%s' starting at %u" \
                           (Trailer.MAGIC, self.absolute_address//8))
     self._size = 8*pos-self.absolute_address
Example #14
0
 def __init__(self, parent, name, size, parser, description=None, group=None):
     FieldSet.__init__(self, parent, name, description, size=size)
     if not group:
         group = FragmentGroup(parser)
     self.field_size = size
     self.group = group
     self.group.add(self)
Example #15
0
 def __init__(self, parent, name, toc, description, size=None):
     FieldSet.__init__(self, parent, name, description, size=size)
     self.toc = toc
     if self["format/byte_big_endian"].value:
         self.endian = BIG_ENDIAN
     else:
         self.endian = LITTLE_ENDIAN
Example #16
0
 def __init__(self, parent, name, entry, size=None):
     FieldSet.__init__(self, parent, name, size=entry["size"].value*8)
     self.entry = entry
     res_type = self.getResType()
     if res_type in RESOURCE_TYPE:
         self._name, description, self._parser = RESOURCE_TYPE[res_type]
     else:
         self._parser = None
Example #17
0
 def __init__(self, *args, **kwargs):
     if 'prev_command' in kwargs:
         self.prev_command = kwargs['prev_command']
         del kwargs['prev_command']
     else:
         self.prev_command = None
     self.command = None
     FieldSet.__init__(self, *args, **kwargs)
Example #18
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = (8 + alignValue(self["size"].value, 2)) * 8
     tag = self["type"].value
     if tag in self.TAG_INFO:
         self._name, self._description, self._parser = self.TAG_INFO[tag]
     else:
         self._parser = None
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     try:
         self._name, self.handler, self._description = self.TAG_INFO[self["tag"].value]
     except KeyError:
         self.handler = None
     size = self["size"]
     self._size = size.address + size.size + alignValue(size.value, 2) * 8
Example #20
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._size = (11 + self["size"].value) * 8
     tag = self["tag"].value
     if tag in self.tag_info:
         self._name, self.parser, self._description = self.tag_info[tag]
     else:
         self.parser = None
Example #21
0
 def __init__(self, parent, name, table, **kw):
     FieldSet.__init__(self, parent, name, **kw)
     self.table = table
     tag = table["tag"].value
     if tag in self.TAG_INFO:
         self._name, self._description, self.parser = self.TAG_INFO[tag]
     else:
         self.parser = None
Example #22
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._size = 32 + self["metadata_length"].value * 8
     try:
         key = self["block_type"].value
         self._name, self._description, self.handler = self.BLOCK_TYPES[key]
     except KeyError:
         self.handler = None
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = self["length"].value * 8
     fourcc = self["fourcc"].value
     if fourcc in self.tag_info:
         self._name, self._parser, self._description = self.tag_info[fourcc]
     else:
         self._parser = None
         self._description = "Unknown chunk: fourcc %s" % self["fourcc"].display
Example #24
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     code = self["type"].value
     try:
         self.parser, desc = self.tag_info[code]
         if code == self.CODE_DATE:
             self.createValue = self.createValueDate
     except KeyError:
         raise ParserError("AMF: Unable to parse type %s" % code)
Example #25
0
 def __init__(self, parent, name, size=None, desc=None):
     FieldSet.__init__(self, parent, name, description=desc)
     if size != None:
         self._size = 8*size
     # object catalogs are ended with "obj"
     elif self["object"].value == "obj":
         size = self.stream.searchBytesLength("endobj", False)
         if size != None:
             self._size = 8*(size+2)
Example #26
0
 def __init__(self, parent, name, description=None):
     FieldSet.__init__(self, parent, name, description)
     self._size = (self["size"].value) * 8
     tag = self["tag"].value
     if tag in self.tag_info:
         self._name, self.parse_func = self.tag_info[tag]
     else:
         self._description = ""
         self.parse_func = None
Example #27
0
 def __init__(self, parent, name, elements_class, length,
         **elements_extra_args):
     """Create a FieldArray of <length> fields of class <elements_class>,
     named "<name>[x]".  The **elements_extra_args will be passed to the
     constructor of each field when yielded."""
     FieldSet.__init__(self, parent, name)
     self.array_elements_class = elements_class
     self.array_length = length
     self.array_elements_extra_args = elements_extra_args
Example #28
0
 def __init__(self, parent, name, description=None):
     FieldSet.__init__(self, parent, name, description)
     self._size = self['chunk_size'].value* 8
     type = self['type'].value
     self.parse_func = None
     if type in self.CHUNK_INFO:
         self._name, self._description, self.parse_func, value_func = self.CHUNK_INFO[type]
         if value_func:
             self.createValue = lambda: value_func(self)
Example #29
0
    def __init__(self, *args):
        FieldSet.__init__(self, *args)

        # TODO: Remove this because it's not lazy?
        key = self["key"]
        if not key.hasValue():
            return
        key = key.value
        self._name = str(key).replace(" ", "_")
Example #30
0
    def __init__(self, *args, **kw):
        FieldSet.__init__(self, *args, **kw)

        tag = self["guid"].value
        if tag not in self.TAG_INFO:
            self.handler = None
            return
        info = self.TAG_INFO[tag]
        self._name = info[0]
        self.handler = info[1]
Example #31
0
 def __init__(self, parent, name, inode=None):
     FieldSet.__init__(self, parent, name)
     self.inode = inode
Example #32
0
 def __init__(self, parent, name, use_fourcc=False):
     FieldSet.__init__(self, parent, name)
     self._use_fourcc = use_fourcc
Example #33
0
 def __init__(self, parent, name, res_type=None):
     FieldSet.__init__(self, parent, name)
     self.res_type = res_type
Example #34
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     if self["code"].value != self.NOP:
         self._size = self["length"].value * 8
     else:
         self._size = 8
Example #35
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     count = self["count"]
     self._size = count.size + count.value * (32*8)
Example #36
0
 def _createInputStream(self, **args):
     first = self.first
     if first is self and hasattr(first, "_getData"):
         return FragmentedStream(first, packets=Fragments(first), **args)
     return FieldSet._createInputStream(self, **args)
Example #37
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._size = self["entry_length"].value *8
Example #38
0
 def __init__(self, parent, name, zoomIntervalCfg, **kw):
     FieldSet.__init__(self, parent, name, **kw)
     self.zoomIntervalCfg = zoomIntervalCfg
Example #39
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = self["hdr_size"].value * 32
Example #40
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._size = (self["size"].value + 2) * 8
Example #41
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     if self["length"].value:
         self._size = self["length"].value * 8
     else:
         self._size = 16
Example #42
0
 def __init__(self, parent, name, dc_tree, ac_tree, *args, **kwargs):
     FieldSet.__init__(self, parent, name, *args, **kwargs)
     self.dc_tree = dc_tree
     self.ac_tree = ac_tree
Example #43
0
 def __init__(self, parent, name, dxt2_mode=False, *args, **kwargs):
     """with dxt2_mode on, this field will always use the four color model"""
     FieldSet.__init__(self, parent, name, *args, **kwargs)
     self.dxt2_mode = dxt2_mode
Example #44
0
 def __init__(self, parent, name, uncomp_data="", *args, **kwargs):
     FieldSet.__init__(self, parent, name, *args, **kwargs)
     self.uncomp_data = uncomp_data
Example #45
0
 def __init__(self, parent, name, is_32bit=True):
     FieldSet.__init__(self, parent, name)
     self._size = alignValue(self["size"].value, 4) * 8
     self.is_32bit = is_32bit
Example #46
0
 def __init__(self, parent, name, parser, first_name):
     FieldSet.__init__(self, parent, name)
     self._size = (16 + self["caplen"].value) * 8
     self._first_parser = parser
     self._first_name = first_name
Example #47
0
 def __init__(self, parent, name, size, description=None):
     FieldSet.__init__(self, parent, name, description=description)
     self._size = size * 8
Example #48
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     if self["has_error"].value:
         self._size = 204 * 8
     else:
         self._size = 188 * 8
Example #49
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._field_generator = self._createFields(self._field_generator)
     if self.__class__.createFields == Fragment.createFields:
         self._getData = lambda: self
Example #50
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = self["/width"].value * self["/height"].value * self[
         "/bpp"].value
Example #51
0
 def __init__(self, *args, **kw):
     FieldSet.__init__(self, *args, **kw)
     self._size = 28 * 8
Example #52
0
 def __init__(self, parent, name):
     FieldSet.__init__(self, parent, name)
     self._size = alignValue(self["size"].value, 4) * 8
Example #53
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
Example #54
0
 def __init__(self, parent, name, res_type=None):
     FieldSet.__init__(self, parent, name)
     nb_entries = self["header/nb_name"].value + self[
         "header/nb_index"].value
     self._size = Header.static_size + nb_entries * 64
     self.res_type = res_type
 def __init__(self, parent, name, start, count):
     FieldSet.__init__(self, parent, name)
     self.start = start
     self.count = count
     self._size = self.count * self["/superblock/inode_size"].value * 8
 def __init__(self, parent, name, index):
     FieldSet.__init__(self, parent, name, None)
     self.uniq_id = 1 + index
Example #57
0
 def __init__(self, parent, name, size, parser, description=None, group=None):
     FieldSet.__init__(self, parent, name, description, size=size)
     if not group:
         group = FragmentGroup(parser)
     self.group = group
     self.group.add(self)
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self._size = self["rec_len"].value * 8
Example #59
0
 def __init__(self, *args):
     FieldSet.__init__(self, *args)
     self.version = self.stream.readBits(
         self.absolute_address + 32 + 16 + 12, 4, self.endian)
 def __init__(self, parent, name, count):
     FieldSet.__init__(self, parent, name)
     self.count = count