aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2015-12-07 17:19:40 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2015-12-07 17:19:40 +0100
commit0e8ef67b7ab4811fd9b157244f0a6e056314cb2c (patch)
tree256fa94f83a8bc89ef31bca5bd552c5d7a2a2611 /src
parentf3685c2a131756feb8c4f502e9d162aeaa9eb2fb (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.c33
-rw-r--r--src/hnbap_common.h5
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,