buildframework/helium/sf/python/pythoncore/lib/iadinfo.py
author wbernard
Tue, 27 Apr 2010 08:33:08 +0300
changeset 587 85df38eb4012
child 588 c7c26511138f
permissions -rw-r--r--
helium_9.0-a7879c935424
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
#============================================================================ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
#Name        : iadinfo.py 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
#Part of     : Helium 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
#All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
#This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
#under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
#which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
#Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
#Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
#Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
#Description:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
#===============================================================================
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import sys, os
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import struct
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import zlib
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
PyASN1Availabe = True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
try :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
    from pyasn1.codec.der import decoder
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
    from pyasn1.type import base
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
except :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
    PyASN1Availabe = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
def _findItem(item, itemParent, index, objectIdentifier) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
    if isinstance(item, base.AbstractSimpleAsn1Item) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
        if item == objectIdentifier :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
            return itemParent[index + 1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
    else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
        for i in range(len(item)) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
            found = _findItem(item[i], item, i, objectIdentifier)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
            if found: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
                return found
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
def findItem(decodedCert, objectIdentifier) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
    return _findItem(decodedCert, None, 0, objectIdentifier)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
class CertificateOrganization :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
    """ This class holds organisation details of certificate issuer or signer """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
        pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    def parse(self, decodedCert) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
        self.commonName = findItem(decodedCert, (2, 5, 4, 3))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
        self.countryCode = findItem(decodedCert, (2, 5, 4, 6))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
        self.locality = findItem(decodedCert, (2, 5, 4, 7))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
        self.state = findItem(decodedCert, (2, 5, 4, 8))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
        self.street = findItem(decodedCert, (2, 5, 4, 9))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
        self.organization = findItem(decodedCert, (2, 5, 4, 10))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        buf = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
        if self.commonName :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
            buf += self.commonName.prettyPrint() + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
        if self.countryCode :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
            buf += self.countryCode.prettyPrint() + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
        if self.locality :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
            buf += self.locality.prettyPrint() + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
        if self.state :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
            buf += self.state.prettyPrint() + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
        if self.street :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
            buf += self.street.prettyPrint() + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
        if self.organization :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
            buf += self.organization.prettyPrint()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        return buf
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
class CertificateInfo :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    """ This class holds certificate information such as certificate signer and issuer """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
        pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    def parse(self, decodedCert) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
        self.issuer = CertificateOrganization()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
        self.issuer.parse(decodedCert[0][3])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
        self.signer = CertificateOrganization()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        self.signer.parse(decodedCert[0][5])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
        buf = "Signer:\n      " + "\n      ".join(self.signer.readableStr().split('\n')) + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
        buf += "Issuer:\n      " + "\n      ".join(self.issuer.readableStr().split('\n')) + "\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
        return buf
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
class SISFileHeader :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
    """ Class SIS File header """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
        self.uid1 = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        self.uid2 = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
        self.uid3 = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
        self.uidChecksum = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
class SISField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
    """ Class SIS Field """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        self.type = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
        self.length = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        self.subFields = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
    def readFieldLength(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
        length = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        if length & 0x80000000 > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            length = length << 32
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            length |= fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        return length
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
    def findField(self, fieldType, startIndex=0) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
        result = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
        index = startIndex
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
        for field in self.subFields[startIndex:] :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
            if field.type == fieldType :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
                result = field
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
                break
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
            ++ index
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
        return (result, index)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
        return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
    def traverse(self, handler, depth=0) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
        handler.handleField(self, depth)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
        for field in self.subFields :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
            field.traverse(handler, depth + 1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
class SISUnsupportedField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
    """ Class SIS UnsupportedField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
        fileReader.readPlainBytes(self.length)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
class SISStringField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
    """ Class SIS StringField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
        self.data = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        buf = fileReader.readPlainBytes(self.length)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        self.data = u""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
        while len(buf) > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
            temp = buf[:2]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            buf = buf[2:]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
            self.data += unichr(ord(temp[0]) | ord(temp[1]) << 8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        return self.data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
class SISArrayField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
    """ Class SIS ArrayField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
        type = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
        l = self.length - 4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
        while l > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
            field = SISFieldTypes[type]()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
            field.type = type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
            field.initFromFile(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
            self.subFields.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
            l -= field.length + 4 # field length + the length field
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
            padding = fileReader.skipPadding()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
            l -= padding
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
class SISCompressedField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
    """ Class SIS CompressedField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
        self.algorithm = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
        self.uncompressedDataSize = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
        self.data = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
        self.algorithm = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
        self.uncompressedDataSize = fileReader.readBytesAsUint(8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
        data = fileReader.readPlainBytes(self.length - 4 - 8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
        if self.algorithm == 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
            self.data = data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
        elif self.algorithm == 1 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
            self.data = zlib.decompress(data)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
class SISVersionField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
    """ Class SIS VersionField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
        self.version = (- 1, - 1, - 1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
        major = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
        minor = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
        build = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
        self.version = (major, minor, build)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
        return str(self.version)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
class SISVersionRangeField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
    """ Class SIS VersionRangeField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
        self.fromVersion = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
        self.toVersion = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
        self.fromVersion = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
        if self.length - fieldParser.lastReadBytes > 0  :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
            self.toVersion = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
class SISDateField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
    """ Class SIS DateField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
        self.year = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
        self.month = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
        self.day = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
        self.year = fileReader.readBytesAsUint(2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
        self.month = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
        self.day = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
        return str(self.year) + "." + str(self.month) + "." + str(self.day)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
class SISTimeField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
    """ Class SIS TimeField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
        self.hours = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
        self.minutes = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
        self.seconds = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
        self.hours = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
        self.minutes = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
        self.seconds = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
        return str(self.hours) + ":" + str(self.minutes) + ":" + str(self.seconds)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
class SISDateTimeField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
    """ Class SIS DateTimeField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
        self.date = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
        self.time = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
        self.date = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
        self.time = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
class SISUidField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
    """ Class SIS UidField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
        self.uid = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
        self.uid = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
        return hex(self.uid)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
class SISLanguageField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
    """ Class SIS LanguageField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
        self.language = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
        self.language = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
        return str(self.language)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
class SISContentsField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
    """ Class SIS ContentsField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
        field = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
        while field :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
            if field.type == 3 : # compressed<conroller>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
                bufferReader = SISBufferReader(field.data)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
                field = fieldParser.parseField(bufferReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
            self.subFields.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
            field = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
class SISControllerField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
    """ Class SIS ControllerField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
        bufferReader = SISBufferReader(fileReader.readPlainBytes(self.length))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
        field = fieldParser.parseField(bufferReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
        while field :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
            self.subFields.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
            field = fieldParser.parseField(bufferReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
class SISInfoField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   332
    """ Class SIS InfoField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
        self.installType = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
        self.installFlags = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
        self.subFields.append(fieldParser.parseField(fileReader)) # UID
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
        self.subFields.append(fieldParser.parseField(fileReader)) # Vendor name unique
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
        self.subFields.append(fieldParser.parseField(fileReader)) # names
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
        self.subFields.append(fieldParser.parseField(fileReader)) # vendor names
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
        self.subFields.append(fieldParser.parseField(fileReader)) # version
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
        self.subFields.append(fieldParser.parseField(fileReader)) # creation time
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
        self.installType = fileReader.readBytesAsUint(1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
        self.installFlags = fileReader.readBytesAsUint(1) 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
class SISSupportedLanguagesField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
    """ Class SISSupportedLanguagesField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
        self.subFields.append(fieldParser.parseField(fileReader)) # languages
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
class SISSupportedOptionsField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
    """ Class SISSupportedOptionsField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   367
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
        self.subFields.append(fieldParser.parseField(fileReader)) # options
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
class SISPrerequisitiesField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
    """ Class SISPrerequisitiesField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378
        self.subFields.append(fieldParser.parseField(fileReader)) # target devices
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
        self.subFields.append(fieldParser.parseField(fileReader)) # dependencies
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
class SISDependencyField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
    """ Class SISDependencyField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   387
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   388
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   389
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   390
        self.subFields.append(fieldParser.parseField(fileReader)) # UID
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   391
        field = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   392
        # Version range field is optional
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   393
        if field.type == VersionRangeField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   394
            self.subFields.append(field) # version range
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   395
            self.subFields.append(fieldParser.parseField(fileReader)) # dependency names
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   396
        else :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   397
            self.subFields.append(field) # dependency names
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   398
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   399
class SISPropertiesField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   400
    """ Class SISPropertiesField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   401
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   402
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   403
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   404
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   405
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   406
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   407
        self.subFields.append(fieldParser.parseField(fileReader)) # properties
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   408
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   409
class SISPropertyField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   410
    """ Class SISPropertyField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   411
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   412
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   413
        self.key = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   414
        self.value = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   415
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   416
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   417
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   418
        self.key = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   419
        self.value = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   420
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   421
# There is a type for this field, but there is no definition of the field contents
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   422
class SISSignaturesField(SISUnsupportedField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   423
    """ Class SISSignaturesField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   424
    pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   425
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   426
class SISCertificateChainField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   427
    """ Class SISCertificateChainField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   428
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   429
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   430
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   431
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   432
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   433
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   434
        self.subFields.append(fieldParser.parseField(fileReader)) # certificate data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   435
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   436
class SISLogoField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   437
    """ Class SISLogoField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   438
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   439
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   440
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   441
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   442
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   443
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   444
        self.subFields.append(fieldParser.parseField(fileReader)) # logo file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   445
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   446
class SISFileDescriptionField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   447
    """ Class SISFileDescriptionField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   448
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   449
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   450
        self.operation = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   451
        self.operationOptions = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   452
        self.compressedLength = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   453
        self.uncompressedLength = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   454
        self.fileIndex = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   455
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   456
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   457
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   458
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   459
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   460
        self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   461
        self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   462
        field = fieldParser.parseField(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   463
        self.subFields.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   464
        if field.type == 41 : # read field was capabilities ==> there is one more field left
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   465
            self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   466
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   467
        self.operation = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   468
        self.operationOptions = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   469
        self.compressedLength = fileReader.readBytesAsUint(8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   470
        self.uncompressedLength = fileReader.readBytesAsUint(8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   471
        self.fileIndex = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   472
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   473
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   474
        return "index: " + str(self.fileIndex)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   475
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   476
class SISHashField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   477
    """ Class SISHashField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   478
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   479
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   480
        self.algorithm = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   481
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   482
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   483
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   484
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   485
        self.algorithm = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   486
        self.subFields.append(fieldParser.parseField(fileReader)) # logo file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   487
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   488
class SISIfField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   489
    """ Class SISIfField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   490
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   491
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   492
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   493
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   494
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   495
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   496
        self.subFields.append(fieldParser.parseField(fileReader)) # expression
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   497
        self.subFields.append(fieldParser.parseField(fileReader)) # install block
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   498
        self.subFields.append(fieldParser.parseField(fileReader)) # else ifs
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   499
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   500
class SISElseIfField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   501
    """ Class SISElseIfField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   502
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   503
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   504
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   505
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   506
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   507
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   508
        self.subFields.append(fieldParser.parseField(fileReader)) # expression
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   509
        self.subFields.append(fieldParser.parseField(fileReader)) # install block
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   510
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   511
class SISInstallBlockField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   512
    """ Class SISInstallBlockField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   513
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   514
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   515
        self.files = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   516
        self.embeddedSISFiles = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   517
        self.ifBlocks = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   518
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   519
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   520
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   521
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   522
        self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   523
        self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   524
        self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   525
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   526
class SISExpressionField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   527
    """ Class SISExpressionField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   528
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   529
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   530
        self.operator = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   531
        self.integerValue = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   532
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   533
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   534
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   535
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   536
        self.operator = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   537
        self.integerValue = fileReader.readBytesAsInt(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   538
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   539
        if self.operator == 10 or self.operator == 13 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   540
            self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   541
        if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   542
            self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   543
        if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   544
            self.subFields.append(fieldParser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   545
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   546
class SISDataField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   547
    """ Class SISDataField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   548
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   549
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   550
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   551
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   552
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   553
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   554
        self.subFields.append(fieldParser.parseField(fileReader)) # data units
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   555
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   556
class SISDataUnitField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   557
    """ Class SISDataUnitField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   558
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   559
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   560
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   561
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   562
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   563
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   564
        self.subFields.append(fieldParser.parseField(fileReader)) # file data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   565
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   566
class SISFileDataField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   567
    """ Class SISFileDataField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   568
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   569
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   570
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   571
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   572
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   573
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   574
        self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   575
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   576
class SISSupportedOptionField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   577
    """ Class SISSupportedOptionField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   578
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   579
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   580
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   581
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   582
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   583
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   584
        self.subFields.append(fieldParser.parseField(fileReader)) # names
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   585
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   586
class SISControllerChecksumField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   587
    """ Class SISControllerChecksumField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   588
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   589
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   590
        self.checksum = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   591
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   592
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   593
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   594
        self.checksum = fileReader.readBytesAsUint(2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   595
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   596
class SISDataChecksumField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   597
    """ Class SISDataChecksumField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   598
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   599
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   600
        self.checksum = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   601
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   602
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   603
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   604
        self.checksum = fileReader.readBytesAsUint(2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   605
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   606
class SISSignatureField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   607
    """ Class SISSignatureField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   608
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   609
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   610
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   611
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   612
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   613
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   614
        self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   615
        self.subFields.append(fieldParser.parseField(fileReader)) # signature data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   616
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   617
class SISBlobField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   618
    """ Class SISBlobField """ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   619
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   620
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   621
        self.data = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   622
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   623
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   624
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   625
        self.data = fileReader.readPlainBytes(self.length)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   626
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   627
class SISSignatureAlgorithmField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   628
    """ Class SISSignatureAlgorithmField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   629
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   630
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   631
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   632
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   633
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   634
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   635
        self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   636
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   637
class SISSignatureCertificateChainField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   638
    """ Class SISSignatureCertificateChainField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   639
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   640
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   641
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   642
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   643
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   644
        fieldParser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   645
        self.subFields.append(fieldParser.parseField(fileReader)) # signatures
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   646
        self.subFields.append(fieldParser.parseField(fileReader)) # certificate chain
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   647
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   648
class SISDataIndexField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   649
    """ Class SISDataIndexField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   650
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   651
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   652
        self.dataIndex = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   653
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   654
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   655
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   656
        self.dataIndex = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   657
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   658
class SISCapabilitiesField(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   659
    """ Class SISCapabilitiesField """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   660
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   661
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   662
        self.capabilities = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   663
        self.readableCaps = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   664
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   665
    def initFromFile(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   666
        self.length = self.readFieldLength(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   667
        self.capabilities = fileReader.readBytesAsUint(self.length)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   668
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   669
        for i in range(20) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   670
            if (self.capabilities >> i) & 0x01 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   671
                self.readableCaps.append(CapabilityNames[i])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   672
                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   673
    def readableStr(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   674
        return " ".join(self.readableCaps)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   675
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   676
SISFieldTypes = { 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   677
    1 : SISStringField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   678
    2 : SISArrayField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   679
    3 : SISCompressedField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   680
    4 : SISVersionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   681
    5 : SISVersionRangeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   682
    6 : SISDateField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   683
    7 : SISTimeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   684
    8 : SISDateTimeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   685
    9 : SISUidField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   686
    10 : SISUnsupportedField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   687
    11 : SISLanguageField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   688
    12 : SISContentsField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   689
    13 : SISControllerField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   690
    14 : SISInfoField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   691
    15 : SISSupportedLanguagesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   692
    16 : SISSupportedOptionsField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   693
    17 : SISPrerequisitiesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   694
    18 : SISDependencyField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   695
    19 : SISPropertiesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   696
    20 : SISPropertyField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   697
    21 : SISSignaturesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   698
    22 : SISCertificateChainField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   699
    23 : SISLogoField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   700
    24 : SISFileDescriptionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   701
    25 : SISHashField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   702
    26 : SISIfField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   703
    27 : SISElseIfField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   704
    28 : SISInstallBlockField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   705
    29 : SISExpressionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   706
    30 : SISDataField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   707
    31 : SISDataUnitField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   708
    32 : SISFileDataField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   709
    33 : SISSupportedOptionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   710
    34 : SISControllerChecksumField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   711
    35 : SISDataChecksumField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   712
    36 : SISSignatureField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   713
    37 : SISBlobField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   714
    38 : SISSignatureAlgorithmField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   715
    39 : SISSignatureCertificateChainField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   716
    40 : SISDataIndexField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   717
    41 : SISCapabilitiesField
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   718
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   719
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   720
[StringField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   721
 ArrayField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   722
 CompressedField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   723
 VersionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   724
 VersionRangeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   725
 DateField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   726
 TimeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   727
 DateTimeField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   728
 UidField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   729
 UnusedField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   730
 LanguageField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   731
 ContentsField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   732
 ControllerField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   733
 InfoField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   734
 SupportedLanguagesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   735
 SupportedOptionsField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   736
 PrerequisitiesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   737
 DependencyField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   738
 PropertiesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   739
 PropertyField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   740
 SignaturesField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   741
 CertificateChainField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   742
 LogoField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   743
 FileDescriptionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   744
 HashField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   745
 IfField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   746
 ElseIfField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   747
 InstallBlockField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   748
 ExpressionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   749
 DataField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   750
 DataUnitField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   751
 FileDataField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   752
 SupportedOptionField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   753
 ControllerChecksumField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   754
 DataChecksumField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   755
 SignatureField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   756
 BlobField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   757
 SignatureAlgorithmField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   758
 SignatureCertificateChainField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   759
 DataIndexField,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   760
 CapabilitiesField] = range(1, 42)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   761
     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   762
FieldNames = {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   763
 0 : "ROOT",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   764
 StringField : "StringField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   765
 ArrayField : "ArrayField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   766
 CompressedField : "CompressedField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   767
 VersionField : "VersionField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   768
 VersionRangeField : "VersionRangeField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   769
 DateField : "DateField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   770
 TimeField : "TimeField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   771
 DateTimeField : "DateTimeField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   772
 UidField : "UidField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   773
 UnusedField : "UnusedField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   774
 LanguageField : "LanguageField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   775
 ContentsField : "ContentsField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   776
 ControllerField : "ControllerField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   777
 InfoField : "InfoField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   778
 SupportedLanguagesField : "SupportedLanguagesField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   779
 SupportedOptionsField : "SupportedOptionsField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   780
 PrerequisitiesField : "PrerequisitiesField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   781
 DependencyField : "DependencyField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   782
 PropertiesField : "PropertiesField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   783
 PropertyField : "PropertyField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   784
 SignaturesField : "SignaturesField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   785
 CertificateChainField : "CertificateChainField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   786
 LogoField : "LogoField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   787
 FileDescriptionField : "FileDescriptionField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   788
 HashField : "HashField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   789
 IfField : "IfField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   790
 ElseIfField : "ElseIfField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   791
 InstallBlockField : "InstallBlockField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   792
 ExpressionField : "ExpressionField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   793
 DataField : "DataField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   794
 DataUnitField : "DataUnitField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   795
 FileDataField : "FileDataField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   796
 SupportedOptionField : "SupportedOptionField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   797
 ControllerChecksumField : "ControllerChecksumField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   798
 DataChecksumField : "DataChecksumField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   799
 SignatureField : "SignatureField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   800
 BlobField : "BlobField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   801
 SignatureAlgorithmField : "SignatureAlgorithmField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   802
 SignatureCertificateChainField : "SignatureCertificateChainField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   803
 DataIndexField : "DataIndexField",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   804
 CapabilitiesField : "CapabilitiesField"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   805
}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   806
     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   807
CapabilityNames = {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   808
    0 : "TCB",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   809
    1 : "CommDD",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   810
    2 : "PowerMgmt",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   811
    3 : "MultimediaDD",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   812
    4 : "ReadDeviceData",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   813
    5 : "WriteDeviceData",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   814
    6 : "DRM",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   815
    7 : "TrustedUI",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   816
    8 : "ProtServ",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   817
    9 : "DiskAdmin",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   818
    10 : "NetworkControl",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   819
    11 : "AllFiles",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   820
    12 : "SwEvent",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   821
    13 : "NetworkServices",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   822
    14 : "LocalServices",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   823
    15 : "ReadUserData",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   824
    16 : "WriteUserData",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   825
    17 : "Location",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   826
    18 : "SurroundingsDD",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   827
    19 : "UserEnvironment"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   828
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   829
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   830
InstallTypes = {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   831
    0: "SA",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   832
    1: "SP",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   833
    2: "PU",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   834
    3: "PA",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   835
    4: "PP"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   836
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   837
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   838
class SISReader :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   839
    """ SIS Reader """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   840
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   841
        self.bytesRead = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   842
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   843
    def readUnsignedBytes(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   844
        buf = self.readPlainBytes(numBytes)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   845
        if len(buf) < numBytes :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   846
            return []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   847
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   848
        format = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   849
        for i in range(numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   850
            format += "B"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   851
        return struct.unpack(format, buf)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   852
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   853
    def readSignedBytes(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   854
        buf = self.readPlainBytes(numBytes)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   855
        if len(buf) < numBytes :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   856
            return []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   857
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   858
        format = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   859
        for i in range(numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   860
            format += "b"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   861
        return struct.unpack(format, buf)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   862
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   863
    def readBytesAsUint(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   864
        result = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   865
        bytes = self.readUnsignedBytes(numBytes)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   866
        if len(bytes) == numBytes :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   867
            for i in range(numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   868
                result |= bytes[i] << (i * 8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   869
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   870
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   871
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   872
    def readBytesAsInt(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   873
        result = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   874
        bytes = self.readSignedBytes(numBytes)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   875
        if len(bytes) == numBytes :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   876
            for i in range(numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   877
                result |= bytes[i] << (i * 8)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   878
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   879
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   880
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   881
    def skipPadding(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   882
        result = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   883
        if self.bytesRead % 4 != 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   884
            paddingLength = 4 - self.bytesRead % 4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   885
            self.readPlainBytes(paddingLength)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   886
            result = paddingLength
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   887
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   888
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   889
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   890
    def readPlainBytes(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   891
        pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   892
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   893
class SISFileReader(SISReader) : 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   894
    """ SIS File Reader """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   895
    def __init__(self, inStream) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   896
        SISReader.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   897
        self.inStream = inStream
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   898
        self.eof = False
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   899
        self.bytesRead = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   900
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   901
    def readPlainBytes(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   902
        if self.eof :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   903
            return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   904
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   905
        if numBytes == 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   906
            return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   907
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   908
        buf = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   909
        buf = self.inStream.read(numBytes)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   910
        if len(buf) < numBytes :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   911
            self.eof = True
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   912
            return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   913
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   914
        self.bytesRead += numBytes
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   915
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   916
        return buf
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   917
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   918
    def isEof(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   919
        return self.eof
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   920
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   921
class SISBufferReader(SISReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   922
    """ SIS Buffer reader """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   923
    def __init__(self, buffer) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   924
        self.buffer = buffer
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   925
        self.bytesRead = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   926
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   927
    def readPlainBytes(self, numBytes) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   928
        if self.isEof() :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   929
            return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   930
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   931
        if numBytes == 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   932
            return ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   933
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   934
        result = self.buffer[self.bytesRead:self.bytesRead + numBytes]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   935
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   936
        self.bytesRead += numBytes
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   937
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   938
        return result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   939
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   940
    def isEof(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   941
        return self.bytesRead >= len(self.buffer)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   942
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   943
class SISFieldParser :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   944
    """ Parser to read a SIS field """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   945
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   946
        self.lastReadBytes = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   947
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   948
    def parseField(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   949
        """Reads the next field from the fileReader stream and returns it"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   950
        field = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   951
        self.lastReadBytes = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   952
        type = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   953
        self.lastReadBytes += 4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   954
        if type != 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   955
            field = SISFieldTypes[type]()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   956
            field.type = type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   957
            field.initFromFile(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   958
            self.lastReadBytes += field.length + 4 # Field length + length field
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   959
            self.lastReadBytes += fileReader.skipPadding()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   960
        return field
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   961
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   962
class SISInfo(SISField) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   963
    """ SIS file information """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   964
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   965
        SISField.__init__(self)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   966
        self.fin = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   967
        self.fileHeader = SISFileHeader()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   968
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   969
    def parse(self, filename) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   970
        fin = open(filename, 'rb')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   971
        fileReader = SISFileReader(fin)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   972
        self.parseHeader(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   973
        self.parseSISFields(fileReader)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   974
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   975
    def parseHeader(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   976
        self.fileHeader.uid1 = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   977
        self.fileHeader.uid2 = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   978
        self.fileHeader.uid3 = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   979
        self.fileHeader.uidChecksum = fileReader.readBytesAsUint(4)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   980
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   981
    def parseSISFields(self, fileReader) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   982
        parser = SISFieldParser()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   983
        while not fileReader.isEof() :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   984
            self.subFields.append(parser.parseField(fileReader))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   985
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   986
class Handler :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   987
    """ A handler class """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   988
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   989
        self.files = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   990
        self.fileDatas = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   991
        self.signatureCertificateChains = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   992
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   993
    def handleField(self, field, depth) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   994
        if field.type == FileDescriptionField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   995
            self.files.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   996
        elif field.type == FileDataField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   997
            self.fileDatas.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   998
        elif field.type == SignatureCertificateChainField  :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   999
            self.signatureCertificateChains.append(field)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1000
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1001
    def execute(self, options) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1002
        for f in self.files :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1003
            if options.info :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1004
                buf = "   " + f.findField(StringField)[0].readableStr()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1005
                caps = f.findField(CapabilitiesField)[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1006
                if caps :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1007
                    buf += " [" + " ".join(f.findField(CapabilitiesField)[0].readableCaps) + "]"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1008
                print buf
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1009
            if options.extract :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1010
                parts = f.findField(StringField)[0].readableStr().split("\\")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1011
                if len(parts[len(parts) - 1]) > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1012
                    path = os.path.abspath(options.extract)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1013
                    path += os.sep + os.sep.join(parts[1: - 1])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1014
                    if not os.path.exists(path) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1015
                        os.makedirs(path)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1016
                    newFile = file(path + os.sep + parts[len(parts) - 1], "wb")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1017
                    newFile.write(self.fileDatas[f.fileIndex].findField(CompressedField)[0].data)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1018
                    newFile.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1019
        for s in self.signatureCertificateChains :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1020
            if options.certificate:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1021
                buf = s.findField(CertificateChainField)[0].subFields[0].data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1022
                print "Certificate chain:"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1023
                i = 1
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1024
                while len(buf) > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1025
                    print "   Certificate " + str(i) + ":"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1026
                    i += 1
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1027
                    decoded = decoder.decode(buf)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1028
                    cer = CertificateInfo()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1029
                    cer.parse(decoded[0])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1030
                    readableStr = cer.readableStr()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1031
                    print "      " + "\n      ".join(readableStr.split('\n'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1032
                    buf = decoded[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1033
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1034
class ContentPrinter :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1035
    """ A handler class which prints the field contents """        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1036
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1037
        pass
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1038
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1039
    def handleField(self, field, depth) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1040
        buf = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1041
        for i in range(depth) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1042
            buf += "  "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1043
        buf += FieldNames[field.type] + " "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1044
        if len(field.readableStr()) > 0 :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1045
            buf += field.readableStr()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1046
        print buf
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1047
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1048
class IADHandler :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1049
    """ IAD handler class """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1050
    def __init__(self) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1051
        self.packageVersion = (0, 0, 0)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1052
        self.packageUid = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1053
        self.vendorName = ""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1054
        self.packageNames = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1055
        self.packageNamesFields = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1056
        self.languages = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1057
        self.platformDependencies = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1058
        self.packageDependencies = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1059
        self.installType = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1060
        self.installFlags = 0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1061
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1062
    def handleDependency(self, field) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1063
        dep = [0, - 1, - 1, - 1, - 1, - 1, - 1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1064
        dep[0] = field.subFields[0].uid
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1065
        if field.subFields[1] and field.subFields[1].type == VersionRangeField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1066
            r = field.subFields[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1067
            if r.fromVersion != None :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1068
                dep[1] = r.fromVersion.version[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1069
                dep[2] = r.fromVersion.version[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1070
                dep[3] = r.fromVersion.version[2]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1071
            if r.toVersion != None :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1072
                dep[4] = r.toVersion.version[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1073
                dep[5] = r.toVersion.version[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1074
                dep[6] = r.toVersion.version[2]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1075
        return dep
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1076
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1077
    def handleField(self, field, depth) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1078
        if field.type == InfoField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1079
            self.packageVersion = field.subFields[4].version
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1080
            self.packageVersionField = field.subFields[4]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1081
            self.packageUid = field.subFields[0].uid
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1082
            self.packageUidField = field.subFields[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1083
            self.vendorName = field.subFields[1].data
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1084
            self.vendorNameField = field.subFields[1]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1085
            self.installType = field.installType
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1086
            self.installFlags = field.installFlags
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1087
            for name in field.subFields[2].subFields :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1088
                self.packageNames.append(name.data)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1089
        elif field.type == LanguageField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1090
            self.languages.append(field.language)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1091
        elif field.type == PrerequisitiesField :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1092
            for f in field.subFields[0].subFields :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1093
                dependency = self.handleDependency(f)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1094
                self.platformDependencies.append(dependency)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1095
            for f in field.subFields[1].subFields :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1096
                dependency = self.handleDependency(f)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1097
                self.packageDependencies.append(dependency)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1098
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1099
    def getInfo (self, fileName) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1100
        sisInfo = SISInfo()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1101
        sisInfo.parse(fileName)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1102
        handler = IADHandler()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1103
        sisInfo.traverse(handler)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1104
        info = "<sisinfo>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1105
             + "  <uid>" + hex(handler.packageUid) + "</uid>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1106
             + "  <vendor>" + handler.vendorName + "</vendor>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1107
             + "  <version>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1108
             + "<major>" + repr(handler.packageVersion[0]) + "</major>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1109
             + "<minor>" + repr(handler.packageVersion[1]) + "</minor>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1110
             + "<build>" + repr(handler.packageVersion[2]) + "</build>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1111
             + "</version>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1112
             + "  <type>" + InstallTypes[self.installType] + "</type>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1113
        for num, name in enumerate(handler.packageNames) :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1114
            info += "  <name language='" + repr(handler.languages[num]) + "'>" + name + "</name>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1115
        for language in handler.languages :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1116
            info += "  <language>" + repr(language) + "</language>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1117
        for platDep in handler.platformDependencies :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1118
            info += "  <platform_dependency><uid>" + hex(platDep[0]) + "</uid>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1119
            info += "    <from>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1120
                 + "<major>" + repr(platDep[1]) + "</major>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1121
                 + "<minor>" + repr(platDep[2]) + "</minor>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1122
#           info += "<build>" + repr(platDep[3]) + "</build>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1123
            info += "</from>\n    <to>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1124
                 + "<major>" + repr(platDep[4]) + "</major>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1125
                 + "<minor>" + repr(platDep[5]) + "</minor>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1126
#           info += "<build>" + repr(platDep[6]) + "</build>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1127
            info += "</to>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1128
             + "  </platform_dependency>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1129
        for packageDep in handler.packageDependencies :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1130
            info += "  <package_dependency><uid>" + hex(packageDep[0]) + "</uid>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1131
            info += "    <from>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1132
                 + "<major>" + repr(packageDep[1]) + "</major>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1133
                 + "<minor>" + repr(packageDep[2]) + "</minor>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1134
#           info += "<build>" + repr(packageDep[3]) + "</build>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1135
            info += "</from>\n    <to>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1136
                 + "<major>" + repr(packageDep[4]) + "</major>" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1137
                 + "<minor>" + repr(packageDep[5]) + "</minor>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1138
#           info += "<build>" + repr(packageDep[6]) + "</build>"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1139
            info += "</to>\n" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1140
                 + "  </package_dependency>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1141
        info += "</sisinfo>\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1142
        return info
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1143
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1144
if __name__ == "__main__" :
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1145
    handler = IADHandler()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
  1146
    print (handler.getInfo (sys.argv[1]))