diff options
author | Harald Welte <laforge@gnumonks.org> | 2015-12-16 20:17:26 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2015-12-16 20:17:26 +0100 |
commit | cbaaeefe008a2ace0eb3d6287c12f33d521cbf23 (patch) | |
tree | 1613fb7b6d46c39de2e6e436cdb1bf94d709e129 /src/ranap_common.c | |
parent | 08d5da664740432b6933220b094787da9ca90ab8 (diff) |
{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
Diffstat (limited to 'src/ranap_common.c')
-rw-r--r-- | src/ranap_common.c | 66 |
1 files changed, 37 insertions, 29 deletions
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 @@ static struct msgb *ranap_msgb_alloc(void) 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); + 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; + } - if (asn1_xer_print) - xer_fprint(stdout, &asn_DEF_RANAP_RAMAP_PDU, (void *)&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", + rval.failed_type->name); - if ((encoded = - aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; } - *length = encoded; - return encoded; + msgb_put(msg, rval.encoded/8); + + return msg; } -#endif struct msgb *ranap_generate_successful_outcome( e_RANAP_ProcedureCode procedureCode, @@ -102,36 +105,41 @@ struct msgb *ranap_generate_successful_outcome( 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); + 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; + } - if ((encoded = - aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; + 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; } - *length = encoded; + msgb_put(msg, rval.encoded/8); - return encoded; + return msg; } -#endif RANAP_IE_t *ranap_new_ie(RANAP_ProtocolIE_ID_t id, RANAP_Criticality_t criticality, |