{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
This commit is contained in:
Harald Welte 2015-12-16 20:17:26 +01:00
parent 08d5da6647
commit cbaaeefe00
6 changed files with 112 additions and 72 deletions

View File

@ -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);
if ((encoded =
aper_encode_to_new_buffer(&asn_DEF_HNBAP_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
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;
}
*length = encoded;
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;
}
return encoded;
msgb_put(msg, rval.encoded/8);
return msg;
}
#endif
IE_t *hnbap_new_ie(ProtocolIE_ID_t id,
Criticality_t criticality,

View File

@ -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);

View File

@ -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);
if (asn1_xer_print)
xer_fprint(stdout, &asn_DEF_RANAP_RAMAP_PDU, (void *)&pdu);
if ((encoded =
aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
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;
}
*length = encoded;
return encoded;
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_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);
if ((encoded =
aper_encode_to_new_buffer(&asn_DEF_RANAP_RANAP_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
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;
}
*length = encoded;
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;
}
return encoded;
msgb_put(msg, rval.encoded/8);
return msg;
}
#endif
RANAP_IE_t *ranap_new_ie(RANAP_ProtocolIE_ID_t id,
RANAP_Criticality_t criticality,

View File

@ -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);

View File

@ -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);
if ((encoded =
aper_encode_to_new_buffer(&asn_DEF_RUA_RUA_PDU, 0, &pdu,
(void **)buffer)) < 0) {
return -1;
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;
}
*length = encoded;
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;
}
return encoded;
msgb_put(msg, rval.encoded/8);
return msg;
}
#endif
RUA_IE_t *rua_new_ie(RUA_ProtocolIE_ID_t id,
RUA_Criticality_t criticality,

View File

@ -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);