Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iterating ASN.1 objects #22

Open
abouillot-stl opened this issue Nov 20, 2024 · 0 comments
Open

iterating ASN.1 objects #22

abouillot-stl opened this issue Nov 20, 2024 · 0 comments

Comments

@abouillot-stl
Copy link

Hello,

I'm trying get an object iterating an ASN.1 object.

I have a rrcReconfiguration message. I can iterate through it and get objects from most of the hierarchy, but when looking into the reportConfigToAddModList, it always return the last item of the sequence.

I can access the values of the different items reportConfigToAddModList if I iterate the serialization of the object.

I guess I miss something about the usage of the get_obj_at function in this particular case of SEQ OF SQUENCE

Here is the code snippet to show it:

import binascii
import re
from pycrate_asn1dir import RRCNR
from pycrate_asn1rt.utils import get_val_at, get_obj_at


payload = """
00 29 56 04 07 80 01 04  49 c1 00 40 00 1c 01 40
30 02 f0 00 20 67 28 20  08 00 03 80 28 06 00 80
20 06 a2 90 03 80 24 04  c0 02 00 70 08 81 12 00
80 0f c0 02 00 28 c6 51  01 80 50 28 05 c1 00 48
24 12 c0 01 00 47 40 01  00 80 89 01 b0 48 ca 82
80 31 00 00 00 e0 fc 04  c7 3e c3 50 04 fc 00 84
02 12 ee 00 17 e4 05 f0  21 00 02 03 47 50 72 80
a8 0e 00 05 f0 20 00 00  02 2a 2c 02 02 08 02 00
00 04 08 02 00 00 0c 08  02 00 00 0e 08 02 00 00
02 22 0a 82 02 00 00 14  62 36 02 02 08 02 00 00
14 08 02 00 00 02 08 02  00 00 04 08 02 00 00 0c
08 02 00 00 0e 42 04 06  00 bc 03 7c 68 10 06 3e
33 e2 06 3e 23 e4                               
"""

msg = binascii.a2b_hex(re.sub(r"\s+", "", payload))

dl_dcch = RRCNR.NR_RRC_Definitions.DL_DCCH_Message
dl_dcch.from_uper(msg)
meas = get_obj_at(dl_dcch, ["message", "c1", "rrcReconfiguration", "criticalExtensions", "rrcReconfiguration", "measConfig"])
# reports is ReportConfigToAddModList ::=        SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod
reports = get_obj_at(meas, ["reportConfigToAddModList"])
# will only return the last item of the Seq of Sequence
for i in range(len(reports())):
    # report is expected to be ReportConfigToAddMod ::=            SEQUENCE {
    # at the given index
    report = get_obj_at(reports, [i])
    print(f"--- {i} ---")
    # But only 3rd and last item presented
    print(report.to_json())

# will present the 3 differents report to add
for i in range(len(reports())):
    report = reports()[i]
    print(f"--- {i} ---")
    print(report)

Any hints on get_obj_at usage would be welcome.

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant