{rua,hnbap,ranap}_common: Add missing encoding functions

We used to only have those generator functions that we needed for
the existing hnbgw code; Implement the missing encoders
diff --git a/src/hnbap_common.c b/src/hnbap_common.c
index 43d7c37..6c5812e 100644
--- a/src/hnbap_common.c
+++ b/src/hnbap_common.c
@@ -186,36 +186,41 @@
 	return msg;
 }
 
-#if 0
-ssize_t s1ap_generate_unsuccessful_outcome(uint8_t ** buffer,
-					    uint32_t * length,
-					    e_ProcedureCode procedureCode,
-					    Criticality_t criticality,
-					    asn_TYPE_descriptor_t * td,
-					    void *sptr)
+struct msgb *hnbap_generate_unsuccessful_outcome(
+					   e_ProcedureCode procedureCode,
+					   Criticality_t criticality,
+					   asn_TYPE_descriptor_t * td,
+					   void *sptr)
 {
 
 	HNBAP_PDU_t pdu;
-	ssize_t encoded;
+	struct msgb *msg = hnbap_msgb_alloc();
+	asn_enc_rval_t rval;
+	int rc;
 
 	memset(&pdu, 0, sizeof(HNBAP_PDU_t));
-
 	pdu.present = HNBAP_PDU_PR_unsuccessfulOutcome;
-	pdu.choice.successfulOutcome.procedureCode = procedureCode;
-	pdu.choice.successfulOutcome.criticality = criticality;
-	ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
-
-	if ((encoded =
-	     aper_encode_to_new_buffer(&asn_DEF_HNBAP_PDU, 0, &pdu,
-				       (void **)buffer)) < 0) {
-		return -1;
+	pdu.choice.unsuccessfulOutcome.procedureCode = procedureCode;
+	pdu.choice.unsuccessfulOutcome.criticality = criticality;
+	rc = ANY_fromType_aper(&pdu.choice.unsuccessfulOutcome.value, td, sptr);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ANY_fromType_aper\n");
+		msgb_free(msg);
+		return NULL;
 	}
 
-	*length = encoded;
+	rval = aper_encode_to_buffer(&asn_DEF_HNBAP_PDU, &pdu,
+				     msg->data, msgb_tailroom(msg));
+	if (rval.encoded < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error encoding type %s\n", rval.failed_type->name);
+		msgb_free(msg);
+		return NULL;
+	}
 
-	return encoded;
+	msgb_put(msg, rval.encoded/8);
+
+	return msg;
 }
-#endif
 
 IE_t *hnbap_new_ie(ProtocolIE_ID_t id,
 		   Criticality_t criticality,
diff --git a/src/hnbap_common.h b/src/hnbap_common.h
index 8726718..bd8277b 100644
--- a/src/hnbap_common.h
+++ b/src/hnbap_common.h
@@ -146,6 +146,12 @@
 					   asn_TYPE_descriptor_t * td,
 					   void *sptr);
 
+struct msgb *hnbap_generate_unsuccessful_outcome(
+					   e_ProcedureCode procedureCode,
+					   Criticality_t criticality,
+					   asn_TYPE_descriptor_t * td,
+					   void *sptr);
+
 IE_t *hnbap_new_ie(ProtocolIE_ID_t id, Criticality_t criticality,
 		  asn_TYPE_descriptor_t *type, void *sptr);
 
diff --git a/src/ranap_common.c b/src/ranap_common.c
index ce97899..e3472ea 100644
--- a/src/ranap_common.c
+++ b/src/ranap_common.c
@@ -35,36 +35,39 @@
 	return msgb_alloc(1024, "RANAP Tx");
 }
 
-#if 0
-ssize_t ranap_generate_initiating_message(uint8_t ** buffer,
-					  uint32_t * length,
-					  e_RANAP_ProcedureCode procedureCode,
+struct msgb *ranap_generate_initiating_message(e_RANAP_ProcedureCode procedureCode,
 					  RANAP_Criticality_t criticality,
-					  asn_TYPE_descriptor_t * td, void *sptr)
+					  asn_TYPE_descriptor_t *td, void *sptr)
 {
 	RANAP_RANAP_PDU_t pdu;
-	ssize_t encoded;
+	struct msgb *msg = ranap_msgb_alloc();
+	asn_enc_rval_t rval;
+	int rc;
 
 	memset(&pdu, 0, sizeof(pdu));
 
 	pdu.present = RANAP_RANAP_PDU_PR_initiatingMessage;
 	pdu.choice.initiatingMessage.procedureCode = procedureCode;
 	pdu.choice.initiatingMessage.criticality = criticality;
-	ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
-
-	if (asn1_xer_print)
-		xer_fprint(stdout, &asn_DEF_RANAP_RAMAP_PDU, (void *)&pdu);
-
-	if ((encoded =
-	     aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu,
-				       (void **)buffer)) < 0) {
-		return -1;
+	rc = ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ANY_fromType_aper\n");
+		msgb_free(msg);
+		return NULL;
 	}
 
-	*length = encoded;
-	return encoded;
+	rval = aper_encode_to_buffer(&asn_DEF_RANAP_RANAP_PDU, &pdu,
+				       msg->data, msgb_tailroom(msg));
+	if (rval.encoded < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error encoding type: %s\n",
+				rval.failed_type->name);
+
+	}
+
+	msgb_put(msg, rval.encoded/8);
+
+	return msg;
 }
-#endif
 
 struct msgb *ranap_generate_successful_outcome(
 					   e_RANAP_ProcedureCode procedureCode,
@@ -102,36 +105,41 @@
 	return msg;
 }
 
-#if 0
-ssize_t ranap_generate_unsuccessful_outcome(uint8_t ** buffer,
-					uint32_t * length,
+struct msgb *ranap_generate_unsuccessful_outcome(
 					e_RANAP_ProcedureCode procedureCode,
 					RANAP_Criticality_t criticality,
 					asn_TYPE_descriptor_t * td,
 					void *sptr)
 {
-
 	RANAP_RANAP_PDU_t pdu;
-	ssize_t encoded;
+	struct msgb *msg = ranap_msgb_alloc();
+	asn_enc_rval_t rval;
+	int rc;
 
 	memset(&pdu, 0, sizeof(pdu));
 
 	pdu.present = RANAP_RANAP_PDU_PR_unsuccessfulOutcome;
 	pdu.choice.successfulOutcome.procedureCode = procedureCode;
 	pdu.choice.successfulOutcome.criticality = criticality;
-	ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
-
-	if ((encoded =
-	     aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu,
-				       (void **)buffer)) < 0) {
-		return -1;
+	rc = ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ANY_fromType_aper\n");
+		msgb_free(msg);
+		return NULL;
 	}
 
-	*length = encoded;
+	rval = aper_encode_to_buffer(&asn_DEF_RANAP_RANAP_PDU, &pdu,
+				     msg->data, msgb_tailroom(msg));
+	if (rval.encoded < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error encoding type %s\n", rval.failed_type->name);
+		msgb_free(msg);
+		return NULL;
+	}
 
-	return encoded;
+	msgb_put(msg, rval.encoded/8);
+
+	return msg;
 }
-#endif
 
 RANAP_IE_t *ranap_new_ie(RANAP_ProtocolIE_ID_t id,
 			 RANAP_Criticality_t criticality,
diff --git a/src/ranap_common.h b/src/ranap_common.h
index 4ffa613..84b4976 100644
--- a/src/ranap_common.h
+++ b/src/ranap_common.h
@@ -591,12 +591,22 @@
 
 extern int asn1_xer_print;
 
+struct msgb *ranap_generate_initiating_message(e_RANAP_ProcedureCode procedureCode,
+					  RANAP_Criticality_t criticality,
+					  asn_TYPE_descriptor_t *td, void *sptr);
+
 struct msgb *ranap_generate_successful_outcome(
 					   e_RANAP_ProcedureCode procedureCode,
 					   RANAP_Criticality_t criticality,
 					   asn_TYPE_descriptor_t * td,
 					   void *sptr);
 
+struct msgb *ranap_generate_unsuccessful_outcome(
+					e_RANAP_ProcedureCode procedureCode,
+					RANAP_Criticality_t criticality,
+					asn_TYPE_descriptor_t * td,
+					void *sptr);
+
 RANAP_IE_t *ranap_new_ie(RANAP_ProtocolIE_ID_t id, RANAP_Criticality_t criticality,
 			 asn_TYPE_descriptor_t *type, void *sptr);
 
diff --git a/src/rua_common.c b/src/rua_common.c
index 554896b..3a5877c 100644
--- a/src/rua_common.c
+++ b/src/rua_common.c
@@ -165,36 +165,41 @@
 	return msg;
 }
 
-#if 0
-ssize_t rua_generate_unsuccessful_outcome(uint8_t ** buffer,
-					  uint32_t * length,
-					  e_RUA_ProcedureCode procedureCode,
-					  RUA_Criticality_t criticality,
-					  asn_TYPE_descriptor_t * td,
-					  void *sptr)
+struct msgb *rua_generate_unsuccessful_outcome(
+					   e_RUA_ProcedureCode procedureCode,
+					   RUA_Criticality_t criticality,
+					   asn_TYPE_descriptor_t * td,
+					   void *sptr)
 {
 
 	RUA_RUA_PDU_t pdu;
-	ssize_t encoded;
+	struct msgb *msg = rua_msgb_alloc();
+	asn_enc_rval_t rval;
+	int rc;
 
 	memset(&pdu, 0, sizeof(pdu));
-
 	pdu.present = RUA_RUA_PDU_PR_unsuccessfulOutcome;
-	pdu.choice.successfulOutcome.procedureCode = procedureCode;
-	pdu.choice.successfulOutcome.criticality = criticality;
-	ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
-
-	if ((encoded =
-	     aper_encode_to_new_buffer(&asn_DEF_RUA_RUA_PDU, 0, &pdu,
-				       (void **)buffer)) < 0) {
-		return -1;
+	pdu.choice.unsuccessfulOutcome.procedureCode = procedureCode;
+	pdu.choice.unsuccessfulOutcome.criticality = criticality;
+	rc = ANY_fromType_aper(&pdu.choice.unsuccessfulOutcome.value, td, sptr);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ANY_fromType_aper\n");
+		msgb_free(msg);
+		return NULL;
 	}
 
-	*length = encoded;
+	rval = aper_encode_to_buffer(&asn_DEF_RUA_RUA_PDU, &pdu,
+				     msg->data, msgb_tailroom(msg));
+	if (rval.encoded < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error encoding type %s\n", rval.failed_type->name);
+		msgb_free(msg);
+		return NULL;
+	}
 
-	return encoded;
+	msgb_put(msg, rval.encoded/8);
+
+	return msg;
 }
-#endif
 
 RUA_IE_t *rua_new_ie(RUA_ProtocolIE_ID_t id,
 		     RUA_Criticality_t criticality,
diff --git a/src/rua_common.h b/src/rua_common.h
index 0c9e786..fa4ba83 100644
--- a/src/rua_common.h
+++ b/src/rua_common.h
@@ -59,6 +59,12 @@
 					   asn_TYPE_descriptor_t * td,
 					   void *sptr);
 
+struct msgb *rua_generate_unsuccessful_outcome(
+					   e_RUA_ProcedureCode procedureCode,
+					   RUA_Criticality_t criticality,
+					   asn_TYPE_descriptor_t * td,
+					   void *sptr);
+
 RUA_IE_t *rua_new_ie(RUA_ProtocolIE_ID_t id, RUA_Criticality_t criticality,
 		     asn_TYPE_descriptor_t *type, void *sptr);