Module: kamailio
Branch: master
Commit: 0f3f02353535034beaf84ea833cdd5bf30cd46a2
URL:
https://github.com/kamailio/kamailio/commit/0f3f02353535034beaf84ea833cdd5b…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2022-12-07T10:11:12+01:00
misc/examples/kemi: updated kamailio-basic-kemi-ruby.rb in sync with kemi samples
---
Modified: misc/examples/kemi/kamailio-basic-kemi-ruby.rb
---
Diff:
https://github.com/kamailio/kamailio/commit/0f3f02353535034beaf84ea833cdd5b…
Patch:
https://github.com/kamailio/kamailio/commit/0f3f02353535034beaf84ea833cdd5b…
---
diff --git a/misc/examples/kemi/kamailio-basic-kemi-ruby.rb
b/misc/examples/kemi/kamailio-basic-kemi-ruby.rb
index 37c6dddc34..30bb742332 100644
--- a/misc/examples/kemi/kamailio-basic-kemi-ruby.rb
+++ b/misc/examples/kemi/kamailio-basic-kemi-ruby.rb
@@ -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