Hi guys,
I was trying to read the profile of a dialog on the
event_route[dialog:end] and noticed that dialog profiles are not
available at this point.
My cfg code that doesn't work:
event_route[dialog:end] {
if (is_in_profile("orig")) {
xinfo("this dialog belongs to a orig call\n");
route(EMIT_ORIG_CALL_ENDED);
}
}
Log:
| 3(12) INFO: <script>: Managing dialog... for BYE
| 3(12) ERROR: *** cfgtrace:dbg_cfg_trace():
request_route=[DEFAULT_ROUTE] c=[/etc/kamailio/kamailio.cfg] l=263
a=24 n=dlg_manage
| 3(12) DEBUG: dialog [dlg_hash.c:887]: internal_get_dlg(): ref dlg
0x7f8edda138e0 with 1 -> 3
| 3(12) DEBUG: dialog [dlg_hash.c:891]: internal_get_dlg(): dialog
callid='96af5356-4663-4f5d-b6ca-c0d2381c992a' found on entry 16097,
dir=1 to-tag='5'
| 3(12) DEBUG: dialog [dlg_profile.c:536]: set_current_dialog():
setting current dialog [16097:1304]
| 3(12) DEBUG: dialog [dlg_hash.c:1290]: next_state_dlg(): dialog
0x7f8edda138e0 changed from state 4 to state 5, due event 7 (ref 3)
| 3(12) DEBUG: dialog [dlg_hash.c:1071]: dlg_ref_helper(): ref op on
0x7f8edda138e0 with 1 from dlg_handlers.c:1799
| 3(12) DEBUG: dialog [dlg_hash.c:1075]: dlg_ref_helper(): ref dlg
0x7f8edda138e0 with 1 -> 4
| 3(12) DEBUG: dialog [dlg_handlers.c:1803]: dlg_run_event_route():
executing event_route 3 on state 5
| 3(12) ERROR: *** cfgtrace:dbg_cfg_trace(): local_route=[dialog:end]
c=[/etc/kamailio/kamailio.cfg] l=453 a=16 n=if
| 3(12) ERROR: *** cfgtrace:dbg_cfg_trace(): local_route=[dialog:end]
c=[/etc/kamailio/kamailio.cfg] l=448 a=25 n=is_in_profile
Looking at code I can see that dialog profiles are cleaned on
next_state_dlg() when the dialog moves from state 4 to state 5
/* remove the dialog from profiles when is not no longer active */
if(*new_state==DLG_STATE_DELETED && dlg->profile_links!=NULL
&& *old_state!=*new_state) {
destroy_linkers(dlg->profile_links);
dlg->profile_links = NULL;
}
My question for the more experienced guys: is this behaviour by design?
Can we change it to only clean profiles at same time we clean dlg_vars
for example?
Thanks!
Andre Barbosa