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 | |
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
-rw-r--r-- | src/hnbap_common.c | 43 | ||||
-rw-r--r-- | src/hnbap_common.h | 6 | ||||
-rw-r--r-- | src/ranap_common.c | 66 | ||||
-rw-r--r-- | src/ranap_common.h | 10 | ||||
-rw-r--r-- | src/rua_common.c | 43 | ||||
-rw-r--r-- | src/rua_common.h | 6 |
6 files changed, 107 insertions, 67 deletions
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 @@ struct msgb *hnbap_generate_successful_outcome( 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); + 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; + } - 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; + msgb_put(msg, rval.encoded/8); - return encoded; + 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 @@ struct msgb *hnbap_generate_successful_outcome( 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 @@ 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, 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 @@ struct msgb *rua_generate_successful_outcome( 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); + 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; + } - if ((encoded = - aper_encode_to_new_buffer(&asn_DEF_RUA_RUA_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; + 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; } - *length = encoded; + msgb_put(msg, rval.encoded/8); - return encoded; + 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 @@ struct msgb *rua_generate_successful_outcome( 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); |