diff --git a/nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h b/nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h index c4337dc2f2..0d1862d147 100644 --- a/nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h +++ b/nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h @@ -68,17 +68,20 @@ bool eq_param_response(const nfapi_nr_param_response_scf_t *unpacked_req, const bool eq_config_request(const nfapi_nr_config_request_scf_t *unpacked_req, const nfapi_nr_config_request_scf_t *req); bool eq_config_response(const nfapi_nr_config_response_scf_t *unpacked_req, const nfapi_nr_config_response_scf_t *req); bool eq_start_request(const nfapi_nr_start_request_scf_t *unpacked_req, const nfapi_nr_start_request_scf_t *req); +bool eq_start_response(const nfapi_nr_start_response_scf_t *unpacked_req, const nfapi_nr_start_response_scf_t *req); void free_param_request(nfapi_nr_param_request_scf_t *msg); void free_param_response(nfapi_nr_param_response_scf_t *msg); void free_config_request(nfapi_nr_config_request_scf_t *msg); void free_config_response(nfapi_nr_config_response_scf_t *msg); void free_start_request(nfapi_nr_start_request_scf_t *msg); +void free_start_response(nfapi_nr_start_response_scf_t *msg); void copy_param_request(const nfapi_nr_param_request_scf_t *src, nfapi_nr_param_request_scf_t *dst); void copy_param_response(const nfapi_nr_param_response_scf_t *src, nfapi_nr_param_response_scf_t *dst); void copy_config_request(const nfapi_nr_config_request_scf_t *src, nfapi_nr_config_request_scf_t *dst); void copy_config_response(const nfapi_nr_config_response_scf_t *src, nfapi_nr_config_response_scf_t *dst); void copy_start_request(const nfapi_nr_start_request_scf_t *src, nfapi_nr_start_request_scf_t *dst); +void copy_start_response(const nfapi_nr_start_response_scf_t *src, nfapi_nr_start_response_scf_t *dst); #endif // OPENAIRINTERFACE_NR_FAPI_P5_UTILS_H diff --git a/nfapi/open-nFAPI/fapi/src/nr_fapi_p5_utils.c b/nfapi/open-nFAPI/fapi/src/nr_fapi_p5_utils.c index 71b36e540b..82734cbf2f 100644 --- a/nfapi/open-nFAPI/fapi/src/nr_fapi_p5_utils.c +++ b/nfapi/open-nFAPI/fapi/src/nr_fapi_p5_utils.c @@ -375,6 +375,14 @@ bool eq_start_request(const nfapi_nr_start_request_scf_t *unpacked_req, const nf return true; } +bool eq_start_response(const nfapi_nr_start_response_scf_t *unpacked_req, const nfapi_nr_start_response_scf_t *req) +{ + EQ(unpacked_req->header.message_id, req->header.message_id); + EQ(unpacked_req->header.message_length, req->header.message_length); + EQ(unpacked_req->error_code, req->error_code); + return true; +} + void free_param_request(nfapi_nr_param_request_scf_t *msg) { if (msg->vendor_extension) { @@ -451,6 +459,13 @@ void free_start_request(nfapi_nr_start_request_scf_t *msg) } } +void free_start_response(nfapi_nr_start_response_scf_t *msg) +{ + if (msg->vendor_extension) { + free(msg->vendor_extension); + } +} + void copy_param_request(const nfapi_nr_param_request_scf_t *src, nfapi_nr_param_request_scf_t *dst) { dst->header.message_id = src->header.message_id; @@ -854,3 +869,16 @@ void copy_start_request(const nfapi_nr_start_request_scf_t *src, nfapi_nr_start_ copy_vendor_extension_value(&dst->vendor_extension, &src->vendor_extension); } } + +void copy_start_response(const nfapi_nr_start_response_scf_t *src, nfapi_nr_start_response_scf_t *dst) +{ + dst->header.message_id = src->header.message_id; + dst->header.message_length = src->header.message_length; + if (src->vendor_extension) { + dst->vendor_extension = calloc(1, sizeof(nfapi_vendor_extension_tlv_t)); + dst->vendor_extension->tag = src->vendor_extension->tag; + dst->vendor_extension->length = src->vendor_extension->length; + copy_vendor_extension_value(&dst->vendor_extension, &src->vendor_extension); + } + dst->error_code = src->error_code; +} diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c index 247b9fd987..30d9bbbc37 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c @@ -2104,7 +2104,7 @@ static uint8_t unpack_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, voi uint8_t unpack_nr_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) { nfapi_nr_start_response_scf_t *pNfapiMsg = (nfapi_nr_start_response_scf_t *)msg; - return (pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) + return (pull8(ppReadPackedMsg, (uint8_t *)&pNfapiMsg->error_code, end) && unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension))); } static uint8_t unpack_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {