def findSimpleElementLocation(self, avpCode, msgSize):
        codeFound = False
        size = self.nwBuffer.tell() #bytes

        o_ParsedData = ParsedData()

        while (size < msgSize) and not codeFound:
            #print "DEBUG: {0} : {1} : {2}".format(size, msgSize, self.nwBuffer.tell())
            # read the AVP Code
            fmt = struct.Struct('>I')
            try:
                (avp,) = fmt.unpack(self.nwBuffer.read(4))
            except Exception, e:
                print "ERROR: Major formatting Issue {0}. Exception : {1}".format(avpCode, str(e))
                return o_ParsedData

            if avp == avpCode:
                codeFound = True

            ## Flags And Length
            [avpLen, avpFlags] = utils.getFlagAndLength(self.nwBuffer.read(4))
            avpLenPadded = avpLen + utils.calculatePadding(avpLen)

            size += 8
            if codeFound:
                o_ParsedData.isParsed = True
                o_ParsedData.avpSize  = avpLen
                o_ParsedData.padding  = utils.calculatePadding(avpLen)

                if (utils.existVendorID(avpFlags)):
                    # read vendor-id
                    (vendorID,) = fmt.unpack(self.nwBuffer.read(4))
                    o_ParsedData.vendorID = vendorID
                    size += 4
                    ## Set the network buffer to the data.
                    ## It's already set to data due to above read.
                    ## So, we can return safely from here

                codeFound = False
                return o_ParsedData
            else:
                unwanted = self.nwBuffer.read(avpLenPadded - 8)  ## (8 bytes is already read)
                size += (avpLenPadded - 8)
コード例 #2
0
    def setFlags(self, avpFlags):
        if utils.existVendorID(avpFlags):
            self.avp['Vendor-ID'] = 1
        else:
            self.avp['Vendor-ID'] = 0
            self.clrVendorBit()

        if utils.existMandatory(avpFlags):
            self.avp['Mandatory'] = 1
            self.setMandatoryBit()
        else:
            self.avp['Mandatory'] = 0
            self.clrMandatoryBit()

        if utils.existPersistent(avpFlags):
            self.avp['Protected'] = 1
            self.setEncryptionBit()
        else:
            self.avp['Protected'] = 0
            self.clrEncryptionBit()