Hi.
I try to use Kamailio 4.1 git version as registrar and PSTN gw.
Need accept register from users. Its OK, I made it and use save() function - from keep registrations in case of kamailio restart.
Need forward calls to gw, but only for registered users. If I understand correctly in INVITE enough check registered("location"), isnt it? but it's not work, i need verify auth again.
Routing part of my config:
route { # initial sanity checks - skip in letter
# We are registrar!
if (is_method("REGISTER")) { sl_send_reply("100", "Trying"); # send "Trying, dont threat on me if(isflagset(FLT_NATS)) { setbflag(FLB_NATB); # uncomment next line to do SIP NAT pinging ## setbflag(FLB_NATSIPPING); }
# we must check auth right now # WORK: if (!www_authorize("$fd", "subscriber")) if (!auth_check("$fd", "subscriber", "1")) { # WORK: www_challenge("$fd", "0"); auth_challenge("$fd", "0"); # send me requisites plz exit; } else { # ok. auth accepted, save in location if (save("location")) #if (save("location","0x04","$fd")) { xlog("L_WARN", "Save OK in location sip:$au@$fd"); } else { xlog("L_WARN", "Save FAIL in location sip:$au@$fd"); } }
xlog("L_WARN", "REGISTERED method done"); exit; }
if (is_method("INVITE")) { if ($si == $sel(cfg_get.pstn.gw_ip)) { # incoming calls xlog("L_WARN", "Incoming call"); } else { # outgoing calls
xlog("L_WARN", "Outgoing call"); # check auth # we must check auth right now
if (!proxy_authorize("$fd", "subscriber")) { proxy_challenge("$fd", "0"); exit; }
consume_credentials();
### THAT FUNCTIONS ALWAYS WRITE IN LOGS # "!registered" "!lookup" for both registered and unregged users
# if (!registered("location")) xlog("L_WARN","!registered"); # if (!lookup("location")) xlog("L_WARN", "!lookup");
# number change - FIX late # check may be used dialplan automatically?
# route $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip); xlog("L_WARN", "Rewrite to $ru, send to PSTN."); if (!t_relay()) { sl_reply_error(); } }
} else { # reply 2 keepalive and drop all # if (!t_relay()) { sl_reply_error(); } }
}