# HG changeset patch # User Sebastien Decugis # Date 1272000806 -32400 # Node ID c94e4ea39f971988db7e88ac9f702353d986a15b # Parent 17739001c00ea9b70f288df92068db1b0460ee92 Add missing mandatory AVP diff -r 17739001c00e -r c94e4ea39f97 extensions/app_radgw/rgwx_acct.c --- a/extensions/app_radgw/rgwx_acct.c Fri Apr 23 14:13:30 2010 +0900 +++ b/extensions/app_radgw/rgwx_acct.c Fri Apr 23 14:33:26 2010 +0900 @@ -51,6 +51,7 @@ /* The state we keep for this plugin */ struct rgwp_config { struct { + struct dict_object * Accounting_Record_Number; /* Accounting-Record-Number */ struct dict_object * Accounting_Record_Type; /* Accounting-Record-Type */ struct dict_object * Acct_Application_Id; /* Acct-Application-Id */ struct dict_object * Acct_Delay_Time; /* Acct-Delay-Time */ @@ -174,6 +175,7 @@ new->confstr = conffile; /* Resolve all dictionary objects we use */ + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Accounting-Record-Number", &new->dict.Accounting_Record_Number, ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Accounting-Record-Type", &new->dict.Accounting_Record_Type, ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Acct-Application-Id", &new->dict.Acct_Application_Id, ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Acct-Delay-Time", &new->dict.Acct_Delay_Time, ENOENT) ); @@ -287,6 +289,7 @@ int idx; int send_str=0; uint32_t str_cause=0; + uint32_t e2eid = 0; application_id_t auth_appl=0; int got_id = 0; uint32_t status_type; @@ -427,6 +430,9 @@ value.i32 = header->msg_appl; CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) ); + + /* save the end to end id */ + e2eid = header->msg_eteid; } /* Convert the RADIUS attributes, as they appear in the message */ @@ -735,6 +741,14 @@ CHECK_FCT( fd_msg_avp_new ( cs->dict.Accounting_Record_Type, 0, &avp ) ); CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) ); + + /* While here, we also add the Accouting-Record-Number AVP. + We don't have a dedicated counter nor a state, so we just use the Diameter message End-to-end id here, which fits the conditions on the value. */ + CHECK_FCT( fd_msg_avp_new ( cs->dict.Accounting_Record_Number, 0, &avp ) ); + value.u32 = e2eid; + CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); + CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) ); + break; case RADIUS_ATTR_ACCT_DELAY_TIME: