ASN.1 multiple records with multiple record definitions
Lars Thorsen
lars.thorsen@REDACTED
Tue Jun 30 14:52:59 CEST 2020
Hi,
Here comes a solution for your problem (not using SEQUENCE OF).
Compile your spec with the option undec_rest.
asn1ct:compile("People.asn1", [undec_rest]).
Then do a decode function in your module.
decode(<<>>, Acc) ->
lists:reverse(Acc);
decode(Data, Acc) ->
{ok, P, Rest} = 'People':decode('RecordType', Data),
decode(Rest, [P | Acc]).
1> {ok, Txt} = file:read_file("cdr.dat").
2> YourModule:decode(Data, []).
[{person,{'Person',"John Smith",5,38}},
{contact,{'Contact',"Vanessa","123 456"}},
{person,{'Person',"Mercator",home,32}},
{contact,{'Contact',"Alicia","987 654"}}]
Best Regards Lars
-----Original Message-----
From: erlang-questions <erlang-questions-bounces@REDACTED> On Behalf Of Papa Tana
Sent: den 30 juni 2020 14:23
To: erlang-questions@REDACTED
Subject: Re: ASN.1 multiple records with multiple record definitions
This project is SOLVED!!
Let me share here the solution provided by some OTP team in my inbox.
===> SOLUTION: need to specify that there will be a sequence of RecordType.
%% update People.asn
List ::= SEQUENCE OF RecordType
%% insert Data in the CDR-people.dat
{ok, Binx} =
'People':encode('PList',
[{person, {'Person', "John Smith", 5, 38}},
{contact, {'Contact', "Vanessa", "123 456"}},
{contact, {'Contact', "Alicia", "987 654"}},
{person, {'Person', "Mercator", 0, 32}}]).
file:write_file("CDR-people.dat", Binx).
%% Retrieving all the values is successful {ok, Txt} = file:read_file("CDR-people.dat").
'People':decode('PList', Txt).
N.B:
But it works at THE ONLY CONDITION that I can change People.asn My project in the real world is that some vendor provides me a non-editable CDR.asn and a list of CDRxxxx.dat files containing different types of record.
Maybe there is some Header as specified by OTP team, or any additional field that I am missing in the Binary result decoding, I will explore this way.
> 2020-06-30 10:13 UTC+03:00, Papa Tana <papa.tana101@REDACTED>:
> But when I'm reading the file, and decode, it only returns the first
> Person, sounds like the 3 upcoming records are ignored:
>
More information about the erlang-questions
mailing list