
This directory contains a few examples.

1. The ./sample.source.PKIX1 directory contains the X.509 Certificate decoder,
   as specified in rfc3280.txt. Just type `make` in there to compile.

2. The ./sample.source.MHEG5 directory contains the decoder for
   ISO 13522 MHEG-5/ITU-T T.172 (Multimedia Hypermedia Experts Group,
   Multimedia Presentations). Read the README file in that directory.

3. The ./sample.source.MEGACO directory contains the decoder for
   Media Gateway Control Protocol data units as specified in rfc3525.txt.

4. The ./sample.source.LDAP3 directory contains the decoder for
   Lightweight Directory Access Protocol version 3 PDU as specified in
   rfc4211.txt.

5. The ./sample.source.RRC directory contains the 3GPP Radio Resource Control
   decoder for RRC version 7.1.0. Just type `make` in there to compile.

6. The ./sample.source.LTE-RRC directory contains the 3GPP RRC
   decoder for LTE RRC version 14.2.1. Read the README file in that directory.

7. The ./sample.source.TAP3 directory contains the GSM TAP3 decoder.
   Before trying to compile, read the README file in that directory.

8. The ./sample.source.ULP directory contains the Open Mobile Alliance
   UserPlane Location Protocol decoder. Before trying to compile, read the
   README file in that directory.

The crfc2asn1.pl script can be used to extract ASN.1 data from RFC texts.
For instance, it is used to extract X.509, MEGACO, and LDAPv3 ASN.1 modules
from the corresponding RFC texts (rfc3280.txt, rfc3525.txt, rfc4211.txt).

To regenerate the .asn1 files from the original RFC texts, execute
`make clean; make` in the current directory.

