[SR-Users] Msilo not delivering message (status 408)

Peter Villeneuve petervnv1 at gmail.com
Fri Jul 18 20:32:21 CEST 2014


You are a star Anthony!
Thanks a lot for sharing your config. It is much appreciated.
I'm going to study your config in detail and see if I can get it to work on
my install.

Cheers,
Peter


On Fri, Jul 18, 2014 at 6:39 PM, Anthony Messina <amessina at messinet.com>
wrote:

> On Friday, July 18, 2014 12:01:41 AM Daniel-Constantin Mierla wrote:
> > You should not call m_store() if src_ip==myself -- in this way you avoid
> to
> > store notification messages that cannot be delivered.
> >
> > Why notifications are not delivered has to be troubleshooted there. Have
> you
> > tried also with UDP?
> >
> > Cheers,
> > Daniel
> >
> > On 17/07/14 23:46, Peter Villeneuve wrote:
> > Well I've been experimenting with this for hours and still no joy
> >  :(  Hair pulling continues
>
>
> Peter, I'm trying to accomplish something similar, also as a new user to
> Kamailio and initially starting from the guide at
> http://kb.asipto.com/asterisk:realtime:kamailio-4.0.x-asterisk-11.3.0-astdb
> though I am using Asterisk 12 and Kamailio devel (built for Fedora here
> https://messinet.com/rpms/browser/kamailio)
>
> My goal is that Kamailio does MESSAGE processing with MSILO storage *only*
> for
> users who actually exist -- not just any username in my domain, but a user
> who
> is in the subscribers table -- there is no sense storing a message for a
> username who will never register to receive it.
>
> Here are the relevant blocks in my kamailio.cfg -- I've included full
> routing
> blocks so you can see how the route is laid out.  I admit that I am equally
> not sure that this is the right way or the most efficient way to do it,
> but it
> does work with UDP, TCP, and TLS including notifications.
>
> Now that I have it "working," and understand more about routing in
> Kamailio,
> I'm likely going to consolidate duplication.  For instance, since I don't
> want
> to store messages for invalid or non-existent accounts, I will probably do
> the
> if(is_subscriber("$ou", "ps_auths", "1")) and add
> t_on_failure("MANAGE_FAILURE"); in the request_route, etc.
>
> Perhaps 1) this will help you, and 2) others may be able to give advice on
> my
> configuration.
>
>
>
> #!define WITH_AUTH
> #!define WITH_MSILO
>
>
> #!ifdef WITH_AUTH
> loadmodule "auth.so"
> loadmodule "auth_db.so"
> #!ifdef WITH_IPAUTH
> loadmodule "permissions.so"
> #!endif
> #!endif
>
>
> #!ifdef WITH_MSILO
> loadmodule "msilo.so"
> #!endif
>
>
> #!ifdef WITH_AUTH
> # ----- auth_db params -----
> modparam("auth_db", "calculate_ha1", yes)
> modparam("auth_db", "load_credentials", "")
>
> #!ifdef WITH_ASTERISK
> modparam("auth_db", "user_column", "username")
> modparam("auth_db", "domain_column", "realm")
> modparam("auth_db", "password_column", "password")
> # Workaround
> http://lists.sip-router.org/pipermail/sr-users/2013-August/079267.html
> modparam("auth_db", "load_credentials", "username")
> # End workaround
> modparam("auth_db", "db_url", DBASTURL)
> modparam("auth_db", "version_table", 0)
> #!else
> modparam("auth_db", "db_url", DBURL)
> modparam("auth_db", "password_column", "password")
> modparam("auth_db", "use_domain", MULTIDOMAIN)
> #!endif
>
> #!ifdef WITH_IPAUTH
> # ----- permissions params -----
> modparam("permissions", "db_url", DBURL)
> modparam("permissions", "db_mode", 1)
> #!endif
> #!endif
>
>
> #!ifdef WITH_MSILO
> # ----- msilo params -----
> modparam("msilo", "db_url", DBURL)
> modparam("msilo", "from_address", "sip:$rU at my-domain.com")
> modparam("msilo", "offline_message", "I'll get my messages when I'm back
> online.")
> modparam("msilo", "content_type_hdr", "Content-Type: text/plain\r\n")
> modparam("msilo", "expire_time", 604800)
> #!endif
>
>
> #######################
> route[RELAY] {
>
>         # enable additional event routes for forwarded requests
>         # - serial forking, RTP relaying handling, a.s.o.
>         if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
>                 if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
>         }
>         if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
>                 if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
>         }
>         if (is_method("INVITE")) {
>                 if(!t_is_set("failure_route"))
> t_on_failure("MANAGE_FAILURE");
>         }
>
> #!ifdef WITH_MSILO
>         if (is_method("MESSAGE")) {
>                 if(!t_is_set("failure_route"))
> t_on_failure("MANAGE_FAILURE");
>         }
> #!endif
>
>         if (!t_relay()) {
>                 sl_reply_error();
>         }
>         exit;
> }
>
>
> #######################
> 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();
>
> #!ifdef WITH_MSILO
>                 # Ensure we aren't unregistering
>                 # Right now, CSipSimple doesn't send an Allow header with
> an
> un-REGISTER,
>                 # so Kamailio skips to checking the Contact header for
> expires, and appears
>                 # to ignore the fact that an Expires: 0 header is present.
>                 if($hdr(Expires) != 0)
>                         m_dump();
> #!endif
>
> #!ifdef WITH_ASTERISK
>                 route(REGFWD);
> #!endif
>
>                 exit;
>         }
> }
>
>
> #######################
> route[LOCATION] {
>
> #!ifdef WITH_SPEEDDIAL
>         # search for short dialing - 2-digit extension
>         if($rU=~"^[0-9][0-9]$")
>                 if(sd_lookup("speed_dial"))
>                         route(SIPOUT);
> #!endif
>
> #!ifdef WITH_ALIASDB
>         # search in DB-based aliases
>         if(alias_db_lookup("dbaliases"))
>                 route(SIPOUT);
> #!endif
>
> #!ifdef WITH_ASTERISK
>         if(is_method("INVITE") && (!route(FROMASTERISK))) {
>                 # if new call from out there - send to Asterisk
>                 # - non-INVITE request are routed directly by Kamailio
>                 # - traffic from Asterisk is routed also directy by
> Kamailio
>                 route(TOASTERISK);
>                 exit;
>         }
> #!endif
>
>         $avp(oexten) = $rU;
>         if (!lookup("location")) {
>
> #!ifdef WITH_MSILO
>                 if(is_method("MESSAGE") && src_ip!=myself) {
>                         # Ensure we have a valid account for which to store
> MESSAGEs
>
> #!ifdef WITH_ASTERISK
>                         if(is_subscriber("$ru", "ps_auths", "1")) {
> #!else
>                         if(is_subscriber("$ru", "subscriber", "1")) {
> #!endif
>
>                                 if(m_store("$ru")) {
>                                         xlog("L_INFO", "MSILO: MESSAGE from
> $fu stored for offline user $ru\n");
>                                         send_reply("202", "Accepted");
>                                 } else {
>                                         xlog("L_ERR", "MSILO: unable to
> store
> MESSAGE from $fu for offline user $ru\n");
>                                         send_reply("503", "Service
> Unavailable");
>                                 }
>                         } else {
>                                 xlog("L_ERR", "MSILO: MESSAGE from $fu not
> stored for non-existent user $ru\n");
>                                 send_reply("404", "Not Found");
>                         }
>                         exit;
>                 }
> #!endif
>
>                 $var(rc) = $rc;
>                 route(TOVOICEMAIL);
>                 t_newtran();
>                 switch ($var(rc)) {
>                         case -1:
>                         case -3:
>                                 send_reply("404", "Not Found");
>                                 exit;
>                         case -2:
>                                 send_reply("405", "Method Not Allowed");
>                                 exit;
>                 }
>         }
>
>         # when routing via usrloc, log the missed calls also
>         if (is_method("INVITE"))
>         {
>                 setflag(FLT_ACCMISSED);
>         }
> }
>
>
> #######################
> route[AUTH] {
> #!ifdef WITH_MSILO
>         # do not authenticate ourselves when dumping messages
>         if(is_method("MESSAGE") && src_ip==myself)
>         {
>                 return;
>         }
> #!endif
>
>         # if caller is not local subscriber, then check if it calls
>         # a local destination, otherwise deny, not an open relay here
>         if (from_uri!=myself && uri!=myself)
>         {
>                 sl_send_reply("403","Not relaying");
>                 exit;
>         }
>
> #!ifdef WITH_AUTH
>
> #!ifdef WITH_ASTERISK
>         # do not auth traffic from Asterisk - trusted!
>         if(route(FROMASTERISK))
>                 return;
> #!endif
>
> #!ifdef WITH_IPAUTH
>         if((!is_method("REGISTER")) && allow_source_address())
>         {
>                 # source IP allowed
>                 return;
>         }
> #!endif
>
>         if (is_method("REGISTER") || from_uri==myself)
>         {
>                 # authenticate requests
> #!ifdef WITH_ASTERISK
>                 if (!auth_check("$fd", "ps_auths", "1")) {
> #!else
>                 if (!auth_check("$fd", "subscriber", "1")) {
> #!endif
>                         auth_challenge("$fd", "0");
>                         exit;
>                 }
>                 # user authenticated - remove auth header
>                 if(!is_method("REGISTER|PUBLISH"))
>                         consume_credentials();
>         }
> #!endif
>         return;
> }
>
>
> #######################
> failure_route[MANAGE_FAILURE] {
>         route(NATMANAGE);
>
>         if (t_is_canceled()) {
>                 exit;
>         }
>
> #!ifdef WITH_BLOCK3XX
>         # block call redirect based on 3xx replies.
>         if (t_check_status("3[0-9][0-9]")) {
>                 t_reply("404","Not found");
>                 exit;
>         }
> #!endif
>
> #!ifdef WITH_MSILO
>         # Manage MSILO transmission failures
>         if(is_method("MESSAGE") && src_ip!=myself) {
>
>                 # Ensure we have a valid account for which to store
> MESSAGEs
> #!ifdef WITH_ASTERISK
>                 if(is_subscriber("$ou", "ps_auths", "1")) {
> #!else
>                 if(is_subscriber("$ou", "subscriber", "1")) {
> #!endif
>
>                         if (m_store("$ou")) {
>                                 xlog("L_INFO", "MSILO: MESSAGE from $fu
> stored
> for unreachable user $ou\n");
>                                 send_reply("202", "Accepted");
>                         } else {
>                                 xlog("L_ERR", "MSILO: unable to store
> MESSAGE
> from $fu for unreachable user $ou\n");
>                                 send_reply("503", "Service Unavailable");
>                         }
>                 }
>                 exit;
>         }
> #!endif
>
> #!ifdef WITH_VOICEMAIL
>         # serial forking
>         # - route to voicemail on busy or no answer (timeout)
>         if (t_check_status("486|408")) {
>                 $du = $null;
>                 route(TOVOICEMAIL);
>                 exit;
>         }
> #!endif
> }
>
>
> --
> Anthony - http://messinet.com - http://messinet.com/~amessina/gallery
> 8F89 5E72 8DF0 BCF0 10BE 9967 92DC 35DC B001 4A4E
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140718/5851b76b/attachment.html>


More information about the sr-users mailing list