|
@@ -28,8 +28,6 @@ def ksr_request_route()
|
|
|
return
|
|
|
end
|
|
|
|
|
|
- ksr_route_withindlg()
|
|
|
-
|
|
|
# Retransmissions
|
|
|
if !KSR.is_ACK() then
|
|
|
if KSR::TMX.t_precheck_trans() > 0 then
|
|
@@ -39,7 +37,12 @@ def ksr_request_route()
|
|
|
return if KSR::TM.t_check_trans() == 0
|
|
|
end
|
|
|
|
|
|
- # Auth
|
|
|
+ # Handle requests within SIP dialogs
|
|
|
+ ksr_route_withindlg()
|
|
|
+
|
|
|
+ # -- only initial requests (no To tag)
|
|
|
+
|
|
|
+ # Authentication
|
|
|
ksr_route_auth()
|
|
|
|
|
|
# Record routing for dialog forming requests (in case they are routed)
|
|
@@ -56,35 +59,16 @@ def ksr_request_route()
|
|
|
# Registrations
|
|
|
ksr_route_registrar()
|
|
|
|
|
|
- # USRLOC
|
|
|
- ksr_route_location()
|
|
|
-
|
|
|
- return
|
|
|
-end
|
|
|
-
|
|
|
-def ksr_route_reqinit()
|
|
|
- if KSR::COREX.has_user_agent() > 0 then
|
|
|
- ua = KSR::PV.gete("$ua");
|
|
|
- if ua.include? 'friendly' or ua.include? 'scanner' or ua.include? 'sipcli' or ua.include? 'sipvicious' then
|
|
|
- KSR::SL.sl_send_reply(200, "OK");
|
|
|
- exit
|
|
|
- end
|
|
|
+ if KSR::COREX.has_ruri_user() < 0 then
|
|
|
+ # request with no Username in RURI
|
|
|
+ KSR::SL.sl_send_reply(484,"Address Incomplete");
|
|
|
+ return;
|
|
|
end
|
|
|
|
|
|
- if KSR::MAXFWD.process_maxfwd(10) < 0 then
|
|
|
- KSR::SL.sl_send_reply(483,"Too Many Hops");
|
|
|
- exit
|
|
|
- end
|
|
|
-
|
|
|
- if KSR.is_OPTIONS() and KSR.is_myself_ruri() and KSR::COREX.has_ruri_user() < 0 then
|
|
|
- KSR::SL.sl_send_reply(200, "Keepalive");
|
|
|
- exit
|
|
|
- end
|
|
|
+ # User location service
|
|
|
+ ksr_route_location()
|
|
|
|
|
|
- if KSR::SANITY.sanity_check(1511, 7) < 0 then
|
|
|
- KSR.err("Malformed SIP message from #{KSR::PV.get('$si')}:#{KSR::PV.get('$sp')}\n");
|
|
|
- exit
|
|
|
- end
|
|
|
+ return
|
|
|
end
|
|
|
|
|
|
def ksr_route_relay()
|
|
@@ -111,6 +95,56 @@ def ksr_route_relay()
|
|
|
exit
|
|
|
end
|
|
|
|
|
|
+def ksr_route_reqinit()
|
|
|
+ # no connect for sending replies
|
|
|
+ KSR.set_reply_no_connect();
|
|
|
+ # enforce symmetric signaling
|
|
|
+ # send back replies to the source address of request
|
|
|
+ KSR.force_rport();
|
|
|
+
|
|
|
+ if !KSR.is_myself_srcip() then
|
|
|
+ srcip = KSR::KX.get_srcip();
|
|
|
+ if KSR::HTABLE.sht_match_name("ipban", "eq", srcip) > 0 then
|
|
|
+ # ip is already blocked
|
|
|
+ KSR.dbg("request from blocked IP - " + KSR::KX.get_method() +
|
|
|
+ " from " + KSR::KX.get_furi() + " (IP:" +
|
|
|
+ srcip + ":" + KSR::KX.get_srcport() + ")\n");
|
|
|
+ exit;
|
|
|
+ end
|
|
|
+ if KSR::PIKE.pike_check_req() < 0 then
|
|
|
+ KSR.err("ALERT: pike blocking " + KSR.kx.get_method() +
|
|
|
+ " from " + KSR::KX.get_furi() + " (IP:" +
|
|
|
+ srcip + ":" + KSR.kx.get_srcport() + ")\n");
|
|
|
+ KSR::HTABLE.sht_seti("ipban", srcip, 1);
|
|
|
+ exit;
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if KSR::COREX.has_user_agent() > 0 then
|
|
|
+ ua = KSR::PV.gete("$ua");
|
|
|
+ if ua.include? 'friendly' or ua.include? 'scanner' or
|
|
|
+ ua.include? 'sipcli' or ua.include? 'sipvicious' then
|
|
|
+ KSR::SL.sl_send_reply(200, "OK");
|
|
|
+ exit
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if KSR::MAXFWD.process_maxfwd(10) < 0 then
|
|
|
+ KSR::SL.sl_send_reply(483,"Too Many Hops");
|
|
|
+ exit
|
|
|
+ end
|
|
|
+
|
|
|
+ if KSR.is_OPTIONS() and KSR.is_myself_ruri() and KSR::COREX.has_ruri_user() < 0 then
|
|
|
+ KSR::SL.sl_send_reply(200, "Keepalive");
|
|
|
+ exit
|
|
|
+ end
|
|
|
+
|
|
|
+ if KSR::SANITY.sanity_check(17895, 7) < 0 then
|
|
|
+ KSR.err("Malformed SIP message from #{KSR::PV.get('$si')}:#{KSR::PV.get('$sp')}\n");
|
|
|
+ exit
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
def ksr_route_withindlg()
|
|
|
return if KSR::SIPUTILS.has_totag() < 0
|
|
|
|