Testing the Kamailio Outbound Module

13715209697--- via sr-users <[email protected]>
Newsgroups gmane.comp.voip.ser
Message-ID <[email protected]>
Hi, team

# Testing the Kamailio Outbound Module

Kamailio version: 6.0.5

OS: Debian 12

Kamailio IP: 192.168.149.18, Port: 5060

FreeSWITCH (REGISTRAR) IP: 192.168.149.18, Port: 6666

MicroSIP IP: 192.168.149.35, transport protocol: TCP

## Signaling Flows
MicroSIP => REGISTER => Kamailio => FreeSWITCH, this is OK
MicroSIP => INVITE => Kamailio => FreeSWITCH, this is OK also

However, executing `fs_cli -x 'show registrations as xml'` on FreeSWITCH returns the following:

```xml
<result row_count="1">
  <row row_id="1">
    <reg_user>1001</reg_user>
    <realm>192.168.149.18</realm>
    <token>992b228842f841fda057da1883e5317a</token>
    <url>sofia/internal/sip:[email protected]:49676;transport=TCP;ob;fs_path=%3Csip%3A192.168.149.18%3Blr%3E</url>
    <expires>1769678856</expires>
    <network_ip>192.168.149.18</network_ip>
    <network_port>5060</network_port>
    <network_proto>tcp</network_proto>
    <hostname>debian</hostname>
    <metadata></metadata>
  </row>
</result>
```

Command executed:
`fs_cli -x 'originate user/1001 &park'`

The INVITE message is as follows:

```
INVITE sip:[email protected]:59527;transport=TCP;ob SIP/2.0
Via: SIP/2.0/UDP 192.168.149.18:6666;rport;branch=z9hG4bK0mU9ryZD57S0p
Route: <sip:192.168.149.18;lr>
Max-Forwards: 70
From: <sip:[email protected]>;tag=97mDae4gQHXFa
To: <sip:[email protected]:59527;transport=TCP;ob>
Call-ID: a59d2625-7790-123f-979c-0800279269e8
CSeq: 110284145 INVITE
Contact: <sip:[email protected]:6666>
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: outbound, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 764
X-FS-Support: update_display,send_info
Remote-Party-ID: <sip:[email protected]>;party=calling;screen=yes;privacy=off
```
...

However, the log shows "client to registrar" instead of "registrar to client".

What is the reason for this?

The contents of kamailio.cfg are as follows:

```
#!KAMAILIO
#
# Edge proxy configuration
#

listen=tcp:192.168.149.18:5060
listen=udp:192.168.149.18:5060

#!subst "/REGISTRAR_IP/192.168.149.18/"
#!subst "/REGISTRAR_PORT/6666/"
#!substdef "/FLOW_TIMER/20/"

####### Global Parameters #########

auto_aliases=no

debug=2
log_stderror=no
log_facility=LOG_LOCAL0
log_prefix="{$mt $hdr(CSeq) $ci} "
fork=yes
children=4
alias="example.com"
#mpath="/usr/lib64/kamailio/modules"
tcp_connection_lifetime=30 # FLOW_TIMER + 10
force_rport=yes

####### Modules Section ########

loadmodule "tm.so"
loadmodule "sl.so"
loadmodule "outbound.so"
loadmodule "rr.so"
loadmodule "path.so"
loadmodule "pv.so"
loadmodule "maxfwd.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
loadmodule "ctl.so"
loadmodule "textops.so"
loadmodule "siputils.so"
loadmodule "stun.so"

# ----------------- setting module-specific parameters ---------------

# ----- tm params -----
modparam("tm", "failure_reply_mode", 3)

# ----- rr params -----
modparam("rr", "append_fromtag", 0)

####### Routing Logic ########

request_route {
	route(REQINIT);

	if (is_method("CANCEL")) {
		if (t_check_trans()) {
			route(RELAY);
		}
		exit;
	}

	route(WITHINDLG);

	t_check_trans();

	if (is_method("REGISTER")) {
		remove_hf("Route");
		add_path();
		$du = "sip:REGISTRAR_IP:REGISTRAR_PORT";
	} else {
		if (is_method("INVITE|SUBSCRIBE"))
			record_route();

		if (@via[2] == "") {
			# From client so route to registrar...
			xinfo("client to registrar\n");
			if ($rU == $null) {
				sl_send_reply("484", "Address Incomplete");
				exit;
			}
			remove_hf("Route");
			$du = "sip:REGISTRAR_IP:REGISTRAR_PORT";
		} else {
			# From registrar so route using "Route:" headers...
			xinfo("registrar to client\n");
			if (!loose_route()) {
				switch($rc) {
				case -2:
					sl_send_reply("403", "Forbidden");
					exit;
				default:
					xlog("L_ERR", "in request_route\n");
					sl_reply_error();
					exit;
				}
			}

			t_on_failure("FAIL_OUTBOUND");
		}
	}

	route(RELAY);
}

route[RELAY] {
	if (!t_relay()) {
		sl_reply_error();
	}
	exit;
}

route[REQINIT] {
	if (!mf_process_maxfwd_header("10")) {
		sl_send_reply("483","Too Many Hops");
		exit;
	}

	if(!sanity_check("1511", "7"))
	{
		xlog("Malformed SIP message from $si:$sp\n");
		exit;
	}
}

route[WITHINDLG] {
	if (has_totag()) {
		if (!loose_route()) {
			switch($rc) {
			case -2:
				sl_send_reply("403", "Forbidden");
				exit;
			default:
				if (is_method("ACK")) {
					if ( t_check_trans() ) {
						route(RELAY);
						exit;
					} else {
						exit;
					}
				}
				sl_send_reply("404","Not Found");
			}
		} else {
			if (is_method("NOTIFY")) {
				record_route();
			}
			route(RELAY);
		}
		exit;
	}
}

onreply_route {
	if (!t_check_trans()) {
		drop;
	}

	if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) {
		remove_hf("Flow-Timer");
		if ($(hdr(Require)[*])=~"outbound")
			insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID");
	}
}

failure_route[FAIL_OUTBOUND] {
	if (t_branch_timeout() && !t_branch_replied()) {
		send_reply("430", "Flow Failed");
	}
}
```
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions -- [email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the sender!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.