Hi

I've an accounting problem, i think you could maybe help me.

we'd like to use radius accounting with openser.
We'd like to set setuptime, connecttime, endtime in Cdr-s for rating.
Our openser has no database connection, so ew can't use your solution( store avps in database)

i planned to send accounting packets to radius on INVITE , ACK and BYE.
And in radius module (BSDRadius) store the system time into database on INVITE for setuptime , on ACK for connecttime and on
BYE for endtime,

But the accounting packet for INVITE (Sip-Method: INVITE, Acct-Status-Type: Start) radius doest' receive correct in time, openser send it almost in the same time as the packet for ACK, so setuptime is not correct, it is almost equal to connecttime, however the phone was ringing long.
And we would like some reliable method for storing the time informations.
Because of the network delay between openser and radius the time information can be not correct exactly.


Please let me know, why the accounting packets for INVITE is sent in incorrect way, and if someone know a better solution for storing a setuptime, connecttime and endtime for a cdr please let me know. Is there any radius attributes for example in which we can send this time informations to radius server?

Thanks any help
Tamas

Hi tamas,

Contact me if you need more information.
What you can do depend on your billing system.

This is what i have done from OpenSER:

# avpops params
modparam("avpops","avp_url","mysql://openser:[EMAIL PROTECTED]/openser")
modparam("avpops", "avp_table", "usr_preferences")


# avp for accounting
modparam("avpops","avp_aliases","setup_time=s:setup_time")
modparam("avpops","avp_aliases","connect_time=s:connect_time")
modparam("avpops","avp_aliases","disconnect_time=s:disconnect_time")
modparam("avpops","avp_aliases","remote_address=s:remote_address")
modparam("avpops","avp_aliases","valid_call=s:valid_call")


  if (!method=="REGISTER")
     record_route();

  # ACCOUNTING
  if (is_method("INVITE"))
  {
     avp_write("$Ts","$avp(setup_time)");
     avp_db_store("$ci","$avp(setup_time)");

     # invite come from PSTN this call should not be accounted
     if (src_ip=='PSTNGW')
     {
        avp_write("no","$avp(valid_call)");
        avp_db_store("$ci","$avp(valid_call)");
     } else {
        # valid call this must accounted
        avp_write("yes","$avp(valid_call)");
        avp_db_store("$ci","$avp(valid_call)");
     };

  } else if (is_method("ACK")) {
     avp_write("$Ts","$avp(connect_time)");
     avp_db_store("$ci","$avp(connect_time)");
  } else if (is_method("BYE")) {
     avp_write("$Ts","$avp(disconnect_time)");
     avp_db_store("$ci","$avp(disconnect_time)");

     avp_write("82.215.163.5","$avp(remote_address)");
     avp_db_store("$ci","$avp(remote_address)");

  };

  if (is_method("BYE"))
{ avp_db_query("select value from usr_preferences where uuid='$ci'
and attribute='setup_time'","$avp(setup_time)");
     avp_db_query("select value from usr_preferences where uuid='$ci'
and attribute='connect_time'","$avp(connect_time)");
     avp_db_query("select value from usr_preferences where uuid='$ci'
and attribute='disconnect_time'","$avp(disconnect_time)");
     avp_db_query("select value from usr_preferences where uuid='$ci'
and attribute='valid_call'","$avp(valid_call)");

     avp_db_load("$ci","$avp(remote_address)");
     avp_print();

     # BYE from announcement server or valid call
     # not account this call
     if (!src_ip=='ANNSERVER' and
avp_check("$avp(valid_call)","eq/yes/g"))
     {
         # send radius acct
        setflag(3);
        setflag(5);
     };

  };
# clean avps from db
  if (is_method("BYE|CANCEL"))
  {
     avp_db_delete("$ci","$avp(setup_time)");
     avp_db_delete("$ci","$avp(connect_time)");
     avp_db_delete("$ci","$avp(disconnect_time)");
     avp_db_delete("$ci","$avp(remote_address)");
     avp_db_delete("$ci","$avp(valid_call)");
  };


On Wed, 2006-07-12 at 14:53 +0200, Cseke Tamas wrote:
modparam("acc", "radius_extra", "h323-setup-time=$avp(setup_time); h323-connect-time=$avp(connect_time); h323-disconnect-time=$avp(disconnect_time);
Hello,

I need this time informations for radius accounting, and i must decide to make this avps in openser, or manage this times in radius server
(in BSDRadius it's not so difficult...)

I quess it'is not so easy to make this avps in openser,
   -create timestamp for particular messages (invite, ack, bye)
   -store the avps in database
   -and send to radius this attributes on accounting-request

Do you use this method, or is there any better solution?

Thanks any help,
Tamas


_______________________________________________
Users mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/users



_______________________________________________
Users mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/users

Reply via email to