I'm using an older version in production of openser with the LCR module and I've tried using $rd to account where the call went. I get a lot of problems doing this because of things like RE-INVITES and such. It's been a real headache. It doesn't seem to be consistently accurate. I can't reproduce the problem, but if I ramp up 10,000 calls, it'll happen.<div>
<br></div><div>One particular problem happens like this. And I know this isn't DR, but I'd expect it to have a similar problem. First of all, understand that I'm writing my own CDR records with avp_db_query and not with ACC since I want a unified single record per call.</div>
<div><br></div><div>Ok, an old bug in Asterisk causes it to set the T1 SIP Timer to the length of time of an OPTIONS reply. This is really stupid. So Asterisk expects my OpenSER proxy to reply in 1ms to an INVITE. It just doesn't happen. So sometimes I get retransmissions. Each INVITE that is received performs a load_gws(). Which, because of the RAND in there, sometimes loads GW1, and sometimes loads GW2. Because they both have the same callid, sometimes the original INVITE $rd overwrites the retransmitted $rd and thus the wrong gateway IP is recorded in the call record (avp_db_query). </div>
<div><br></div><div>Now I've tried to resolve this by: </div><div>1. Inserting a 1 sec sleep for OPTIONS replies in openser</div><div>2. Manually replying with a 1XX reply to avoid retransmissions. I'm not sure why this was necessary. I noticed that if I don't manually do this, OpenSER's 100 reply comes at about 250ms after the request. If I manually do it, I get it at about 25ms.</div>
<div><br></div><div>I'm sure I'm probably doing something wrong here.. in maybe a number of places. I feel like I probably need a t_newtrans() somewhere, but I don't really know how to use it properly. :/</div>
<div><br></div><div>Besides all of that, it's not really the GW IP that I want to be attached to the call record, but it's the GATEWAY ID that I want. And I suspect is more useful overall. The reason is that, for example, I send calls to a SIP/PSTN gateway and prefix the calls with 001-004 to indicate PRI #1-#4. The IP is the same for all 4 trunks. So sometimes, the $rd doesn't really tell you what "trunk" it's going to go out on. Which on the CDR record is really what I want. </div>
<div><br></div><div>I feel like both LCR and DR need to write an AVP to indicate the GATEWAY ID last set to $rd. Thoughts?</div><div><br></div><div>-Brett</div><div><br></div><div><br><div class="gmail_quote">On Thu, Jan 22, 2009 at 11:38 AM, Bogdan-Andrei Iancu <span dir="ltr"><<a href="mailto:bogdan@voice-system.ro">bogdan@voice-system.ro</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Brett,<br>
<br>
but you have the GW IP (that was used) already in the RURI...or ?<br>
<br>
Regards,<br>
Bogdan<br>
<br>
Brett Nemeroff wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="Ih2E3d">
Is there not a way to store in an AVP the gateway that was used in the call? I have this need as well..<br>
-Brett<br>
<br>
<br></div><div><div></div><div class="Wj3C7c">
On Thu, Jan 22, 2009 at 9:44 AM, ibrahim tunali <<a href="mailto:ibrahimtunali@gmail.com" target="_blank">ibrahimtunali@gmail.com</a> <mailto:<a href="mailto:ibrahimtunali@gmail.com" target="_blank">ibrahimtunali@gmail.com</a>>> wrote:<br>
<br>
Hi Bogdan,<br>
<br>
I have already set attr avp like you sent. The problem occured when<br>
fill the attr field. If I leave blank attr field in DB it starts but<br>
when i set something like "gw1" it crashed.<br>
<br>
My db row;<br>
<br>
+------+------+-------------------+-------+------------+-------+-------------+<br>
| gwid | type | address | strip | pri_prefix | attrs |<br>
description |<br>
+------+------+-------------------+-------+------------+-------+-------------+<br>
| 1 | 1 | XX.XX.XXX.XX:XXXX | 0 | NULL | gw1 |<br>
main GW |<br>
+------+------+-------------------+-------+------------+-------+-------------+<br>
<br>
Crash dump;<br>
<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: 6<br>
columns returned from the query<br>
/usr/sbin/opensips[10261]: DBG:core:db_allocate_columns: allocate 48<br>
bytes for result names at 0x76a570<br>
/usr/sbin/opensips[10261]: DBG:core:db_allocate_columns: allocate 24<br>
bytes for result types at 0x76a5b0<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[0] at 0x76a5d8<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a5d8)[0]=[gwid]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_INT result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[1] at 0x76a5f8<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a5f8)[1]=[address]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_STRING result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[2] at 0x76a618<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a618)[2]=[strip]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_INT result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[3] at 0x76a638<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a638)[3]=[pri_prefix]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_STRING result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[4] at 0x76a658<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a658)[4]=[type]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_INT result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: allocate<br>
16 bytes for RES_NAMES[5] at 0x76a678<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns:<br>
RES_NAMES(0x76a678)[5]=[attrs]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_get_columns: use<br>
DB_STRING result type<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_fetch_result:<br>
converting row 0 of 1 count 1<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_convert_row: allocate<br>
192 bytes for row values at 0x76a6b8<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_str2val:<br>
converting INT [1]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_str2val: converting<br>
STRING [69.XX.XXX.55:XXXX]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_str2val:<br>
converting INT [0]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_str2val:<br>
converting INT [1]<br>
/usr/sbin/opensips[10261]: DBG:db_mysql:db_mysql_str2val: converting<br>
STRING [gw1]<br>
/usr/sbin/opensips[10261]: DBG:drouting:dr_load_routing_info: 1<br>
records found in dr_gateways<br>
/usr/sbin/opensips[10261]: DBG:drouting:add_dst: new gw ip addr<br>
[69.XX.XXX.55:XXXX]<br>
/usr/sbin/opensips[10249]: INFO:core:handle_sigs: child process 10261<br>
exited by a signal 11<br>
/usr/sbin/opensips[10267]: DBG:core:init_mod_child: type=CHILD,<br>
rank=4, module=registrar<br>
/usr/sbin/opensips[10249]: INFO:core:handle_sigs: core was not<br>
generated<br>
/usr/sbin/opensips[10267]: DBG:core:init_mod_child: type=CHILD,<br>
rank=4, module=group<br>
/usr/sbin/opensips[10249]: INFO:core:handle_sigs: terminating due<br>
to SIGCHLD<br>
/usr/sbin/opensips[10267]: INFO:core:sig_usr: signal 15 received<br>
/usr/sbin/opensips[10267]: Memory status (pkg):<br>
/usr/sbin/opensips[10273]: INFO:core:sig_usr: signal 15 received<br>
/usr/sbin/opensips[10273]: Memory status (pkg):<br>
/usr/sbin/opensips[10267]: fm_status (0x72bbe0):<br>
<br>
Regards,<br>
<br>
Ibrahim TUNALI<br>
<br>
<br>
On Thu, Jan 22, 2009 at 17:20, Bogdan-Andrei Iancu<br></div></div><div class="Ih2E3d">
<<a href="mailto:bogdan@voice-system.ro" target="_blank">bogdan@voice-system.ro</a> <mailto:<a href="mailto:bogdan@voice-system.ro" target="_blank">bogdan@voice-system.ro</a>>> wrote:<br>
><br>
> Hi Ibrahim,<br>
><br>
> have you set the attr avp? Something like:<br>
> modparam("drouting", "attrs_avp", '$avp(s:dr_attrs)')<br>
><br>
> Then after do_routing() or use_next_gw(), do :<br>
> xlog("-----gw attr is $avp(s:dr_attrs)\n");<br>
><br>
> the value of the attr is whatever you want - the module does not<br>
interpret it - it is just reading it from DB and pass it to the<br>
AVP when you use the GW. It is your decision what to put there and<br>
how to use the value.<br>
><br>
><br>
> Regards,<br>
> Bogdan<br>
><br>
> ibrahim tunali wrote:<br>
>><br>
>> Hello,<br>
>><br>
>> I'm playing with the new module drouting on svn trunk and i need to<br>
>> get "which gateway is used on last request". I might be able to<br>
get it<br>
>> with "attrs_avp" and "attrs" field on dr_gateways table, i guess. I<br>
>> try some values to attrs but opensips crashed.<br>
>><br>
>> Could you give an example to use attrs_avp and what is the value<br>
>> format of "attrs" fields.<br>
>><br>
>> Regards,<br>
>><br>
>> Ibrahim TUNALI<br>
>><br>
>> _______________________________________________<br>
>> Users mailing list<br></div>
>> <a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a> <mailto:<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a>><div class="Ih2E3d">
<br>
>> <a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
>><br>
>><br>
><br>
<br>
_______________________________________________<br>
Users mailing list<br></div>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a> <mailto:<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a>><div class="Ih2E3d"><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
<br>
<br>
</div></blockquote>
<br>
<br>
</blockquote></div><br></div>