/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RUA-IEs"
 * 	found in "../../asn1/rua/RUA-IEs.asn"
 */

#ifndef	_RUA_CauseProtocol_H_
#define	_RUA_CauseProtocol_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RUA_CauseProtocol {
	RUA_CauseProtocol_transfer_syntax_error	= 0,
	RUA_CauseProtocol_abstract_syntax_error_reject	= 1,
	RUA_CauseProtocol_abstract_syntax_error_ignore_and_notify	= 2,
	RUA_CauseProtocol_message_not_compatible_with_receiver_state	= 3,
	RUA_CauseProtocol_semantic_error	= 4,
	RUA_CauseProtocol_unspecified	= 5,
	RUA_CauseProtocol_abstract_syntax_error_falsely_constructed_message	= 6
	/*
	 * Enumeration is extensible
	 */
} e_RUA_CauseProtocol;

/* RUA_CauseProtocol */
typedef long	 RUA_CauseProtocol_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RUA_CauseProtocol;
asn_struct_free_f RUA_CauseProtocol_free;
asn_struct_print_f RUA_CauseProtocol_print;
asn_constr_check_f RUA_CauseProtocol_constraint;
ber_type_decoder_f RUA_CauseProtocol_decode_ber;
der_type_encoder_f RUA_CauseProtocol_encode_der;
xer_type_decoder_f RUA_CauseProtocol_decode_xer;
xer_type_encoder_f RUA_CauseProtocol_encode_xer;
per_type_decoder_f RUA_CauseProtocol_decode_uper;
per_type_encoder_f RUA_CauseProtocol_encode_uper;
per_type_decoder_f RUA_CauseProtocol_decode_aper;
per_type_encoder_f RUA_CauseProtocol_encode_aper;

#ifdef __cplusplus
}
#endif

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