[sr-dev] git:master: kamailio-oob.cfg: sync'ed basic common parts with kamailio.cfg

Daniel-Constantin Mierla miconda at gmail.com
Sun Sep 21 20:50:52 CEST 2014


Module: sip-router
Branch: master
Commit: a232785704f682ce05dddd747c8a9fdc23c67244
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a232785704f682ce05dddd747c8a9fdc23c67244

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Sun Sep 21 20:49:53 2014 +0200

kamailio-oob.cfg: sync'ed basic common parts with kamailio.cfg

---

 etc/kamailio-oob.cfg |  196 +++++++++++++++++++++++++------------------------
 1 files changed, 100 insertions(+), 96 deletions(-)

diff --git a/etc/kamailio-oob.cfg b/etc/kamailio-oob.cfg
index 879d4c9..2aa3289 100644
--- a/etc/kamailio-oob.cfg
+++ b/etc/kamailio-oob.cfg
@@ -41,6 +41,7 @@
 #     - install RTPProxy: http://www.rtpproxy.org
 #     - start RTPProxy:
 #        rtpproxy -l _your_public_ip_ -s udp:localhost:7722
+#     - option for NAT SIP OPTIONS keepalives: WITH_NATSIPPING
 #
 # *** To enable PSTN gateway routing execute:
 #     - define WITH_PSTN
@@ -497,8 +498,7 @@ request_route {
 	route(NATDETECT);
 
 	# CANCEL processing
-	if (is_method("CANCEL"))
-	{
+	if (is_method("CANCEL")) {
 		if (t_check_trans())
 			t_relay();
 		exit;
@@ -509,6 +509,11 @@ request_route {
 
 	### only initial requests (no To tag)
 
+	# handle retransmissions
+	if(t_precheck_trans()) {
+		t_check_trans();
+		exit;
+	}
 	t_check_trans();
 
 	# authentication
@@ -521,8 +526,7 @@ request_route {
 		record_route();
 
 	# account only INVITEs
-	if (is_method("INVITE"))
-	{
+	if (is_method("INVITE")) {
 		setflag(FLT_ACC); # do accounting
 	}
 
@@ -537,10 +541,9 @@ request_route {
 	# handle registrations
 	route(REGISTRAR);
 
-	if ($rU==$null)
-	{
+	if ($rU==$null) {
 		# request with no Username in RURI
-		sl_send_reply("484","Address Incomplete");
+		sl_send_reply("484", "Address Incomplete");
 		exit;
 	}
 
@@ -580,21 +583,22 @@ route[REQINIT] {
 	# flood dection from same IP and traffic ban for a while
 	# be sure you exclude checking trusted peers, such as pstn gateways
 	# - local host excluded (e.g., loop to self)
-	if(src_ip!=myself)
-	{
-		if($sht(ipban=>$si)!=$null)
-		{
+	if(src_ip!=myself) {
+		if($sht(ipban=>$si)!=$null) {
 			# ip is already blocked
 			xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
 			exit;
 		}
-		if (!pike_check_req())
-		{
+		if (!pike_check_req()) {
 			xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
 			$sht(ipban=>$si) = 1;
 			exit;
 		}
 	}
+	if($ua =~ "friendly-scanner") {
+		sl_send_reply("200", "OK");
+		exit;
+	}
 #!endif
 
 	if (!mf_process_maxfwd_header("10")) {
@@ -602,8 +606,12 @@ route[REQINIT] {
 		exit;
 	}
 
-	if(!sanity_check("1511", "7"))
-	{
+	if(is_method("OPTIONS") && uri==myself && $rU==$null) {
+		sl_send_reply("200","Keepalive");
+		exit;
+	}
+
+	if(!sanity_check("1511", "7")) {
 		xlog("Malformed SIP message from $si:$sp\n");
 		exit;
 	}
@@ -611,66 +619,67 @@ route[REQINIT] {
 
 # Handle requests within SIP dialogs
 route[WITHINDLG] {
-	if (has_totag()) {
-		# sequential request withing a dialog should
-		# take the path determined by record-routing
-		if (loose_route()) {
-			route(DLGURI);
-			if (is_method("BYE")) {
-				setflag(FLT_ACC); # do accounting ...
-				setflag(FLT_ACCFAILED); # ... even if the transaction fails
-			}
-			else if ( is_method("ACK") ) {
-				# ACK is forwarded statelessy
-				route(NATMANAGE);
-			}
-			else if ( is_method("NOTIFY") ) {
-				# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
-				record_route();
-			}
-			route(RELAY);
-		} else {
-			if (is_method("SUBSCRIBE") && uri == myself) {
-				# in-dialog subscribe requests
-				route(PRESENCE);
-				exit;
-			}
-			if ( is_method("ACK") ) {
-				if ( t_check_trans() ) {
-					# no loose-route, but stateful ACK;
-					# must be an ACK after a 487
-					# or e.g. 404 from upstream server
-					t_relay();
-					exit;
-				} else {
-					# ACK without matching transaction ... ignore and discard
-					exit;
-				}
-			}
-			sl_send_reply("404","Not here");
+	if (!has_totag()) return;
+
+	# sequential request withing a dialog should
+	# take the path determined by record-routing
+	if (loose_route()) {
+		route(DLGURI);
+		if (is_method("BYE")) {
+			setflag(FLT_ACC); # do accounting ...
+			setflag(FLT_ACCFAILED); # ... even if the transaction fails
+		}
+		else if ( is_method("ACK") ) {
+			# ACK is forwarded statelessy
+			route(NATMANAGE);
+		}
+		else if ( is_method("NOTIFY") ) {
+			# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
+			record_route();
 		}
+		route(RELAY);
 		exit;
 	}
+
+	if (is_method("SUBSCRIBE") && uri == myself) {
+		# in-dialog subscribe requests
+		route(PRESENCE);
+		exit;
+	}
+	if ( is_method("ACK") ) {
+		if ( t_check_trans() ) {
+			# no loose-route, but stateful ACK;
+			# must be an ACK after a 487
+			# or e.g. 404 from upstream server
+			t_relay();
+			exit;
+		} else {
+			# ACK without matching transaction ... ignore and discard
+			exit;
+		}
+	}
+	sl_send_reply("404", "Not here");
+	exit;
 }
 
 # Handle SIP registrations
 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();
+	if (!is_method("REGISTER")) return;
 
-		exit;
+	if(isflagset(FLT_NATS)) {
+		setbflag(FLB_NATB);
+#!ifdef WITH_NATSIPPING
+		# do SIP NAT pinging
+		setbflag(FLB_NATSIPPING);
+#!endif
 	}
+	if (!save("location"))
+		sl_reply_error();
+
+	exit;
 }
 
-# USER location service
+# User location service
 route[LOCATION] {
 
 #!ifdef WITH_SPEEDDIAL
@@ -703,8 +712,7 @@ route[LOCATION] {
 	}
 
 	# when routing via usrloc, log the missed calls also
-	if (is_method("INVITE"))
-	{
+	if (is_method("INVITE")) {
 		setflag(FLT_ACCMISSED);
 	}
 }
@@ -715,20 +723,15 @@ route[PRESENCE] {
 		return;
 
 #!ifdef WITH_PRESENCE
-	if (!t_newtran())
-	{
+	if (!t_newtran()) {
 		sl_reply_error();
 		exit;
-	};
+	}
 
-	if(is_method("PUBLISH"))
-	{
+	if(is_method("PUBLISH")) {
 		handle_publish();
 		t_release();
-	}
-	else
-	if( is_method("SUBSCRIBE"))
-	{
+	} else if( is_method("SUBSCRIBE")) {
 		handle_subscribe();
 		t_release();
 	}
@@ -736,8 +739,7 @@ route[PRESENCE] {
 #!endif
 	
 	# if presence enabled, this part will not be executed
-	if (is_method("PUBLISH") || $rU==$null)
-	{
+	if (is_method("PUBLISH") || $rU==$null) {
 		sl_send_reply("404", "Not here");
 		exit;
 	}
@@ -749,15 +751,13 @@ route[AUTH] {
 #!ifdef WITH_AUTH
 
 #!ifdef WITH_IPAUTH
-	if((!is_method("REGISTER")) && allow_source_address())
-	{
+	if((!is_method("REGISTER")) && allow_source_address()) {
 		# source IP allowed
 		return;
 	}
 #!endif
 
-	if (is_method("REGISTER") || from_uri==myself)
-	{
+	if (is_method("REGISTER") || from_uri==myself) {
 		# authenticate requests
 		if (!auth_check("$fd", "subscriber", "1")) {
 			auth_challenge("$fd", "0");
@@ -769,8 +769,7 @@ route[AUTH] {
 	}
 	# 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)
-	{
+	if (from_uri!=myself && uri!=myself) {
 		sl_send_reply("403","Not relaying");
 		exit;
 	}
@@ -787,7 +786,8 @@ route[NATDETECT] {
 		if (is_method("REGISTER")) {
 			fix_nated_register();
 		} else {
-			add_contact_alias();
+			if(is_first_hop())
+				set_contact_alias();
 		}
 		setflag(FLT_NATS);
 	}
@@ -808,16 +808,19 @@ route[NATMANAGE] {
 	if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))
 		return;
 
-	rtpproxy_manage();
+	rtpproxy_manage("co");
 
 	if (is_request()) {
 		if (!has_totag()) {
-			add_rr_param(";nat=yes");
+			if(t_is_branch_route()) {
+				add_rr_param(";nat=yes");
+			}
 		}
 	}
 	if (is_reply()) {
 		if(isbflagset(FLB_NATB)) {
-			add_contact_alias();
+			if(is_first_hop())
+				set_contact_alias();
 		}
 	}
 #!endif
@@ -836,11 +839,11 @@ route[DLGURI] {
 
 # Routing to foreign domains
 route[SIPOUT] {
-	if (!uri==myself)
-	{
-		append_hf("P-hint: outbound\r\n");
-		route(RELAY);
-	}
+	if (uri==myself) return;
+
+	append_hf("P-hint: outbound\r\n");
+	route(RELAY);
+	exit;
 }
 
 # PSTN GW routing
@@ -897,7 +900,7 @@ route[XMLRPC] {
 }
 #!endif
 
-# route to voicemail server
+# Routing to voicemail server
 route[TOVOICEMAIL] {
 #!ifdef WITH_VOICEMAIL
 	if(!is_method("INVITE"))
@@ -920,20 +923,20 @@ route[TOVOICEMAIL] {
 	return;
 }
 
-# manage outgoing branches
+# Manage outgoing branches
 branch_route[MANAGE_BRANCH] {
 	xdbg("new branch [$T_branch_idx] to $ru\n");
 	route(NATMANAGE);
 }
 
-# manage incoming replies
+# Manage incoming replies
 onreply_route[MANAGE_REPLY] {
 	xdbg("incoming reply\n");
 	if(status=~"[12][0-9][0-9]")
 		route(NATMANAGE);
 }
 
-# manage failure routing cases
+# Manage failure routing cases
 failure_route[MANAGE_FAILURE] {
 	route(NATMANAGE);
 
@@ -959,6 +962,7 @@ failure_route[MANAGE_FAILURE] {
 #!endif
 }
 
+# Handling HTTP events
 #!ifdef WITH_XHTTP
 event_route[xhttp:request] {
 #!ifdef WITH_XHTTP_RPC




More information about the sr-dev mailing list