{hnbap,rua,ranap}_common.c: Reduce code duplicatioon

There used to be a lot of code duplication between the code to generate
initiating, successfulOutcome and unsuccessfulOutcome messages.  Try to
reduce that by callign a generic function.
diff --git a/src/ranap_common.c b/src/ranap_common.c
index e3472ea..0e2ef6a 100644
--- a/src/ranap_common.c
+++ b/src/ranap_common.c
@@ -35,28 +35,15 @@
 	return msgb_alloc(1024, "RANAP Tx");
 }
 
-struct msgb *ranap_generate_initiating_message(e_RANAP_ProcedureCode procedureCode,
-					  RANAP_Criticality_t criticality,
-					  asn_TYPE_descriptor_t *td, void *sptr)
+static struct msgb *_ranap_gen_msg(RANAP_RANAP_PDU_t *pdu)
 {
-	RANAP_RANAP_PDU_t pdu;
 	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;
-	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);
+	if (!msg)
 		return NULL;
-	}
 
-	rval = aper_encode_to_buffer(&asn_DEF_RANAP_RANAP_PDU, &pdu,
+	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",
@@ -69,40 +56,48 @@
 	return msg;
 }
 
+struct msgb *ranap_generate_initiating_message(e_RANAP_ProcedureCode procedureCode,
+					  RANAP_Criticality_t criticality,
+					  asn_TYPE_descriptor_t *td, void *sptr)
+{
+	RANAP_RANAP_PDU_t pdu;
+	int rc;
+
+	memset(&pdu, 0, sizeof(pdu));
+
+	pdu.present = RANAP_RANAP_PDU_PR_initiatingMessage;
+	pdu.choice.initiatingMessage.procedureCode = procedureCode;
+	pdu.choice.initiatingMessage.criticality = criticality;
+	rc = ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ANY_fromType_aper\n");
+		return NULL;
+	}
+
+	return _ranap_gen_msg(&pdu);
+}
+
 struct msgb *ranap_generate_successful_outcome(
 					   e_RANAP_ProcedureCode procedureCode,
 					   RANAP_Criticality_t criticality,
 					   asn_TYPE_descriptor_t * td,
 					   void *sptr)
 {
-
 	RANAP_RANAP_PDU_t pdu;
-	struct msgb *msg = ranap_msgb_alloc();
-	asn_enc_rval_t rval;
 	int rc;
 
 	memset(&pdu, 0, sizeof(pdu));
+
 	pdu.present = RANAP_RANAP_PDU_PR_successfulOutcome;
 	pdu.choice.successfulOutcome.procedureCode = procedureCode;
 	pdu.choice.successfulOutcome.criticality = criticality;
 	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;
 	}
 
-	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;
-	}
-
-	msgb_put(msg, rval.encoded/8);
-
-	return msg;
+	return _ranap_gen_msg(&pdu);
 }
 
 struct msgb *ranap_generate_unsuccessful_outcome(
@@ -112,8 +107,6 @@
 					void *sptr)
 {
 	RANAP_RANAP_PDU_t pdu;
-	struct msgb *msg = ranap_msgb_alloc();
-	asn_enc_rval_t rval;
 	int rc;
 
 	memset(&pdu, 0, sizeof(pdu));
@@ -124,21 +117,10 @@
 	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;
 	}
 
-	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;
-	}
-
-	msgb_put(msg, rval.encoded/8);
-
-	return msg;
+	return _ranap_gen_msg(&pdu);
 }
 
 RANAP_IE_t *ranap_new_ie(RANAP_ProtocolIE_ID_t id,