diff options
author | Daniel Willmann <dwillmann@sysmocom.de> | 2015-12-07 17:19:40 +0100 |
---|---|---|
committer | Daniel Willmann <dwillmann@sysmocom.de> | 2015-12-07 17:19:40 +0100 |
commit | 0e8ef67b7ab4811fd9b157244f0a6e056314cb2c (patch) | |
tree | 256fa94f83a8bc89ef31bca5bd552c5d7a2a2611 /src | |
parent | f3685c2a131756feb8c4f502e9d162aeaa9eb2fb (diff) |
hnbap_common: Add function to HNBAP generate initiating message
An earlier version was commented out, this function now works like
hnbap_generate_successful_outcome()
Diffstat (limited to 'src')
-rw-r--r-- | src/hnbap_common.c | 33 | ||||
-rw-r--r-- | src/hnbap_common.h | 5 |
2 files changed, 23 insertions, 15 deletions
diff --git a/src/hnbap_common.c b/src/hnbap_common.c index 02860a7..43d7c37 100644 --- a/src/hnbap_common.c +++ b/src/hnbap_common.c @@ -115,37 +115,40 @@ static struct msgb *hnbap_msgb_alloc(void) return msgb_alloc(1024, "HNBAP Tx"); } -#if 0 -ssize_t s1ap_generate_initiating_message(uint8_t ** buffer, - uint32_t * length, +struct msgb *hnbap_generate_initiating_message( 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_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_HNBAP_PDU, (void *)&pdu); + 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 ((encoded = - aper_encode_to_new_buffer(&asn_DEF_HNBAP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; + 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; } - *length = encoded; - return encoded; + msgb_put(msg, rval.encoded/8); + return msg; } -#endif struct msgb *hnbap_generate_successful_outcome( e_ProcedureCode procedureCode, diff --git a/src/hnbap_common.h b/src/hnbap_common.h index 17760fe..8726718 100644 --- a/src/hnbap_common.h +++ b/src/hnbap_common.h @@ -135,6 +135,11 @@ extern int asn1_xer_print; +struct msgb *hnbap_generate_initiating_message( + e_ProcedureCode procedureCode, + Criticality_t criticality, + asn_TYPE_descriptor_t * td, void *sptr); + struct msgb *hnbap_generate_successful_outcome( e_ProcedureCode procedureCode, Criticality_t criticality, |