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(a)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@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(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users