aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2015-12-16 20:17:26 +0100
committerHarald Welte <laforge@gnumonks.org>2015-12-16 20:17:26 +0100
commitcbaaeefe008a2ace0eb3d6287c12f33d521cbf23 (patch)
tree1613fb7b6d46c39de2e6e436cdb1bf94d709e129
parent08d5da664740432b6933220b094787da9ca90ab8 (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.c43
-rw-r--r--src/hnbap_common.h6
-rw-r--r--src/ranap_common.c66
-rw-r--r--src/ranap_common.h10
-rw-r--r--src/rua_common.c43
-rw-r--r--src/rua_common.h6
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);