Exemple #1
0
    def parseGSM0340_request(self, data):
        try:
            Msg = "parseGSM0340_request Init "
            PCA_GenLib.WriteLog(Msg, 2)
            Msg = "GSM 0340 data =\n%s" % PCA_GenLib.HexDump(data)
            PCA_GenLib.WriteLog(Msg, 2)

            mt_fsm_gsm_0340_pdu = data
            tag = mt_fsm_gsm_0340_pdu[0]

            source = mt_fsm_gsm_0340_pdu[1:]

            name = "OA length"
            attrs = source[0]
            content = ord(attrs)
            tag_length = content
            tag_length = tag_length / 2
            self.set_handler(name, attrs, tag_length)

            source = source[1:]
            name = "GSM0340 originating address"
            attrs = source[0:tag_length + 1]
            toa = PCA_GenLib.getHexString(attrs[1])
            tag_value = "%s:%s" % (toa, PCA_GenLib.getHexBCDString(attrs[1:]))
            self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, tag_value)
            self.set_handler(name, attrs, tag_value)

            source = source[tag_length + 1:]
            pid = source[0]
            dcs = source[1]
            time_stamp = source[2:2 + 6]

            source = source[9:]
            name = "GSM0340 user data length"
            attrs = source[0]
            content = ord(attrs)
            user_data_length = content
            self.set_handler(name, attrs, content)

            source = source[1:]
            tag_name = "GSM0340 sms text"
            attrs = source[0:user_data_length]
            Msg = "PCA DEBUG SMS Text = %s " % attrs
            PCA_GenLib.WriteLog(Msg, 1)
            #tag_value = PCA_GenLib.getHexString(attrs)
            tag_value = smspdu.pdu.unpack7bit(attrs)
            self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                              tag_value)
            self.set_handler("sms text", attrs, content)

            Msg = "parseGSM0340_request ok "
            PCA_GenLib.WriteLog(Msg, 9)

        except:
            Msg = "parseGSM0340_request error : <%s>,<%s>" % (sys.exc_type,
                                                              sys.exc_value)
            PCA_GenLib.WriteLog(Msg, 0)
            Msg = "parseGSM0340_request error source =\n%s" % PCA_GenLib.HexDump(
                source)
            PCA_GenLib.WriteLog(Msg, 3)
    def parseGSM0340_request(self, data):
        try:
            Msg = "parseGSM0340_request Init "
            PCA_GenLib.WriteLog(Msg, 9)
            Msg = "GSM 0340 data =\n%s" % PCA_GenLib.HexDump(data)
            PCA_GenLib.WriteLog(Msg, 3)

            gsm_0340_pdu = data
            tag = gsm_0340_pdu[0]
            TP_MR = gsm_0340_pdu[1]

            source = gsm_0340_pdu[2:]

            name = "GSM0340 recipient length"
            attrs = source[0]
            content = ord(attrs)
            tag_length = content
            tag_length = tag_length / 2

            self.set_handler(name, attrs, tag_length)

            source = source[1:]
            name = "GSM0340 recipient address"
            attrs = source[0:tag_length + 1]
            toa = PCA_GenLib.getHexString(attrs[1])
            #tag_value = "%s:%s" % (toa,PCA_GenLib.getHexBCDString(attrs[1:]))
            tag_value = "%s" % (PCA_GenLib.getHexBCDString(attrs[1:]))
            self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, tag_value)
            self.set_handler(name, attrs, tag_value)

            source = source[tag_length + 1:]
            pid = source[0]
            dcs = source[1]
            validity_period = source[2]

            name = "GSM0340 user data length"
            attrs = source[3]
            content = ord(attrs)
            user_data_length = content
            #self.set_handler(name,attrs,content)

            source = source[4:]
            tag_name = "GSM0340 sms text"
            attrs = source[0:user_data_length]
            Msg = "PCA DEBUG MO Text = %s " % attrs
            PCA_GenLib.WriteLog(Msg, 2)
            tag_value = smspdu.pdu.unpack7bit(attrs)
            self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                              tag_value)
            self.set_handler("sms text", attrs, tag_value)

            Msg = "parseGSM0340_request ok "
            PCA_GenLib.WriteLog(Msg, 9)

        except:
            Msg = "parseGSM0340_request error : <%s>,<%s>" % (sys.exc_type,
                                                              sys.exc_value)
            PCA_GenLib.WriteLog(Msg, 3)
Exemple #3
0
    def parse(self, source, Is_TCAP_begin, app_context):
        try:
            Msg = "parser init"
            PCA_GenLib.WriteLog(Msg, 9)
            orig_data = source
            name = 'none'
            self.StartParsing = 0
            TID = "na"
            content = "na"

            Msg = "MAP SRI-SM data =<\n%s\n>" % PCA_GenLib.HexDump(source)
            PCA_GenLib.WriteLog(Msg, 3)

            if (source != None):
                self._cont_handler.startDocument()
                self.StartParsing = 1

                self.DebugStr = ""
                name = "MAP Tag"
                attrs = source[0]
                Tag_Type = 'Primitive'
                if (ord(attrs) & 0x40):
                    name = "%s-Constructor" % name
                    attrs = source[0:2]
                    content = PCA_GenLib.getHexString(attrs)
                else:
                    name = "%s-Primitive" % name
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)

                if Tag_Type == 'Primitive':
                    source = source[1:]
                else:
                    source = source[2:]

                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, content)
                name = "length"
                attrs = source[0]
                content = ord(attrs)
                tag_length = content
                self.set_handler(name, attrs, content)
                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, content)

                source = source[1:]
                name = "value"
                attrs = source[0:tag_length]
                content = PCA_GenLib.getHexString(attrs)
                self.set_handler(name, attrs, content)
                #self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)

                #self.parseTLV(attrs)
                source = attrs
                name = "invoke"
                tag_name = name
                attrs = source[0]
                content = ord(attrs)
                self.set_handler(name, attrs, content)

                source = source[1:]
                name = "length"
                attrs = source[0]
                content = ord(attrs)
                tag_length = content
                self.set_handler(name, attrs, content)
                #self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)

                source = source[1:]
                #name = "invoke value"
                name = "invoke_id"
                attrs = source[0]
                content = ord(attrs)
                tag_value = content
                self.set_handler(name, attrs, content)
                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                  tag_value)

                Msg = "MAP SRI-SM Is_TCAP_begin = <%s>" % Is_TCAP_begin
                PCA_GenLib.WriteLog(Msg, 3)

                # SRI request
                if Is_TCAP_begin == 1:
                    Msg = "MAP SRI-SM DEBUG data begin =<\n%s\n>" % PCA_GenLib.HexDump(
                        source)
                    PCA_GenLib.WriteLog(Msg, 3)
                    source = source[1:]
                    name = "opCode"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)

                    source = source[1:]
                    name = "opCode length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content
                    self.set_handler(name, attrs, content)

                    source = source[1:]
                    name = "opCode"
                    attrs = source[0]
                    content = ord(attrs)

                    op_code = 'na'
                    try:
                        tag_value = PCA_MAPParameters.op_code[content]
                        op_code = tag_value
                        #Msg = "MAP opcode = <%s>" % tag_value
                        #PCA_GenLib.WriteLog(Msg,1)
                    except:
                        Msg = "unknow opCode Value = %s" % content
                        PCA_GenLib.WriteLog(Msg, 0)

                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = source[1:]
                    name = "msisdn tag"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)

                    source = source[1:]
                    name = "msisdn tag length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content
                    #self.set_handler(name,attrs,content)

                    source = source[1:]
                    name = "msisdn tag value"
                    attrs = source[0:tag_length]
                    tag_value = PCA_GenLib.getHexString(attrs)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = attrs
                    name = "msisdn"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "msisdn value"
                    attrs = source[1:tag_length]
                    tag_value = PCA_GenLib.getHexBCDString(attrs)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)
                    source = source[tag_length:]
                    if op_code != "reportSM-DeliveryStatus":

                        name = "Priority Flag"
                        tag_name = name
                        attrs = source[0]
                        content = ord(attrs)

                        source = source[1:]
                        name = "length"
                        attrs = source[0]
                        content = ord(attrs)
                        tag_length = content

                        source = source[1:]
                        name = "Priority Flag value"
                        attrs = source[0:tag_length]
                        tag_value = PCA_GenLib.getHexString(attrs)
                        self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,
                                                          tag_name, tag_value)
                        self.set_handler(name, attrs, tag_value)
                        source = source[1:]

                    name = "sc-address"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "sc-address length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "sc-address value"
                    attrs = source[1:tag_length]
                    tag_value = PCA_GenLib.getHexBCDString(attrs)
                    Msg = "sc_address = <%s>" % tag_value
                    PCA_GenLib.WriteLog(Msg, 3)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = source[tag_length:]
                    if op_code == "reportSM-DeliveryStatus":
                        name = "sm-DeliveryOutcom"
                        attrs = source[2]
                        content = ord(attrs)
                        self.set_handler(name, attrs, content)
                        Msg = "name = %s , value = %s" % (name, content)
                        PCA_GenLib.WriteLog(Msg, 3)

                else:
                    # SRI response
                    Msg = "MAP SRI-SM DEBUG data end =<\n%s\n>" % PCA_GenLib.HexDump(
                        source)
                    PCA_GenLib.WriteLog(Msg, 3)
                    source = source[1:]
                    name = "resultretres"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "resultretres value"
                    attrs = source[0:tag_length]

                    source = attrs
                    name = "opCode"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "opCode"
                    attrs = source[0]
                    content = ord(attrs)
                    try:
                        tag_value = PCA_MAPParameters.op_code[content]
                    except:
                        Msg = "unknow opCode Value = %s" % content
                        PCA_GenLib.WriteLog(Msg, 0)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = source[1:]
                    name = "sm-rp-UI"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content
                    #self.set_handler(name,attrs,content)

                    source = source[1:]
                    name = "sm-rp-UI value"
                    attrs = source[0:tag_length]
                    tag_value = PCA_GenLib.getHexString(attrs)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = attrs
                    name = "imsi"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "imsi value"
                    attrs = source[0:tag_length]
                    tag_value = PCA_GenLib.getHexIMSIString(attrs)[0:15]
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = source[tag_length:]
                    name = "location-info-with-LMSI"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "location-info-with-LMSI value"
                    attrs = source[0:tag_length]
                    tag_value = PCA_GenLib.getHexString(attrs)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                      tag_value)
                    self.set_handler(name, attrs, tag_value)

                    source = attrs
                    name = "NNN"
                    tag_name = name
                    attrs = source[0]
                    content = ord(attrs)

                    source = source[1:]
                    name = "length"
                    attrs = source[0]
                    content = ord(attrs)
                    tag_length = content

                    source = source[1:]
                    name = "NNN value"
                    attrs = source[1:tag_length]
                    #tag_value = PCA_GenLib.getHexString(attrs)
                    tag_value = PCA_GenLib.getHexBCDString(attrs)
                    self.set_handler(name, tag_value, tag_value)

                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, tag_name,
                                                  tag_value)
                #self.set_handler(name,attrs,tag_value)

                #source = source[1:]
                #name = "location GT"
                #attrs = source
                #content = PCA_GenLib.getHexBCDString(attrs)
                #self.set_handler(name,attrs,content)

                #self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,tag_name,tag_value)

            if self.StartParsing == 1:
                self._cont_handler.endDocument(orig_data, self.DebugStr)

            Msg = "parser OK"
            PCA_GenLib.WriteLog(Msg, 9)

        except:
            Msg = "parser  :<%s>,<%s>,name=<%s>" % (sys.exc_type,
                                                    sys.exc_value, name)
            PCA_GenLib.WriteLog(Msg, 2)
            Msg = "orig data =\n%s" % PCA_GenLib.HexDump(orig_data)
            PCA_GenLib.WriteLog(Msg, 2)
            self.set_handler("opCode", "sendRoutingInfoForSM",
                             "sendRoutingInfoForSM")
Exemple #4
0
    def parseTLV(self, data):
        try:
            Msg = "parseTLV Init "
            PCA_GenLib.WriteLog(Msg, 9)

            source = data
            tlv_desc = 'na'
            tlv_type = 'na'
            name = 'na'
            number_of_tlv = 0

            Msg = "MAP shortMsgGateway SRI parseTLV data =\n%s" % PCA_GenLib.HexDump(
                source)
            PCA_GenLib.WriteLog(Msg, 0)
            tag = ""

            while len(source) > 0:
                number_of_tlv = number_of_tlv + 1
                if number_of_tlv > 100:
                    Msg = "number of TLV > 100 "
                    PCA_GenLib.WriteLog(Msg, 0)
                    break

                self.tag_index = self.tag_index + 1
                name = "Tag"
                attrs = source[0]
                tag_desc = "na"
                try:

                    tag_desc = PCA_MAPParameters.Tag_Desc[attrs]
                    content = tag_desc
                    if content == "invoke_id":
                        if self.invoke_id == 1:
                            tag_desc = "opCode"
                            content = tag_desc
                            self.invoke_id = 2
                        else:
                            self.invoke_id = 1
                    else:
                        content = tag_desc
                except:
                    content = "undef:%s" % PCA_GenLib.getHexString(attrs)

                #tag = content
                #tag = "%s:%s" % (content,PCA_GenLib.getHexString(attrs))
                tag = "%s" % content

                #self.set_handler(name,chr(0x00),content)
                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, content)

                tag_class = ord(attrs) & 0xc0
                tag_class = tag_class >> 6
                Tag_Type = 'Primitive'
                if (ord(attrs) & 0x20):
                    attrs = source[0:2]
                    content = PCA_GenLib.getHexString(attrs)
                    Tag_Type = 'Constructor'
                else:

                    content = ord(attrs)
                    Tag_Type = 'Primitive'

                name = "tag type"
                content = Tag_Type

                Tag_form = "Extended format"
                if (ord(source[0]) & 0x1f) == 0x1f:
                    Tag_form = "Extended format"
                    source = source[2:]
                    #source = source[1:]
                else:
                    Tag_form = "One octet format"
                    source = source[1:]
                name = "tag form"
                content = Tag_form
                #self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)

                name = "length"
                name = "%s length" % tag
                attrs = source[0]
                content = ord(attrs)
                tag_length_form = "short"
                if content & 0x80:
                    tag_length_form = "long"
                    long_tag_length = chr(content & 0x7F) + source[1]
                    content = struct.unpack("!H", long_tag_length)[0]
                    tag_length = content

                else:
                    tag_length_form = "short"
                    content = struct.unpack("!B", attrs)[0]
                    tag_length = content

                #self.set_handler(name,attrs,content)
                name = "%s %s" % (tag_length_form, name)
                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, content)

                if tag_length_form == "short":
                    source = source[1:]
                else:
                    source = source[2:]

                name = "value"
                name = "%s value" % tag

                attrs = source[0:tag_length]

                # OpCode
                if self.invoke_id == 2 and tag_desc == "opCode":
                    content = ord(attrs)
                    content = PCA_MAPParameters.op_code[content]
                elif tag_desc == "Originator_address" or tag_desc == "SC_Address" or tag_desc == "msisdn":
                    TOA = PCA_GenLib.getHexString(attrs[0])
                    content = PCA_GenLib.getHexBCDString(attrs[1:])
                    content = "%s:%s" % (TOA, content)
                else:
                    content = PCA_GenLib.getHexString(attrs)

                #self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)
                #self.set_handler(tag,attrs,content)

                if Tag_Type == 'Constructor':
                    self.parseTLV(attrs)
                    # DEBUG ONLY
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name,
                                                      content)
                    self.set_handler(tag, attrs, content)

                #elif tag_desc == "SM_RP_UI" :

                #   if self.Is_TCAP_begin == 1:
                #     self.parseGSM0340_request(attrs)
                #   else:
                #     if self.app_context == "shortMsgGateway_SRI_v3":
                #       # SRI response
                #       self.parseGSM0340_SRI_SM_response(attrs)
                #     else:
                #       self.parseGSM0340_response(attrs)
                else:
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name,
                                                      content)
                    self.set_handler(tag, attrs, content)

                try:
                    source = source[tag_length:]
                except IndexError:
                    Msg = "parseTLV index error : <%s>,<%s>,name=<%s> " % (
                        sys.exc_type, sys.exc_value, name)
                    PCA_GenLib.WriteLog(Msg, 0)
                    break

            Msg = "parseTLV Ok "
            PCA_GenLib.WriteLog(Msg, 9)
        except:
            Msg = "parseTLV error : <%s>,<%s>,name=<%s> " % (
                sys.exc_type, sys.exc_value, name)
            PCA_GenLib.WriteLog(Msg, 0)
  def parseTLV(self,data):
    try:
      Msg = "parseTLV Init "
      PCA_GenLib.WriteLog(Msg,9)

      source = data
      tlv_desc = 'na'
      tlv_type = 'na'
      name = 'na'
      number_of_tlv = 0
      
      Msg = "MAP parseTLV data =\n%s" % PCA_GenLib.HexDump(source)
      PCA_GenLib.WriteLog(Msg,3)
      tag_index = 0
      while len(source) > 0:

        if number_of_tlv > 100:
          Msg = "number of TLV > 100 "
          PCA_GenLib.WriteLog(Msg,0)
          break
        
        tag_index = tag_index + 1
	name = "Tag"
        name = "%s %s" % (name,tag_index)
        attrs = source[0]
        content = PCA_GenLib.getHexString(attrs)
        self.set_handler(name,chr(0x00),content)
	
        tag_class = ord(attrs) & 0xc0
        tag_class = tag_class >> 6


        Tag_Type = 'Primitive'
        if (ord(attrs) & 0x20):
          name = "C_%s-" % name
          name = "%s %s" % (name,tag_index)
          attrs = source[0:2]
          content = PCA_GenLib.getHexString(attrs)
          Tag_Type = 'Constructor'
        else:
          name = "P_%s-" % name
          name = "%s %s" % (name,tag_index)
	  content = ord(attrs)
          Tag_Type = 'Primitive'
        
        name = "%s-%s" % (name,PCA_MAPParameters.tag_class[tag_class])
        if Tag_Type == 'Primitive':
          attrs = struct.pack("!b",ord(attrs) & 0x1f)
        name = "%s %s" % (name,tag_index)
	self.set_handler(name,attrs,content)
        self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)

    
        if Tag_Type == 'Primitive':
          source = source[1:]
        else:
          source = source[2:]
         
        name = "length"
        name = "%s %s" % (name,tag_index)
	attrs = source[0]
	content = ord(attrs)
        tag_length = content
        tag_length_form = "short"
        if tag_length > 128:
           tag_length_form = "long"
           attrs = source[1]
	   content = ord(attrs)
           tag_length = content
        else:
           tag_length_form = "short"
	self.set_handler(name,attrs,content)
        self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)
        
        if tag_length_form == "short":
          source = source[1:]
        else:
          source = source[2:]

        name = "value"
        name = "%s %s" % (name,tag_index)
	attrs = source[0:tag_length]
        if Tag_Type == 'Constructor':
	  content = PCA_GenLib.getHexBCDString(attrs[1:])
        else:
          content = PCA_GenLib.getHexString(attrs)
	self.set_handler(name,attrs,content)
        self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr,name,content)
        
        if Tag_Type == 'Constructor':
          self.parseTLV(attrs)
        
        try:
          source = source[tag_length:]
        except IndexError:
          Msg = "parseTLV index error : <%s>,<%s>,name=<%s> " % (sys.exc_type,sys.exc_value,name)
          PCA_GenLib.WriteLog(Msg,0)
          break


      Msg = "parseTLV Ok "
      PCA_GenLib.WriteLog(Msg,9)
    except:
      Msg = "parseTLV error : <%s>,<%s>,name=<%s> " % (sys.exc_type,sys.exc_value,name)
      PCA_GenLib.WriteLog(Msg,0)
Exemple #6
0
    def parseAddress(self, data, length, address_type):
        try:
            Msg = "parseAddress Init "
            PCA_GenLib.WriteLog(Msg, 9)

            source = data[0:length]
            tlv_desc = 'na'
            tlv_type = 'na'
            name = 'na'
            Msg = "Address length = <%s> data =\n%s" % (
                length, PCA_GenLib.HexDump(source))
            PCA_GenLib.WriteLog(Msg, 2)
            while len(source) > 0:

                name = "Address Indicator"
                name = "%s %s" % (address_type, name)
                attrs = source[0]
                content = ord(attrs)
                self.set_handler(name, attrs, content)
                source = source[1:]
                if (content & 0x01):
                    name = "%s Address PC" % address_type
                    self.set_handler(name, attrs, "Point Code Present")
                    self.DebugStr = "%s <Point Code Present>" % self.DebugStr
                    name = "PC"
                    name = "%s %s" % (address_type, name)
                    attrs = source[0:2]
                    content = struct.unpack("!H", attrs[1] + attrs[0])[0]
                    self.set_handler(name, attrs, content)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name,
                                                      content)

                    source = source[2:]
                    name = "SSN"
                    name = "%s %s" % (address_type, name)
                    attrs = source[0]
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name,
                                                      content)

                    #source = source[1:]

                else:
                    self.DebugStr = "%s <Point Code Not Present>" % self.DebugStr
                    name = "%s Address PC" % address_type
                    self.set_handler(name, attrs, "Point Code Not Present")
                    name = "SSN"
                    name = "%s %s" % (address_type, name)
                    attrs = source[0]
                    content = ord(attrs)
                    self.set_handler(name, attrs, content)
                    self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name,
                                                      content)

                source = source[1:]
                name = "Translation Type"
                name = "%s %s" % (address_type, name)
                attrs = source[0]
                content = ord(attrs)
                self.set_handler(name, attrs, content)

                source = source[1:]
                name = "Numbering plan"
                name = "%s %s" % (address_type, name)
                attrs = source[0]
                content = ord(attrs)
                content = content & 0xF0
                content = content >> 4
                self.set_handler(name, attrs, content)

                name = "Encoding scheme"
                name = "%s %s" % (address_type, name)
                attrs = source[0]
                content = ord(attrs)
                content = content & 0x0F
                self.set_handler(name, attrs, content)

                source = source[1:]
                name = "Nature of Addr"
                name = "%s %s" % (address_type, name)
                attrs = source[0]
                content = ord(attrs)
                self.set_handler(name, attrs, content)

                source = source[1:]
                name = "Digits"
                name = "%s %s" % (address_type, name)
                attrs = source
                content = PCA_GenLib.getHexBCDString(attrs)
                self.set_handler(name, attrs, content)
                self.DebugStr = "%s,<%s>=<%s>" % (self.DebugStr, name, content)
                break

            Msg = "parseAddress Ok "
            PCA_GenLib.WriteLog(Msg, 9)
        except:
            Msg = "parseAddress error : <%s>,<%s>,name=<%s> " % (
                sys.exc_type, sys.exc_value, name)
            PCA_GenLib.WriteLog(Msg, 0)