On 06/09/2014 08:55 PM,
Daniel-Constantin Mierla wrote:
Hello,
Hi,
the
$ru should be the same as $tu in this case. $ru will change when
the message loops back and there is a lookup("location") in the
config, but in the callback you don't get it.
If you really want to get the content of the sip MESSAGE request
sent out, you can find it in the t->uac[0].request.buffer
(iirc) as plain text. you can take it from there and parse it in
a sip_msg_t structure inside the callback. But with the SIP
reply structure you may get what you need (if you just need $ru
which is available in $tu).
I've tried your suggestion but looks like something is missing in
the buffer, the code I've added just for testing is the following:
/* execute the msilo:on-delivered event route */
if(unlikely(msilo_event_on_delivered>=0))
{
int sflag_bk;
int backup_route_type;
struct run_act_ctx ctx;
struct sip_msg req;
-->>> if
(parse_msg(t->uac[0].request.buffer,
t->uac[0].request.buffer_len, &req) != 0)
{
LM_ERR("parse_msg failed\n");
goto done;
}
LM_DBG("executing event_route[msilo:on-delivered]
(%d)\n", msilo_event_on_delivered);
sflag_bk = getsflags();
backup_route_type = get_route_type();
set_route_type(EVENT_ROUTE);
init_run_actions_ctx(&ctx);
LM_DBG("event_route[msilo:on-delivered] req=%p)\n",
&req);
run_top_route(event_rt.rlist[msilo_event_on_delivered], &req,
&ctx);
set_route_type(backup_route_type);
setsflagsval(sflag_bk);
shm_free(event->req->buf);
shm_free(event->req);
shm_free(event);
}
but doesn't properly work:
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29231]: DEBUG: msilo [msilo.c:1410]:
m_tm_callback_on_delivered_event(): executing
event_route[msilo:on-delivered] (1)
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29231]: DEBUG: msilo [msilo.c:1417]:
m_tm_callback_on_delivered_event():
event_route[msilo:on-delivered] event->req=0xbf81b830)
---->>>> Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29231]: ERROR: <core>
[parser/parse_from.c:58]: parse_from_header():
ERROR:parse_from_header: bad msg or missing FROM header
---->>>> Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29231]: ERROR: pv [pv_core.c:449]:
pv_get_from_attr(): cannot parse From header
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29231]: INFO: <script>: MSILO event
on-delivered <<null>> to <������ͫ
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29250]: : <core> [pass_fd.c:293]:
receive_fd(): ERROR: receive_fd: EOF on 13
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29227]: ALERT: <core> [main.c:775]:
handle_sigs(): child process 29231 exited by a signal 11
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29250]: DEBUG: <core> [tcp_main.c:3595]:
handle_ser_child(): DBG: handle_ser_child: dead child 2, pid 29231
(shutting down?)
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29227]: ALERT: <core> [main.c:778]:
handle_sigs(): core was not generated
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29250]: DEBUG: <core> [io_wait.h:617]:
io_watch_del(): DBG: io_watch_del (0x82cf640, 13, -1, 0x0)
fd_no=23 called
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29227]: INFO: <core> [main.c:790]:
handle_sigs(): INFO: terminating due to SIGCHLD
Jun 10 08:32:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[29249]: INFO: <core> [main.c:841]:
sig_usr(): INFO: signal 15 received
Cheers,
Roberto Fichera.
Cheers,
Daniel
On 09/06/14 18:29, Roberto Fichera
wrote:
On 06/09/2014 06:16 PM,
Daniel-Constantin Mierla wrote:
[...]
ps->req is null, because there is no incoming request,
but you should have ps->rpl available if there is a
200ok.
Which is my case! Only triggered once a 200ok has been
received! Anyway it seems to work because the event route
get executed but $ru seems not defined:
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [msilo.c:1378]:
m_tm_callback_on_delivered_event():
>>>>>>> msilo_notification_event
0xb30cb748
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [msilo.c:1380]:
m_tm_callback_on_delivered_event(): completed with status 200
[mid: 148]
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [msilo.c:1393]:
m_tm_callback_on_delivered_event(): message <148> was
sent successfully
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [ms_msg_list.c:236]:
msg_list_set_flag(): mid:148 fl:4
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [msilo.c:1403]:
m_tm_callback_on_delivered_event(): executing
event_route[msilo:on-delivered] (1)
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: msilo [msilo.c:1410]:
m_tm_callback_on_delivered_event():
event_route[msilo:on-delivered] event->req=0xb7275680)
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: <core>
[parser/parse_addr_spec.c:176]: parse_to_param(): DEBUG:
add_param: tag=90a2f67ea18c2dbc1dd6d5c5f690acb0-25e2
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: <core>
[parser/parse_addr_spec.c:893]: parse_addr_spec(): end of
header reached, state=29
---->>>> Jun 09 17:25:01
ip-10-227-0-26.localdomain /usr/sbin/kamailio[25288]: INFO:
<script>: MSILO event on-delivered <sip:test1@test.com>
to <<null>>
Jun 09 17:25:01 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25288]: DEBUG: tm [t_reply.c:1663]:
cleanup_uac_timers(): DEBUG: cleanup_uac_timers: RETR/FR
timers reset
Cheers,
Roberto Fichera.
Cheers,
Daniel
On 09/06/14 18:12, Roberto
Fichera wrote:
On 06/09/2014 06:03 PM,
Roberto Fichera wrote:
Hi,
On 06/09/2014 05:49 PM,
Daniel-Constantin Mierla wrote:
Hello,
Hi,
On 09/06/14 17:41, Roberto Fichera wrote:
[...]
your patch seems a bit to complex --
I didn't figure out why you store the message in
pkg memory.
Ok! So I will need to shm_malloc() the memory in
such case, right?
I don't get why you need to do that at all. If you
need to access from, to, etc..., you can get them from
the SIP response. You go in dangerous zone as you do
that cloning.
The idea was to set a sip_msg just to have all the
pseudo-variable available
within the event route and nothing else.
Because you want to execute the event
route on 200ok, the best is to run the event route
with the SIP response structure.
At the beginning this was my choice, but I'd always got
ps->req = NULL in the callback tmcb_params
hence the event route wasn't executed. But I'll re-try
it just to be sure.
I can confirm, I'm always getting ps->req = NULL
un 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[parser/msg_parser.c:170]: get_hdr_field(): get_hdr_field:
cseq <CSeq>: <10> <MESSAGE>
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_lookup.c:949]:
t_reply_matching(): DEBUG: t_reply_matching: hash 39390
label 0 branch 0
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_lookup.c:1004]:
t_reply_matching(): DEBUG: t_reply_matching: reply matched
(T=0xb2f7ebfc)!
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_lookup.c:1141]:
t_check_msg(): DEBUG: t_check_msg: msg id=1 global id=1 T
end=0xb2f7ebfc
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_reply.c:2206]:
reply_received(): DEBUG: reply_received: org. status
uas=0, uac[0]=0 local=2 is_invite=0)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_reply.c:1304]:
t_should_relay_response():
->>>>>>>>> T_code=0,
new_code=200
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_reply.c:2086]:
local_reply(): DEBUG: local_reply: branch=0, save=0,
winner=0
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_reply.c:2123]:
local_reply(): DEBUG: local transaction completed
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_hooks.c:288]:
run_trans_callbacks_internal(): DBG: trans=0xb2f7ebfc,
callback type 1024, id 0 entered
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: msilo [msilo.c:1378]:
m_tm_callback_on_delivered_event():
>>>>>>> msilo_notification_event
0xb301669c
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: msilo [msilo.c:1380]:
m_tm_callback_on_delivered_event(): completed with status
200 [mid: 147]
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: msilo [msilo.c:1393]:
m_tm_callback_on_delivered_event(): message <147>
was sent successfully
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: msilo
[ms_msg_list.c:236]: msg_list_set_flag(): mid:147 fl:4
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: msilo [msilo.c:1403]:
m_tm_callback_on_delivered_event(): executing
event_route[msilo:on-delivered] (1)
--->>>>> Jun 09 17:06:38
ip-10-227-0-26.localdomain /usr/sbin/kamailio[25089]:
DEBUG: msilo [msilo.c:1410]:
m_tm_callback_on_delivered_event():
event_route[msilo:on-delivered] ps->req=(nil))
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: tm [t_reply.c:1663]:
cleanup_uac_timers(): DEBUG: cleanup_uac_timers: RETR/FR
timers reset
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[usr_avp.c:644]: destroy_avp_list():
DEBUG:destroy_avp_list: destroying list (nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[xavp.c:448]: xavp_destroy_list(): destroying xavp list
(nil)
Jun 09 17:06:38 ip-10-227-0-26.localdomain
/usr/sbin/kamailio[25089]: DEBUG: <core>
[receive.c:296]: receive_msg(): receive_msg: cleaning up
BTW! using shm_malloc() I was finally able to execute
the event route in the script with all the
pseudo-variable correctly set!
Attached you will find the patch I'm actually using.
Cheers,
Roberto Fichera.
Cheers,
Roberto Fichera.
Cheers,
Daniel
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users