ASN.1 multiple records with multiple record definitions

Papa Tana papa.tana101@REDACTED
Mon Jun 29 14:22:52 CEST 2020

Hello World!

I came across this issue as well
and thanks to this, I am now able to decode multiple records using the
same definition.

Now, the problem is as below:

My People.asn file is:

  Person ::= SEQUENCE {
    name PrintableString,
    location INTEGER {home(0),field(1),roving(2)},
  Contact ::= SEQUENCE {
    name VisibleString,
    phone NumericString

Compilation is ok:

> asn1ct:compile("People", [ber]).

Let's check:

> rr('People').

Now, I am adding a 'Person' record, then a 'Contact', a 'Contact'
again, and a 'Person' as next, and so on "randomly":

> {ok, F} = file:open("CDR-people.dat", [write]).
> {ok, Bin1} = 'People':encode('Person', {'Person', "John Smith", 2, 32}).
> {ok, Bin2} = 'People':encode('Contact', {'Contact', "Alicia", "261 5687454121"}).
> {ok, Bin3} = 'People':encode('Contact', {'Contact', "Alexa", "974 3487454121"}).
> {ok, Bin4} = 'People':encode('Person', {'Person', "Rob Dummy", 2, 38}).
> {ok, Bin5} = 'People':encode('Person', {'Person', "Anderson", 2, 34}).
> file:write(F,Bin1).
> file:write(F,Bin2).
> file:write(F,Bin3).
> file:write(F,Bin4).
> file:write(F,Bin5).
> file:close(F).

As expected, when I want to decode this simple binary file as below:

{ok, F} = file:read_file("CDR-people.dat").

{ok, A, B}  = 'People':decode('Person', F).
{ok, C, D}  = 'People':decode('Person', B).
{ok, E, G}  = 'People':decode('Contact', D).

=> It gives me an error, because the second record is a 'Contact', not
a 'Person'.

How can I resolve this please?

The fact is that, I have some CDR file which contains several records
inside them, and those records are added randomly by the peer-end, so
I don't always know what would be the next content.

Am I missing something?

Thank you so much,

Kind Regards,

More information about the erlang-questions mailing list