- 02 Feb, 2024 2 commits
- 24 Jan, 2024 1 commit
-
-
Mouse authored
Update main README with supported encoding rules
-
- 23 Jan, 2024 2 commits
- 22 Jan, 2024 1 commit
-
-
v0-e authored
-
- 17 Jan, 2024 3 commits
- 16 Jan, 2024 1 commit
-
-
v0-e authored
-
- 15 Jan, 2024 1 commit
-
-
v0-e authored
-
- 14 Jan, 2024 1 commit
-
-
Mouse authored
`NativeInteger_rfill.c` was sometimes ignoring the PER constrains. @lbm98 added a check which was also present in BIT_STRING_rfill.c to respect them.
-
- 13 Jan, 2024 1 commit
-
-
Mouse authored
.gitignore: Ignore generated smoke tests
-
- 12 Jan, 2024 1 commit
-
-
v0-e authored
-
- 09 Jan, 2024 1 commit
-
-
Mouse authored
-
- 08 Jan, 2024 1 commit
-
-
v0-e authored
-
- 07 Jan, 2024 2 commits
- 04 Jan, 2024 2 commits
- 26 Dec, 2023 7 commits
-
-
Mouse authored
jer: Add missing 'fall through' marker comments
-
Mouse authored
Should correctly address issue that #112 is trying to fix
-
v0-e authored
-
Mouse authored
Previous commit was wrong - va_end(args) is called once, and right where it belongs.
-
Mouse authored
This is #401 from vlm/asn1c by @Inksz. From his PR: I do not know the project's code-style, in some C projects this kind of error-handling would incorporate a goto. But because of the general avoidance of goto I added va_end before each return. I suppose has more insight into what this function does, one could "dry" the error handling.
-
Mouse authored
jer: Minified JSON option
-
v0-e authored
-
- 25 Dec, 2023 1 commit
-
-
Mouse authored
jer: UTF-8 escape control chars and handle escaped unicodes
-
- 22 Dec, 2023 1 commit
-
-
v0-e authored
-
- 20 Dec, 2023 4 commits
- 19 Dec, 2023 1 commit
-
-
Cedric Roux authored
aper_put_nsnnwn() and aper_get_nsnnwn() were wrong. All the places where they were used are modified, if needed. The functions aper_get_constrained_whole_number() and aper_put_constrained_whole_number() are introduced. They don't cover all cases, very big numbers are not supported. The sample ASN.1 file and C program at the end show some issues. For sequence-of, APER decoding fails and the XER output after APER encode/decode is: ----------- xer after encode/decode: <ListOfInt> <INTEGER>1</INTEGER> <INTEGER>259</INTEGER> </ListOfInt> ----------- instead of: ----------- xer after encode/decode: <ListOfInt> <INTEGER>1</INTEGER> <INTEGER>2</INTEGER> <INTEGER>3</INTEGER> </ListOfInt> ----------- For the enum test, we have: ----------- aper ue lost[1]: d4 ----------- instead of: ----------- aper ue lost[1]: 95 ----------- And APER decoding fails. For the choice test, we see: ----------- aper snssai[3]: 80 01 00 ----------- instead of: ----------- aper snssai[3]: 84 01 00 ----------- And XER after encode/decode is wrong. To generate C code from the ASN.1 file, asn1c is run as: asn1c -pdu=all -fno-include-deps -fcompound-names -gen-UPER -no-gen-BER -no-gen-JER -no-gen-OER -gen-APER -no-gen-example ASN.1 file: ----------- Test DEFINITIONS AUTOMATIC TAGS ::= BEGIN TestCond-Type ::= CHOICE{ gBR ENUMERATED {true, ...}, aMBR ENUMERATED {true, ...}, isStat ENUMERATED {true, ...}, isCatM ENUMERATED {true, ...}, rSRP ENUMERATED {true, ...}, rSRQ ENUMERATED {true, ...}, ..., ul-rSRP ENUMERATED {true, ...}, cQI ENUMERATED {true, ...}, fiveQI ENUMERATED {true, ...}, qCI ENUMERATED {true, ...}, sNSSAI ENUMERATED {true, ...} } CauseRadioNetwork ::= ENUMERATED { handover-desirable-for-radio-reasons, time-critical-handover, resource-optimisation-handover, reduce-load-in-serving-cell, partial-handover, unknown-new-eNB-UE-X2AP-ID, unknown-old-eNB-UE-X2AP-ID, unknown-pair-of-UE-X2AP-ID, ho-target-not-allowed, tx2relocoverall-expiry, trelocprep-expiry, cell-not-available, no-radio-resources-available-in-target-cell, invalid-MME-GroupID, unknown-MME-Code, encryption-and-or-integrity-protection-algorithms-not-supported, reportCharacteristicsEmpty, noReportPeriodicity, existingMeasurementID, unknown-eNB-Measurement-ID, measurement-temporarily-not-available, unspecified, ..., load-balancing, handover-optimisation, value-out-of-allowed-range, multiple-E-RAB-ID-instances, switch-off-ongoing, not-supported-QCI-value, measurement-not-supported-for-the-object, tDCoverall-expiry, tDCprep-expiry, action-desirable-for-radio-reasons, reduce-load, resource-optimisation, time-critical-action, target-not-allowed, no-radio-resources-available, invalid-QoS-combination, encryption-algorithms-not-supported, procedure-cancelled, rRM-purpose, improve-user-bit-rate, user-inactivity, radio-connection-with-UE-lost, failure-in-the-radio-interface-procedure, bearer-option-not-supported, mCG-Mobility, sCG-Mobility, count-reaches-max-value, unknown-old-en-gNB-UE-X2AP-ID, pDCP-Overload } ListOfInt ::= SEQUENCE (SIZE (3)) OF INTEGER END ----------- C program: ----------- void test(void *v, int is_aper, char *name, void *t) { unsigned char b[128]; asn_enc_rval_t r = asn_encode_to_buffer(NULL, is_aper ? ATS_ALIGNED_BASIC_PER : ATS_UNALIGNED_BASIC_PER, t, v, b, sizeof(b)); if (r.encoded <= 0) printf("error\n"); else printf("ok\n"); printf("%s %s[%ld]:", is_aper ? "aper" : "uper", name, r.encoded); for (int i = 0; i < r.encoded; i++) printf(" %2.2x", b[i]); printf("\n"); void *ret = NULL; asn_dec_rval_t d = asn_decode(NULL, is_aper ? ATS_ALIGNED_BASIC_PER : ATS_UNALIGNED_BASIC_PER, t, &ret, b, r.encoded); if (d.consumed != r.encoded) printf("error\n"); else printf("ok\n"); printf("xer of input:\n"); xer_fprint(stdout, t, v); printf("xer after encode/decode:\n"); xer_fprint(stdout, t, ret); } int main(void) { /* test sequence of */ ListOfInt_t l = { 0 }; long val[3] = { 1, 2, 3 }; asn_sequence_add(&l.list, &val[0]); asn_sequence_add(&l.list, &val[1]); asn_sequence_add(&l.list, &val[2]); test(&l, 1, "sequence-of (size 3)", &asn_DEF_ListOfInt); test(&l, 0, "sequence-of (size 3)", &asn_DEF_ListOfInt); /* test enum */ CauseRadioNetwork_t v; v = CauseRadioNetwork_radio_connection_with_UE_lost; test(&v, 1, "ue lost", &asn_DEF_CauseRadioNetwork); test(&v, 0, "ue lost", &asn_DEF_CauseRadioNetwork); v = CauseRadioNetwork_cell_not_available; test(&v, 1, "no cell", &asn_DEF_CauseRadioNetwork); test(&v, 0, "no cell", &asn_DEF_CauseRadioNetwork); /* test choice */ TestCond_Type_t w; w.present = TestCond_Type_PR_sNSSAI; w.choice.sNSSAI = TestCond_Type__sNSSAI_true; test(&w, 1, "snssai", &asn_DEF_TestCond_Type); test(&w, 0, "snssai", &asn_DEF_TestCond_Type); w.present = TestCond_Type_PR_gBR; w.choice.sNSSAI = TestCond_Type__gBR_true; test(&w, 1, "gbr", &asn_DEF_TestCond_Type); test(&w, 0, "gbr", &asn_DEF_TestCond_Type); return 0; } -----------
-
- 16 Dec, 2023 6 commits