diff --git a/src/rua/RUA_DirectTransfer.c b/src/rua/RUA_DirectTransfer.c
new file mode 100644
index 0000000..54ed4a5
--- /dev/null
+++ b/src/rua/RUA_DirectTransfer.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RUA-PDU"
+ * 	found in "../../asn1/rua/RUA-PDU.asn"
+ */
+
+#include "RUA_DirectTransfer.h"
+
+static int
+memb_directTransfer_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_directTransfer_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_directTransfer_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_directTransfer_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RUA_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_directTransfer_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_directTransfer_ies_specs_2 = {
+	sizeof(struct directTransfer_ies),
+	offsetof(struct directTransfer_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_directTransfer_ies_2 = {
+	"directTransfer-ies",
+	"directTransfer-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_directTransfer_ies_tags_2,
+	sizeof(asn_DEF_directTransfer_ies_tags_2)
+		/sizeof(asn_DEF_directTransfer_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_directTransfer_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_directTransfer_ies_tags_2)
+		/sizeof(asn_DEF_directTransfer_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_directTransfer_ies_constr_2,
+	asn_MBR_directTransfer_ies_2,
+	1,	/* Single element */
+	&asn_SPC_directTransfer_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RUA_DirectTransfer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RUA_DirectTransfer, directTransfer_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_directTransfer_ies_2,
+		memb_directTransfer_ies_constraint_1,
+		&asn_PER_memb_directTransfer_ies_constr_2,
+		0,
+		"directTransfer-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RUA_DirectTransfer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RUA_DirectTransfer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* directTransfer-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RUA_DirectTransfer_specs_1 = {
+	sizeof(struct RUA_DirectTransfer),
+	offsetof(struct RUA_DirectTransfer, _asn_ctx),
+	asn_MAP_RUA_DirectTransfer_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RUA_DirectTransfer = {
+	"RUA_DirectTransfer",
+	"RUA_DirectTransfer",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RUA_DirectTransfer_tags_1,
+	sizeof(asn_DEF_RUA_DirectTransfer_tags_1)
+		/sizeof(asn_DEF_RUA_DirectTransfer_tags_1[0]), /* 1 */
+	asn_DEF_RUA_DirectTransfer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RUA_DirectTransfer_tags_1)
+		/sizeof(asn_DEF_RUA_DirectTransfer_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RUA_DirectTransfer_1,
+	1,	/* Elements count */
+	&asn_SPC_RUA_DirectTransfer_specs_1	/* Additional specs */
+};
+
