/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-PDU"
 * 	found in "../../asn1/ranap/RANAP-PDU.asn"
 */

#ifndef	_RANAP_RANAP_PDU_H_
#define	_RANAP_RANAP_PDU_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/ranap/RANAP_InitiatingMessage.h>
#include <osmocom/ranap/RANAP_SuccessfulOutcome.h>
#include <osmocom/ranap/RANAP_UnsuccessfulOutcome.h>
#include <osmocom/ranap/RANAP_Outcome.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_RANAP_PDU_PR {
	RANAP_RANAP_PDU_PR_NOTHING,	/* No components present */
	RANAP_RANAP_PDU_PR_initiatingMessage,
	RANAP_RANAP_PDU_PR_successfulOutcome,
	RANAP_RANAP_PDU_PR_unsuccessfulOutcome,
	RANAP_RANAP_PDU_PR_outcome,
	/* Extensions may appear below */
	
} RANAP_RANAP_PDU_PR;

/* RANAP_RANAP-PDU */
typedef struct RANAP_RANAP_PDU {
	RANAP_RANAP_PDU_PR present;
	union RANAP_RANAP_PDU_u {
		RANAP_InitiatingMessage_t	 initiatingMessage;
		RANAP_SuccessfulOutcome_t	 successfulOutcome;
		RANAP_UnsuccessfulOutcome_t	 unsuccessfulOutcome;
		RANAP_Outcome_t	 outcome;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_RANAP_PDU_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_RANAP_PDU;

#ifdef __cplusplus
}
#endif

#endif	/* _RANAP_RANAP_PDU_H_ */
#include <asn_internal.h>
