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!

Reply via email to