I removed the localhost listeners on TCP and UDP, and, as I suspected,
Kamailio doesn't seem to like that.
Why isn't kamailio sending the message back through the TLS socket?
NOTICE: <script>: -------------------------MESSAGE PROCESSING: dumping
offline messages
ERROR: tm [ut.h:343]: uri2dst2(): no corresponding socket for af 2
ERROR: tm [uac.c:266]: t_uac_prepare(): t_uac: no socket found
On Wed, Jul 16, 2014 at 4:44 PM, Peter Villeneuve <petervnv1(a)gmail.com>
wrote:
And here's the full routing block. I copied it
from someone else on the
list that was troubleshooting msilo a while back.
Also, I can confirm the message never gets delivered because it remains in
msilo DB and kamailio logs shows it trying and trying.
####### Routing Logic ########
# Main SIP request routing logic
# - processing of any incoming SIP request starts with this route
route {
# per request initial checks
route(REQINIT);
# NAT detection
route(NAT);
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
if (is_method("MESSAGE"))
{
log(1,"-------------------------------------------------------->WE HAVE A
NEW MESSAGE\n");
route(MSILO_MESSAGE);
}
t_check_trans();
# authentication
route(AUTH);
# record routing for dialog forming requests (in case they are routed)
# - remove preloaded route headers
remove_hf("Route");
if (is_method("INVITE|SUBSCRIBE"))
record_route();
# account only INVITEs
if (is_method("INVITE"))
{
setflag(FLT_ACC); # do accounting
}
# dispatch requests to foreign domains
route(SIPOUT);
### requests for my local domains
# handle presence related requests
route(PRESENCE);
# handle registrations
route(REGISTRAR);
if ($rU==$null)
{
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# dispatch destinations to PSTN
route(PSTN);
# user location service
route(LOCATION);
route(RELAY);
}
route[RELAY] {
#!ifdef WITH_NAT
if (check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}
if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) {
route(RTPPROXY);
}
#!endif
/* example how to enable some additional event routes */
if (is_method("INVITE")) {
#t_on_branch("BRANCH_ONE");
t_on_reply("REPLY_ONE");
t_on_failure("FAIL_ONE");
}
if (!t_relay()) {
sl_reply_error();
}
exit;
}
##storing offline messages
route[MSILO_MESSAGE]{
if (lookup("location")){
t_on_failure("FAIL_MESSAGE");
t_relay();
xlog("L_NOTICE","---------------------------------MI: ($mi), MB:
($mb)\n");
}else{
xlog("L_NOTICE","------------------MESSAGE PROCESSING: location not
found, storing offline message ID: ($ru)\n");
m_store("$ru");
sl_send_reply("202", "ACCEPTED");
xlog("L_NOTICE","------------------MESSAGE PROCESSING: location not
found, stored offline message ID: ($ru)\n");
};
exit;
};
failure_route[FAIL_MESSAGE]{
xlog("L_NOTICE","------------------MESSAGE PROCESSING: user cannot be
reached, storing offline message ID: ($ou)\n");
m_store("$ou");
t_reply("202", "ACCEPTED");
xlog("L_NOTICE","------------------MESSAGE PROCESSING: user cannot be
reached, stored offline message ID: ($ou)\n");
exit;
}
# Per SIP request initial checks
route[REQINIT] {
#!ifdef WITH_ANTIFLOOD
# flood dection from same IP and traffic ban for a while
# be sure you exclude checking trusted peers, such as pstn gateways
# - local host excluded (e.g., loop to self)
if(src_ip!=myself)
{
if($sht(ipban=>$si)!=$null)
{
# ip is already blocked
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
exit;
}
if (!pike_check_req())
{
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
exit;
}
}
#!endif
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if(!sanity_check("1511", "7"))
{
xlog("Malformed SIP message from $si:$sp\n");
exit;
}
}
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
}
route(RELAY);
} else {
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# no loose-route, but stateful ACK;
# must be an ACK after a 487
# or e.g. 404 from upstream server
t_relay();
exit;
} else {
# ACK without matching transaction ... ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
}
# Handle SIP registrations
route[REGISTRAR] {
if (is_method("REGISTER"))
{
if(isflagset(FLT_NATS))
{
setbflag(FLB_NATB);
# uncomment next line to do SIP NAT pinging
setbflag(FLB_NATSIPPING);
}
if (!save("location"))
sl_reply_error();
# MSILO - dumping user's offline messages
m_dump();
log(1,"-------------------------MESSAGE
PROCESSING: dumping offline messages\n");
exit;
}
}
# USER location service
route[LOCATION] {
#!ifdef WITH_ALIASDB
# search in DB-based aliases
alias_db_lookup("dbaliases");
#!endif
if (!lookup("location")) {
switch ($rc) {
case -1:
case -3:
t_newtran();
t_reply("404", "Not Found");
exit;
case -2:
sl_send_reply("405", "Method Not Allowed");
exit;
}
}
# when routing via usrloc, log the missed calls also
if (is_method("INVITE"))
{
setflag(FLT_ACCMISSED);
}
}
# Presence server route
route[PRESENCE] {
if(!is_method("PUBLISH|SUBSCRIBE"))
return;
#!ifdef WITH_PRESENCE
if (!t_newtran())
{
sl_reply_error();
exit;
};
if(is_method("PUBLISH"))
{
handle_publish();
t_release();
}
else
if( is_method("SUBSCRIBE"))
{
handle_subscribe();
t_release();
}
exit;
#!endif
# if presence enabled, this part will not be executed
if (is_method("PUBLISH") || $rU==$null)
{
sl_send_reply("404", "Not here");
exit;
}
return;
}
# Authentication route
route[AUTH] {
#!ifdef WITH_AUTH
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests (uncomment to enable auth)
if (!www_authorize("$td", "subscriber"))
{
www_challenge("$td", "0");
exit;
}
if ($au!=$tU)
{
sl_send_reply("403","Forbidden auth ID");
exit;
}
} else {
#!ifdef WITH_IPAUTH
if(allow_source_address())
{
# source IP allowed
return;
}
#!endif
# authenticate if from local subscriber
if (from_uri==myself)
{
if (!proxy_authorize("$fd", "subscriber")) {
proxy_challenge("$fd", "0");
exit;
}
if (is_method("PUBLISH"))
{
if ($au!=$tU) {
sl_send_reply("403","Forbidden auth ID");
exit;
}
} else {
if ($au!=$fU) {
sl_send_reply("403","Forbidden auth ID");
exit;
}
}
consume_credentials();
# caller authenticated
} else {
# caller is not local subscriber, then check if it calls
# a local destination, otherwise deny, not an open relay here
if (!uri==myself)
{
sl_send_reply("403","Not relaying");
exit;
}
}
}
#!endif
return;
}
# Caller NAT detection route
route[NAT] {
#!ifdef WITH_NAT
force_rport();
if (nat_uac_test("19")) {
if (method=="REGISTER") {
fix_nated_register();
} else {
fix_nated_contact();
}
setflag(FLT_NATS);
}
#!endif
return;
}
# RTPProxy control
route[RTPPROXY] {
#!ifdef WITH_NAT
if (is_method("BYE")) {
unforce_rtp_proxy();
} else if (is_method("INVITE")){
rtpproxy_offer();
}
if (!has_totag()) add_rr_param(";nat=yes");
#!endif
return;
}
# Routing to foreign domains
route[SIPOUT] {
if (!uri==myself)
{
append_hf("P-hint: outbound\r\n");
route(RELAY);
}
}
# PSTN GW routing
route[PSTN] {
#!ifdef WITH_PSTN
# check if PSTN GW IP is defined
if (strempty($sel(cfg_get.pstn.gw_ip))) {
xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");
return;
}
# route to PSTN dialed numbers starting with '+' or '00'
# (international format)
# - update the condition to match your dialing rules for PSTN routing
if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))
return;
# only local users allowed to call
if(from_uri!=myself) {
sl_send_reply("403", "Not Allowed");
exit;
}
$ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);
route(RELAY);
exit;
#!endif
return;
}
# XMLRPC routing
#!ifdef WITH_XMLRPC
route[XMLRPC]
{
# allow XMLRPC from localhost
if ((method=="POST" || method=="GET")
&& (src_ip==127.0.0.1)) {
# close connection only for xmlrpclib user agents (there is a bug in
# xmlrpclib: it waits for EOF before interpreting the response).
if ($hdr(User-Agent) =~ "xmlrpclib")
set_reply_close();
set_reply_no_connect();
dispatch_rpc();
exit;
}
send_reply("403", "Forbidden");
exit;
}
#!endif
# Sample branch router
branch_route[BRANCH_ONE] {
xdbg("new branch at $ru\n");
}
# Sample onreply route
onreply_route[REPLY_ONE] {
xdbg("incoming reply\n");
#!ifdef WITH_NAT
if ((isflagset(FLT_NATS) || isbflagset(FLB_NATB))
&& status=~"(183)|(2[0-9][0-9])") {
rtpproxy_answer();
}
if (isbflagset("6")) {
fix_nated_contact();
}
#!endif
}
# Sample failure route
failure_route[FAIL_ONE] {
#!ifdef WITH_NAT
if (is_method("INVITE")
&& (isbflagset(FLB_NATB) || isflagset(FLT_NATS))) {
unforce_rtp_proxy();
}
#!endif
if (t_is_canceled()) {
exit;
}
# uncomment the following lines if you want to block client
# redirect based on 3xx replies.
##if (t_check_status("3[0-9][0-9]")) {
##t_reply("404","Not found");
## exit;
##}
# uncomment the following lines if you want to redirect the failed
# calls to a different new destination
##if (t_check_status("486|408")) {
## sethostport("192.168.2.100:5060");
## append_branch();
## # do not set the missed call flag again
## t_relay();
##}
}
On Wed, Jul 16, 2014 at 4:38 PM, Peter Villeneuve <petervnv1(a)gmail.com>
wrote:
Thanks for your help Daniel.
OK I ngrepped port 5060 and indeed the message tries to get delivered.
However it never arrives at the client (1010 in this case).
I have added localhost listeners for UDP and TCP, even though all clients
register through TLS only (could this be the root of the problem?). I added
localhost listeners because I was getting the no socket found error message.
Listening on
udp: 127.0.0.1:5080
tcp: 127.0.0.1:5060
tls: 79.my.server.IP1:5061
Aliases:
tcp: localhost:5060
udp: localhost:5080
*: my.domain.com:*
U 2014/07/16 15:29:14.904285 127.0.0.1:5080 -> 79.my.server.IP1:5060
MESSAGE sip:1010@my.domain.com SIP/2.0.
Via: SIP/2.0/UDP 127.0.0.1:5080
;branch=z9hG4bKcde3.542219f4000000000000000000000000.0.
To: <sip:1010@my.domain.com>.
From: <sip:1000@my.domain.com>;tag=def4124455da8a0b8e97eafabd028e26-2c30.
CSeq: 10 MESSAGE.
Call-ID: 16b126996f51d89c-12460(a)127.0.0.1.
Max-Forwards: 70.
Content-Length: 58.
User-Agent: kamailio (4.1.4 (x86_64/linux)).
Date: Wed, 16 Jul 2014 15:22:31 GMT.
Content-Type: text/plain.
.
[Offline message - Wed Jul 16 15:22:31 2014] Test 1,2,3
On Wed, Jul 16, 2014 at 8:58 AM, Daniel-Constantin Mierla <
miconda(a)gmail.com> wrote:
Hello,
can you watch the sip traffic on the network to see if the sip messages
is sent out? You can use ngrep, like:
ngrep -d any -qt -W byline "sip" port 5060
Cheers,
Daniel
On 14/07/14 19:56, Peter Villeneuve wrote:
Hi,
This is most likely a stupid mistake on my route config, but msilo
correctly stores messages for offline users, but when they come back
online, the message never arrives.
Looking through the debug logs indeed there is an error, with status
408, which suggests kamaiio can't find a route to the user that just
logged. Before I spend hours looking through all the routing blocks,
perhaps someone more exprienced in kamailio can see the problem right away
and offer a solution?
Thanks
DEBUG: msilo [msilo.c:1148]: m_dump(): msg [1-12] for:
sip:1010@my.domain.com
DEBUG: <core> [io_wait.h:617]: io_watch_del(): DBG: io_watch_del
(0x8e3040, 9, -1, 0x10) fd_no=2 called
DEBUG: <core> [tcp_read.c:1437]: release_tcpconn(): releasing con
0x7f61ced1b1b0, state 1, fd=9, id=1
DEBUG: <core> [tcp_read.c:1438]: release_tcpconn(): extra_data
0x7f61ced1c4f8
DEBUG: <core> [tcp_main.c:3385]: handle_tcp_child(): handle_tcp_child:
reader response= 7f61ced1b1b0, 1 from 0
DEBUG: <core> [io_wait.h:390]: io_watch_add(): DBG:
io_watch_add(0x89ec40, 26, 2, 0x7f61ced1b1b0), fd_no=21
DEBUG: <core> [tcp_main.c:3515]: handle_tcp_child(): handle_tcp_child:
CONN_RELEASE 0x7f61ced1b1b0 refcnt= 1
DEBUG: tm [t_reply.c:1304]: t_should_relay_response():
->>>>>>>>>
T_code=0, new_code=408
DEBUG: tm [t_reply.c:2086]: local_reply(): DEBUG: local_reply: branch=0,
save=0, winner=0
DEBUG: tm [t_reply.c:2123]: local_reply(): DEBUG: local transaction
completed
DEBUG: tm [t_hooks.c:288]: run_trans_callbacks_internal(): DBG:
trans=0x7f61ced1d868, callback type 1024, id 0 entered
DEBUG: msilo [msilo.c:1317]: m_tm_callback(): *completed with status
408* [mid: 140058058335472/13]
DEBUG: msilo [msilo.c:1325]: m_tm_callback(): message <13> was not sent
successfully
DEBUG: msilo [ms_msg_list.c:236]: msg_list_set_flag(): mid:13 fl:8
DEBUG: tm [t_reply.c:1304]: t_should_relay_response():
->>>>>>>>>
T_code=0, new_code=408
DEBUG: tm [t_reply.c:2086]: local_reply(): DEBUG: local_reply: branch=0,
save=0, winner=0
DEBUG: tm [t_reply.c:2123]: local_reply(): DEBUG: local transaction
completed
DEBUG: tm [t_hooks.c:288]: run_trans_callbacks_internal(): DBG:
trans=0x7f61ced5f098, callback type 1024, id 0 entered
DEBUG: msilo [msilo.c:1317]: m_tm_callback(): completed with status 408
[mid: 140058058329184/12]
DEBUG: msilo [msilo.c:1325]: m_tm_callback(): message <12> was not sent
successfully
DEBUG: msilo [ms_msg_list.c:236]: msg_list_set_flag(): mid:12 fl:8
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
listsr-users@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla -
http://www.asipto.comhttp://twitter.com/#!/miconda -
http://www.linkedin.com/in/miconda
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users