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