[SMF] Gy: Check Multiple-Services-Credit-Control Result-Code

This commit is contained in:
Pau Espin 2024-03-19 17:55:15 +01:00 committed by Sukchan Lee
parent e1820e4e54
commit 12158eebb8
3 changed files with 15 additions and 0 deletions

View File

@ -187,6 +187,8 @@ typedef struct ogs_diam_gy_message_s {
uint32_t time_threshold;
uint32_t volume_threshold;
ogs_diam_gy_service_unit_t granted;
uint32_t result_code;
uint32_t *err;
} cca;
};
} ogs_diam_gy_message_t;

View File

@ -178,6 +178,12 @@ uint32_t smf_gy_handle_cca_update_request(
return gy_message->err ? *gy_message->err :
ER_DIAMETER_AUTHENTICATION_REJECTED;
}
if (gy_message->cca.result_code != ER_DIAMETER_SUCCESS) {
ogs_warn("Gy CCA Update Diameter Multiple-Services-Credit-Control Result-Code=%u",
gy_message->cca.result_code);
return gy_message->cca.err ? *gy_message->cca.err :
ER_DIAMETER_AUTHENTICATION_REJECTED;
}
bearer = smf_default_bearer_in_sess(sess);
ogs_assert(bearer);

View File

@ -1003,6 +1003,9 @@ static void smf_gy_cca_cb(void *data, struct msg **msg)
/* Set Credit Control Command */
gy_message->cmd_code = OGS_DIAM_GY_CMD_CODE_CREDIT_CONTROL;
/* Initialize some values: */
gy_message->cca.result_code = ER_DIAMETER_SUCCESS;
/* Value of Result Code */
ret = fd_msg_search_avp(*msg, ogs_diam_result_code, &avp);
ogs_assert(ret == 0);
@ -1114,6 +1117,10 @@ static void smf_gy_cca_cb(void *data, struct msg **msg)
ret = fd_msg_avp_hdr(avpch1, &hdr);
ogs_assert(ret == 0);
switch (hdr->avp_code) {
case AC_RESULT_CODE:
gy_message->cca.result_code = hdr->avp_value->u32;
gy_message->cca.err = &gy_message->cca.result_code;
break;
case OGS_DIAM_GY_AVP_CODE_GRANTED_SERVICE_UNIT:
rv = decode_granted_service_unit(
&gy_message->cca.granted, avpch1, &error);