diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index 0d8939b..824e68d 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -70,8 +70,9 @@ route[HANDLE_REGISTER] if (!($ua =~ "Linksys/SPA8000" || $ua =~ "Linphone" || $ua =~ "OpenBTS" - || $ua =~ "SIPp" - || (af==INET6) + || $ua =~ "SIPp" + || $ua =~ "Bria" + || (af==INET6) )) { setbflag(FLB_NATB); setbflag(FLB_NATSIPPING); @@ -102,13 +103,13 @@ route[AUTHORIZATION_CHECK] xlog("L_INFO", "$ci|log|not authorized $fu from $si:$sp"); send_reply("500", "Not Registered"); exit; -## TODO -## route(ATTEMPT_AUTHORIZATION); +# route(ATTEMPT_AUTHORIZATION); } } route[ATTEMPT_AUTHORIZATION] { + $var(nonce) = $(uuid(g){s.rm,-}); #!ifdef OPENBTS_AUTH-ROLE if($ua =~ "OpenBTS" && $sht(auth_cache=>$Au::nonce) != $null ) { @@ -142,12 +143,15 @@ route[ATTEMPT_AUTHORIZATION] route[KAZOO_AUTHORIZATION] { + $var(nonce) = $adn; + xlog("L_INFO", "$ci|log|check $adn"); $var(amqp_payload_request) = '{"Event-Category" : "directory" , "Event-Name" : "authn_req", "Method" : "REGISTER", "Auth-Nonce" : "$adn", "Auth-Realm" : "$fd", "Auth-User" : "$fU", "From" : "$fu", "To" : "$tu" }'; $var(amqp_routing_key) = "authn.req." + $(fd{kz.encode}); + $avp(kz_timeout) = 2500; if(kazoo_async_query("callmgr", $var(amqp_routing_key), $var(amqp_payload_request), "KAZOO_AUTHORIZATION_OK", "KAZOO_AUTHORIZATION_ERROR") != 1) { xlog("L_INFO", "$ci|log|failed to send Kazoo query for authentication credentials for $Au $si:$sp"); append_to_reply("Retry-After: 60\r\n"); - sl_send_reply("500", "Retry Later"); + send_reply("500", "Retry Later"); exit; } } @@ -156,6 +160,13 @@ route[KAZOO_AUTHORIZATION_OK] { $var(password) = $(kzR{kz.json,Auth-Password}); $var(nonce) = $adn; + #!ifdef OPENBTS_AUTH-ROLE + if( $(kzR{kz.json,Auth-Nonce}) != "" && $var(nonce) != $(kzR{kz.json,Auth-Nonce})) { + xlog("L_INFO", "$ci|log|nonce replace $var(nonce) with $(kzR{kz.json,Auth-Nonce})"); + $var(nonce) = $(kzR{kz.json,Auth-Nonce}); + $sht(auth_cache=>$Au::nonce) = $var(nonce); + } + #!endif $xavp(ulattrs=>custom_channel_vars) = $(kzR{kz.json,Custom-Channel-Vars}); xlog("L_INFO", "$ci|log|authenticating $Au via Kazoo query response"); route(CHECK_AUTHORIZATION); @@ -164,12 +175,8 @@ route[KAZOO_AUTHORIZATION_OK] route[KAZOO_AUTHORIZATION_ERROR] { xlog("L_INFO", "$ci|log|failed to query Kazoo for authentication credentials for $Au $si:$sp"); - ## TODO check method - if(t_check_trans()) { - t_release(); - } append_to_reply("Retry-After: 60\r\n"); - sl_send_reply("500", "Retry Later"); + send_reply("500", "Retry Later"); exit; } @@ -237,7 +244,7 @@ route[CHECK_AUTHORIZATION] route[SAVE_LOCATION] { - $var(save_result) = save("location", "0x04"); + $var(save_result) = save("location"); if($var(save_result) == -1) { auth_challenge("$fd", "0"); xlog("L_INFO", "$ci|end|issued auth challenge after failed attempt to save contact for $Au $si:$sp"); @@ -250,7 +257,7 @@ route[SAVE_LOCATION] } } - if(@contact.expires != $null) { + if(@contact.expires) { $var(expires) = @contact.expires; } else { if(is_present_hf("Expires")) { @@ -272,11 +279,16 @@ route[SAVE_LOCATION] } } - $var(amqp_payload_request) = '{"Event-Category" : "directory", "Event-Name" : "reg_success", "Status" : "$var(Status)", "Event-Timestamp" : $TS, "Expires" : $(var(expires){s.int}), "First-Registration" : $var(new_reg), "Contact" : "$(ct{s.escape.common})", "Call-ID" : "$ci", "Realm" : "$fd", "Username" : "$fU", "From-User" : "$fU", "From-Host" : "$fd", "To-User" : "$tU", "To-Host" : "$td", "User-Agent" : "$(ua{s.escape.common})" , "Custom-Channel-Vars" : $xavp(ulattrs=>custom_channel_vars), "Proxy-Path" : "sip:$Ri" }'; + $var(ip) = $Ri; + if(af==INET6) { + $var(ip) = "[" + $Ri + "]"; + } + + $var(amqp_payload_request) = '{"Event-Category" : "directory", "Event-Name" : "reg_success", "Status" : "$var(Status)", "Event-Timestamp" : $TS, "Expires" : $(var(expires){s.int}), "First-Registration" : $var(new_reg), "Contact" : "$(ct{s.escape.common})", "Call-ID" : "$ci", "Realm" : "$fd", "Username" : "$fU", "From-User" : "$fU", "From-Host" : "$fd", "To-User" : "$tU", "To-Host" : "$td", "User-Agent" : "$(ua{s.escape.common})" , "Custom-Channel-Vars" : $xavp(ulattrs=>custom_channel_vars), "Proxy-Path" : "sip:$var(ip)", "RUID" : "$xavp(ulrcd=>ruid)" }'; $var(amqp_routing_key) = "registration.success." + $(fd{kz.encode}) + "." + $(fU{kz.encode}); kazoo_publish("registrar", $var(amqp_routing_key), $var(amqp_payload_request)); - xlog("L_INFO", "$ci|end|successful $var(Status) with contact $ct"); + xlog("L_INFO", "$ci|end|successful $(var(Status){s.tolower}) with contact $ct"); #!ifdef PUSHER-ROLE route(PUSHER_ON_REGISTRATION); @@ -298,7 +310,6 @@ event_route[kazoo:consumer-event-directory-reg-flush] #!ifdef ANTIFLOOD-ROLE route(ANTIFLOOD_RESET_AUTH); #!endif - } # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab