X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=e2ap%2Fwrapper.c;h=f31cd941be11980f0dc39e244f14baac34a35d2d;hb=f0b69ac0a1a43deabbc56e7fbcbace995e03f31c;hp=61c13a960e24e6c92acac24b3fb8c9411fa7ae4e;hpb=fbc56f981b7bd3387f7326401ceccbf31893a2ed;p=ric-plt%2Fsubmgr.git diff --git a/e2ap/wrapper.c b/e2ap/wrapper.c index 61c13a9..f31cd94 100644 --- a/e2ap/wrapper.c +++ b/e2ap/wrapper.c @@ -1,116 +1,208 @@ -#include -#include "wrapper.h" - -ssize_t encode_RIC_subscription_request(RICsubscriptionRequest_t* pdu, void* buffer, size_t buf_size) -{ - - asn_enc_rval_t encode_result; - encode_result = aper_encode_to_buffer(&asn_DEF_RICsubscriptionRequest, NULL, pdu, buffer, buf_size); - if(encode_result.encoded == -1) { - return -1; - } - return encode_result.encoded; -} - -RICsubscriptionRequest_t* decode_RIC_subscription_request(const void *buffer, size_t buf_size) -{ - asn_dec_rval_t decode_result; - RICsubscriptionRequest_t *pdu = 0; - decode_result = aper_decode_complete(NULL, &asn_DEF_RICsubscriptionRequest, (void **)&pdu, buffer, buf_size); - if(decode_result.code == RC_OK) { - return pdu; - } else { - ASN_STRUCT_FREE(asn_DEF_RICsubscriptionRequest, pdu); - return 0; - } -} - -long e2ap_get_ric_subscription_request_sequence_number(void *buffer, size_t buf_size) -{ - RICsubscriptionRequest_t *pdu = decode_RIC_subscription_request(buffer, buf_size); - if(pdu != NULL) - { - for (int i = 0; i < pdu->protocolIEs.list.count; ++i ) - { - if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) - { - return pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; - } - } - } - return -1; -} - -ssize_t e2ap_set_ric_subscription_request_sequence_number(void *buffer, size_t buf_size, long sequence_number) -{ - RICsubscriptionRequest_t *pdu = decode_RIC_subscription_request(buffer, buf_size); - if(pdu != NULL) - { - for (int i = 0; i < pdu->protocolIEs.list.count; ++i ) - { - if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) - { - pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; - return encode_RIC_subscription_request(pdu, buffer, buf_size); - } - } - } - return -1; -} - -ssize_t encode_RIC_subscription_response(RICsubscriptionResponse_t* pdu, void* buffer, size_t buf_size) -{ - - asn_enc_rval_t encode_result; - encode_result = aper_encode_to_buffer(&asn_DEF_RICsubscriptionResponse, NULL, pdu, buffer, buf_size); - if(encode_result.encoded == -1) { - return -1; - } - return encode_result.encoded; -} - -RICsubscriptionResponse_t* decode_RIC_subscription_response(const void *buffer, size_t buf_size) -{ - asn_dec_rval_t decode_result; - RICsubscriptionResponse_t *pdu = 0; - decode_result = aper_decode_complete(NULL, &asn_DEF_RICsubscriptionResponse, (void **)&pdu, buffer, buf_size); - if(decode_result.code == RC_OK) { - return pdu; - } else { - ASN_STRUCT_FREE(asn_DEF_RICsubscriptionResponse, pdu); - return 0; - } -} - -long e2ap_get_ric_subscription_response_sequence_number(void *buffer, size_t buf_size) -{ - RICsubscriptionResponse_t *pdu = decode_RIC_subscription_response(buffer, buf_size); - if(pdu != NULL) - { - for (int i = 0; i < pdu->protocolIEs.list.count; ++i ) - { - if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) - { - return pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; - } - } - } - return -1; -} - -ssize_t e2ap_set_ric_subscription_response_sequence_number(void *buffer, size_t buf_size, long sequence_number) -{ - RICsubscriptionResponse_t *pdu = decode_RIC_subscription_response(buffer, buf_size); - if(pdu != NULL) - { - for (int i = 0; i < pdu->protocolIEs.list.count; ++i ) - { - if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) - { - pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; - return encode_RIC_subscription_response(pdu, buffer, buf_size); - } - } - } - return -1; -} +#include +#include "wrapper.h" + +size_t encode_E2AP_PDU(E2AP_PDU_t* pdu, void* buffer, size_t buf_size) +{ + asn_enc_rval_t encode_result; + encode_result = aper_encode_to_buffer(&asn_DEF_E2AP_PDU, NULL, pdu, buffer, buf_size); + if(encode_result.encoded == -1) { + return -1; + } + return encode_result.encoded; +} + +E2AP_PDU_t* decode_E2AP_PDU(const void* buffer, size_t buf_size) +{ + asn_dec_rval_t decode_result; + E2AP_PDU_t *pdu = 0; + decode_result = aper_decode_complete(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, buf_size); + if(decode_result.code == RC_OK) { + return pdu; + } else { + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return 0; + } +} + +long e2ap_get_ric_subscription_request_sequence_number(void *buffer, size_t buf_size) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage) + { + InitiatingMessageE2_t* initiatingMessage = pdu->choice.initiatingMessage; + if ( initiatingMessage->procedureCode == ProcedureCode_id_ricSubscription + && initiatingMessage->value.present == InitiatingMessageE2__value_PR_RICsubscriptionRequest) + { + RICsubscriptionRequest_t *ric_subscription_request = &(initiatingMessage->value.choice.RICsubscriptionRequest); + for (int i = 0; i < ric_subscription_request->protocolIEs.list.count; ++i ) + { + if ( ric_subscription_request->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + return ric_subscription_request->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; + } + } + } + } + return -1; +} + +ssize_t e2ap_set_ric_subscription_request_sequence_number(void *buffer, size_t buf_size, long sequence_number) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage) + { + InitiatingMessageE2_t* initiatingMessage = pdu->choice.initiatingMessage; + if ( initiatingMessage->procedureCode == ProcedureCode_id_ricSubscription + && initiatingMessage->value.present == InitiatingMessageE2__value_PR_RICsubscriptionRequest) + { + RICsubscriptionRequest_t *ricSubscriptionRequest = &initiatingMessage->value.choice.RICsubscriptionRequest; + for (int i = 0; i < ricSubscriptionRequest->protocolIEs.list.count; ++i ) + { + if ( ricSubscriptionRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + ricSubscriptionRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; + return encode_E2AP_PDU(pdu, buffer, buf_size); + } + } + } + } + return -1; +} + +/* RICsubscriptionResponse */ +long e2ap_get_ric_subscription_response_sequence_number(void *buffer, size_t buf_size) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome ) + { + SuccessfulOutcomeE2_t* successfulOutcome = pdu->choice.successfulOutcome; + if ( successfulOutcome->procedureCode == ProcedureCode_id_ricSubscription + && successfulOutcome->value.present == SuccessfulOutcomeE2__value_PR_RICsubscriptionResponse) + { + RICsubscriptionResponse_t *ricSubscriptionResponse = &successfulOutcome->value.choice.RICsubscriptionResponse; + for (int i = 0; i < ricSubscriptionResponse->protocolIEs.list.count; ++i ) + { + if ( ricSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + return ricSubscriptionResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; + } + } + } + } + return -1; +} + +ssize_t e2ap_set_ric_subscription_response_sequence_number(void *buffer, size_t buf_size, long sequence_number) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome ) + { + SuccessfulOutcomeE2_t* successfulOutcome = pdu->choice.successfulOutcome; + if ( successfulOutcome->procedureCode == ProcedureCode_id_ricSubscription + && successfulOutcome->value.present == SuccessfulOutcomeE2__value_PR_RICsubscriptionResponse) + { + RICsubscriptionResponse_t *ricSubscriptionResponse = &successfulOutcome->value.choice.RICsubscriptionResponse; + for (int i = 0; i < ricSubscriptionResponse->protocolIEs.list.count; ++i ) + { + if ( ricSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + ricSubscriptionResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; + return encode_E2AP_PDU(pdu, buffer, buf_size); + } + } + } + } + return -1; +} + +/* RICsubscriptionDeleteRequest */ +long e2ap_get_ric_subscription_delete_request_sequence_number(void *buffer, size_t buf_size) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage ) + { + InitiatingMessageE2_t* initiatingMessage = pdu->choice.initiatingMessage; + if ( initiatingMessage->procedureCode == ProcedureCode_id_ricSubscriptionDelete + && initiatingMessage->value.present == InitiatingMessageE2__value_PR_RICsubscriptionDeleteRequest ) + { + RICsubscriptionDeleteRequest_t *subscriptionDeleteRequest = &initiatingMessage->value.choice.RICsubscriptionDeleteRequest; + for (int i = 0; i < subscriptionDeleteRequest->protocolIEs.list.count; ++i ) + { + if ( subscriptionDeleteRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + return subscriptionDeleteRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; + } + } + } + } + return -1; +} + +ssize_t e2ap_set_ric_subscription_delete_request_sequence_number(void *buffer, size_t buf_size, long sequence_number) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage ) + { + InitiatingMessageE2_t* initiatingMessage = pdu->choice.initiatingMessage; + if ( initiatingMessage->procedureCode == ProcedureCode_id_ricSubscriptionDelete + && initiatingMessage->value.present == InitiatingMessageE2__value_PR_RICsubscriptionDeleteRequest ) + { + RICsubscriptionDeleteRequest_t* subscriptionDeleteRequest = &initiatingMessage->value.choice.RICsubscriptionDeleteRequest; + for (int i = 0; i < subscriptionDeleteRequest->protocolIEs.list.count; ++i ) + { + if ( subscriptionDeleteRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + subscriptionDeleteRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; + return encode_E2AP_PDU(pdu, buffer, buf_size); + } + } + } + } + return -1; +} + +/* RICsubscriptionDeleteResponse */ +long e2ap_get_ric_subscription_delete_response_sequence_number(void *buffer, size_t buf_size) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome ) + { + SuccessfulOutcomeE2_t* successfulOutcome = pdu->choice.successfulOutcome; + if ( successfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete + && successfulOutcome->value.present == SuccessfulOutcomeE2__value_PR_RICsubscriptionDeleteResponse ) + { + RICsubscriptionDeleteResponse_t* subscriptionDeleteResponse = &successfulOutcome->value.choice.RICsubscriptionDeleteResponse; + for (int i = 0; i < subscriptionDeleteResponse->protocolIEs.list.count; ++i ) + { + if ( subscriptionDeleteResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + return subscriptionDeleteResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber; + } + } + } + } + return -1; +} + +ssize_t e2ap_set_ric_subscription_delete_response_sequence_number(void *buffer, size_t buf_size, long sequence_number) +{ + E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size); + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome ) + { + SuccessfulOutcomeE2_t* successfulOutcome = pdu->choice.successfulOutcome; + if ( successfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete + && successfulOutcome->value.present == SuccessfulOutcomeE2__value_PR_RICsubscriptionDeleteResponse ) + { + RICsubscriptionDeleteResponse_t* subscriptionDeleteResponse; + for (int i = 0; i < subscriptionDeleteResponse->protocolIEs.list.count; ++i ) + { + if ( subscriptionDeleteResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID ) + { + subscriptionDeleteResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number; + return encode_E2AP_PDU(pdu, buffer, buf_size); + } + } + } + } + return -1; +}