MEGACO (Media Gateway Control) protocol decoder

diff --git a/examples/sample.source.MEGACO/Makefile b/examples/sample.source.MEGACO/Makefile
new file mode 100644
index 0000000..e250b52
--- /dev/null
+++ b/examples/sample.source.MEGACO/Makefile
@@ -0,0 +1,322 @@
+ASN_MODULE_SOURCES=	\
+	MegacoMessage.c	\
+	AuthenticationHeader.c	\
+	SecurityParmIndex.c	\
+	SequenceNum.c	\
+	AuthData.c	\
+	Message.c	\
+	MId.c	\
+	DomainName.c	\
+	IP4Address.c	\
+	IP6Address.c	\
+	PathName.c	\
+	Transaction.c	\
+	TransactionId.c	\
+	TransactionRequest.c	\
+	TransactionPending.c	\
+	TransactionReply.c	\
+	TransactionResponseAck.c	\
+	TransactionAck.c	\
+	ErrorDescriptor.c	\
+	ErrorCode.c	\
+	ErrorText.c	\
+	ContextID.c	\
+	ActionRequest.c	\
+	ActionReply.c	\
+	ContextRequest.c	\
+	ContextAttrAuditRequest.c	\
+	CommandRequest.c	\
+	Command.c	\
+	CommandReply.c	\
+	TopologyRequest.c	\
+	AmmRequest.c	\
+	AmmDescriptor.c	\
+	AmmsReply.c	\
+	SubtractRequest.c	\
+	AuditRequest.c	\
+	AuditReply.c	\
+	AuditResult.c	\
+	TerminationAudit.c	\
+	AuditReturnParameter.c	\
+	AuditDescriptor.c	\
+	NotifyRequest.c	\
+	NotifyReply.c	\
+	ObservedEventsDescriptor.c	\
+	ObservedEvent.c	\
+	EventName.c	\
+	EventParameter.c	\
+	ServiceChangeRequest.c	\
+	ServiceChangeReply.c	\
+	ServiceChangeResult.c	\
+	WildcardField.c	\
+	TerminationID.c	\
+	TerminationIDList.c	\
+	MediaDescriptor.c	\
+	StreamDescriptor.c	\
+	StreamParms.c	\
+	LocalControlDescriptor.c	\
+	StreamMode.c	\
+	PropertyParm.c	\
+	Name.c	\
+	PkgdName.c	\
+	Relation.c	\
+	LocalRemoteDescriptor.c	\
+	PropertyGroup.c	\
+	TerminationStateDescriptor.c	\
+	EventBufferControl.c	\
+	ServiceState.c	\
+	MuxDescriptor.c	\
+	MuxType.c	\
+	StreamID.c	\
+	EventsDescriptor.c	\
+	RequestedEvent.c	\
+	RequestedActions.c	\
+	EventDM.c	\
+	SecondEventsDescriptor.c	\
+	SecondRequestedEvent.c	\
+	SecondRequestedActions.c	\
+	EventBufferDescriptor.c	\
+	EventSpec.c	\
+	SignalsDescriptor.c	\
+	SignalRequest.c	\
+	SeqSigList.c	\
+	Signal.c	\
+	SignalType.c	\
+	SignalName.c	\
+	NotifyCompletion.c	\
+	SigParameter.c	\
+	RequestID.c	\
+	ModemDescriptor.c	\
+	ModemType.c	\
+	DigitMapDescriptor.c	\
+	DigitMapName.c	\
+	DigitMapValue.c	\
+	ServiceChangeParm.c	\
+	ServiceChangeAddress.c	\
+	ServiceChangeResParm.c	\
+	ServiceChangeMethod.c	\
+	ServiceChangeProfile.c	\
+	PackagesDescriptor.c	\
+	PackagesItem.c	\
+	StatisticsDescriptor.c	\
+	StatisticsParameter.c	\
+	NonStandardData.c	\
+	NonStandardIdentifier.c	\
+	H221NonStandard.c	\
+	TimeNotation.c	\
+	Value.c
+
+ASN_MODULE_HEADERS=	\
+	MegacoMessage.h	\
+	AuthenticationHeader.h	\
+	SecurityParmIndex.h	\
+	SequenceNum.h	\
+	AuthData.h	\
+	Message.h	\
+	MId.h	\
+	DomainName.h	\
+	IP4Address.h	\
+	IP6Address.h	\
+	PathName.h	\
+	Transaction.h	\
+	TransactionId.h	\
+	TransactionRequest.h	\
+	TransactionPending.h	\
+	TransactionReply.h	\
+	TransactionResponseAck.h	\
+	TransactionAck.h	\
+	ErrorDescriptor.h	\
+	ErrorCode.h	\
+	ErrorText.h	\
+	ContextID.h	\
+	ActionRequest.h	\
+	ActionReply.h	\
+	ContextRequest.h	\
+	ContextAttrAuditRequest.h	\
+	CommandRequest.h	\
+	Command.h	\
+	CommandReply.h	\
+	TopologyRequest.h	\
+	AmmRequest.h	\
+	AmmDescriptor.h	\
+	AmmsReply.h	\
+	SubtractRequest.h	\
+	AuditRequest.h	\
+	AuditReply.h	\
+	AuditResult.h	\
+	TerminationAudit.h	\
+	AuditReturnParameter.h	\
+	AuditDescriptor.h	\
+	NotifyRequest.h	\
+	NotifyReply.h	\
+	ObservedEventsDescriptor.h	\
+	ObservedEvent.h	\
+	EventName.h	\
+	EventParameter.h	\
+	ServiceChangeRequest.h	\
+	ServiceChangeReply.h	\
+	ServiceChangeResult.h	\
+	WildcardField.h	\
+	TerminationID.h	\
+	TerminationIDList.h	\
+	MediaDescriptor.h	\
+	StreamDescriptor.h	\
+	StreamParms.h	\
+	LocalControlDescriptor.h	\
+	StreamMode.h	\
+	PropertyParm.h	\
+	Name.h	\
+	PkgdName.h	\
+	Relation.h	\
+	LocalRemoteDescriptor.h	\
+	PropertyGroup.h	\
+	TerminationStateDescriptor.h	\
+	EventBufferControl.h	\
+	ServiceState.h	\
+	MuxDescriptor.h	\
+	MuxType.h	\
+	StreamID.h	\
+	EventsDescriptor.h	\
+	RequestedEvent.h	\
+	RequestedActions.h	\
+	EventDM.h	\
+	SecondEventsDescriptor.h	\
+	SecondRequestedEvent.h	\
+	SecondRequestedActions.h	\
+	EventBufferDescriptor.h	\
+	EventSpec.h	\
+	SignalsDescriptor.h	\
+	SignalRequest.h	\
+	SeqSigList.h	\
+	Signal.h	\
+	SignalType.h	\
+	SignalName.h	\
+	NotifyCompletion.h	\
+	SigParameter.h	\
+	RequestID.h	\
+	ModemDescriptor.h	\
+	ModemType.h	\
+	DigitMapDescriptor.h	\
+	DigitMapName.h	\
+	DigitMapValue.h	\
+	ServiceChangeParm.h	\
+	ServiceChangeAddress.h	\
+	ServiceChangeResParm.h	\
+	ServiceChangeMethod.h	\
+	ServiceChangeProfile.h	\
+	PackagesDescriptor.h	\
+	PackagesItem.h	\
+	StatisticsDescriptor.h	\
+	StatisticsParameter.h	\
+	NonStandardData.h	\
+	NonStandardIdentifier.h	\
+	H221NonStandard.h	\
+	TimeNotation.h	\
+	Value.h
+
+ASN_MODULE_HEADERS+=BOOLEAN.h
+ASN_MODULE_SOURCES+=BOOLEAN.c
+ASN_MODULE_HEADERS+=ENUMERATED.h
+ASN_MODULE_SOURCES+=ENUMERATED.c
+ASN_MODULE_HEADERS+=INTEGER.h
+ASN_MODULE_HEADERS+=NativeEnumerated.h
+ASN_MODULE_HEADERS+=IA5String.h
+ASN_MODULE_SOURCES+=IA5String.c
+ASN_MODULE_SOURCES+=INTEGER.c
+ASN_MODULE_HEADERS+=NULL.h
+ASN_MODULE_SOURCES+=NULL.c
+ASN_MODULE_SOURCES+=NativeEnumerated.c
+ASN_MODULE_HEADERS+=NativeInteger.h
+ASN_MODULE_SOURCES+=NativeInteger.c
+ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h
+ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.c
+ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h
+ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c
+ASN_MODULE_HEADERS+=asn_SET_OF.h
+ASN_MODULE_SOURCES+=asn_SET_OF.c
+ASN_MODULE_HEADERS+=constr_CHOICE.h
+ASN_MODULE_SOURCES+=constr_CHOICE.c
+ASN_MODULE_HEADERS+=constr_SEQUENCE.h
+ASN_MODULE_SOURCES+=constr_SEQUENCE.c
+ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h
+ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c
+ASN_MODULE_HEADERS+=constr_SET_OF.h
+ASN_MODULE_SOURCES+=constr_SET_OF.c
+ASN_MODULE_HEADERS+=asn_application.h
+ASN_MODULE_HEADERS+=asn_system.h
+ASN_MODULE_HEADERS+=asn_codecs.h
+ASN_MODULE_HEADERS+=asn_internal.h
+ASN_MODULE_HEADERS+=OCTET_STRING.h
+ASN_MODULE_SOURCES+=OCTET_STRING.c
+ASN_MODULE_HEADERS+=BIT_STRING.h
+ASN_MODULE_SOURCES+=BIT_STRING.c
+ASN_MODULE_SOURCES+=asn_codecs_prim.c
+ASN_MODULE_HEADERS+=asn_codecs_prim.h
+ASN_MODULE_HEADERS+=ber_tlv_length.h
+ASN_MODULE_SOURCES+=ber_tlv_length.c
+ASN_MODULE_HEADERS+=ber_tlv_tag.h
+ASN_MODULE_SOURCES+=ber_tlv_tag.c
+ASN_MODULE_HEADERS+=ber_decoder.h
+ASN_MODULE_SOURCES+=ber_decoder.c
+ASN_MODULE_HEADERS+=der_encoder.h
+ASN_MODULE_SOURCES+=der_encoder.c
+ASN_MODULE_HEADERS+=constr_TYPE.h
+ASN_MODULE_SOURCES+=constr_TYPE.c
+ASN_MODULE_HEADERS+=constraints.h
+ASN_MODULE_SOURCES+=constraints.c
+ASN_MODULE_HEADERS+=xer_support.h
+ASN_MODULE_SOURCES+=xer_support.c
+ASN_MODULE_HEADERS+=xer_decoder.h
+ASN_MODULE_SOURCES+=xer_decoder.c
+ASN_MODULE_HEADERS+=xer_encoder.h
+ASN_MODULE_SOURCES+=xer_encoder.c
+ASN_MODULE_HEADERS+=per_support.h
+ASN_MODULE_SOURCES+=per_support.c
+ASN_MODULE_HEADERS+=per_decoder.h
+ASN_MODULE_SOURCES+=per_decoder.c
+ASN_MODULE_HEADERS+=per_encoder.h
+ASN_MODULE_SOURCES+=per_encoder.c
+
+
+lib_LTLIBRARIES=libsomething.la
+libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
+
+# This file may be used as an input for make(3)
+# Remove the lines below to convert it into a pure .am file
+TARGET = megacoDump
+CFLAGS += -I. -DHAVE_CONFIG_H
+OBJS=${ASN_MODULE_SOURCES:.c=.o} $(TARGET).o
+
+all: MegacoMessage.c $(TARGET)
+
+$(TARGET): ${OBJS}
+	$(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+.c.o:
+	$(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+	rm -f $(TARGET)
+	rm -f $(OBJS)
+
+regen: regenerate-from-asn1-source
+
+regenerate-from-asn1-source:
+	../../asn1c/asn1c -fcompound-names -S ../../skeletons ../rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+
+MegacoMessage.c: regenerate.Makefile
+	./regenerate.Makefile
+	@touch MegacoMessage.c
+	make
+
+ASN_CONVERTER=../../skeletons/converter-sample.c
+$(TARGET).o: $(ASN_CONVERTER)
+	$(CC) $(CFLAGS) -DPDU=MegacoMessage -o $(TARGET).o -c $(ASN_CONVERTER)
+
+distclean: clean
+	rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
+	rm -f Makefile.am.sample
diff --git a/examples/sample.source.MEGACO/README b/examples/sample.source.MEGACO/README
new file mode 100644
index 0000000..fb1bfd9
--- /dev/null
+++ b/examples/sample.source.MEGACO/README
@@ -0,0 +1,20 @@
+
+GENERAL INFORMATION
+===================
+
+The MEGACO (Media Gateway Control Protocol) PDU decoder.
+Invoking `make` will compile the ASN.1 specifications from the rfc3525.txt
+in the above directory.
+
+The ../../skeletons/converter-sample.c will supply the missing
+"int main()" routine which drives the decoding process.
+
+megacoDump USAGE
+==============
+
+	./megacoDump MegacoMessage.ber	# Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+	> ./megacoDump -h
+
diff --git a/examples/sample.source.MEGACO/config.h b/examples/sample.source.MEGACO/config.h
new file mode 100644
index 0000000..2dda929
--- /dev/null
+++ b/examples/sample.source.MEGACO/config.h
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define	ASN_DEBUG(fmt, args...)	do {		\
+		if(opt_debug < 2) break;	\
+		fprintf(stderr, fmt, ##args);	\
+		fprintf(stderr, " (%s:%d)\n",	\
+			__FILE__, __LINE__);	\
+	} while(0)
+