Looks like the data received on sip port is not a sip message. Use a
traffic sniffer (tcpdump, wireshark, ngrep) to see what comes over the
network.
Cheers,
Daniel
On 22.03.22 19:13, Seyyed Soroosh Hosseinalipour wrote:
ITNOA
Description
I try to connect Kamailio and Freeswitch together, and initiate call
from Zoiper5 soft phone through Kamailio
My Kamailio config is below
|#!ifdef ACCDB_COMMENT|
| ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';|
| ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';|
| ALTER TABLE acc ADD COLUMN src_ip varchar(64) NOT NULL default '';|
| ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';|
| ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';|
| ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';|
| ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL
DEFAULT '';|
| ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT
NULL DEFAULT '';|
| ALTER TABLE missed_calls ADD COLUMN src_ip varchar(64) NOT NULL
default '';|
| ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL
DEFAULT '';|
| ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL
DEFAULT '';|
| ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT
NULL DEFAULT '';|
|#!endif|
| |
|####### Include Local Config If Exists #########|
|import_file "kamailio-local.cfg"|
| |
|####### Defined Values #########|
| |
|# *** Value defines - IDs used later in config|
|#!ifdef WITH_DEBUG|
|#!define DBGLEVEL 3|
|#!else|
|#!define DBGLEVEL 2|
|#!endif|
| |
|#!ifdef WITH_MYSQL|
|# - database URL - used to connect to database server by modules such|
|# as: auth_db, acc, usrloc, a.s.o.|
|#!trydef DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"|
|#!endif|
| |
|#!ifdef WITH_MULTIDOMAIN|
|# - the value for 'use_domain' parameters|
|#!define MULTIDOMAIN 1|
|#!else|
|#!define MULTIDOMAIN 0|
|#!endif|
| |
|# - flags|
|# FLT_ - per transaction (message) flags|
|# FLB_ - per branch flags|
|#!define FLT_ACC 1|
|#!define FLT_ACCMISSED 2|
|#!define FLT_ACCFAILED 3|
|#!define FLT_NATS 5|
| |
|#!define FLB_NATB 6|
|#!define FLB_NATSIPPING 7|
| |
|####### Global Parameters #########|
| |
|/* LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR, ... */|
|debug=DBGLEVEL|
| |
|/* set to 'yes' to print log messages to terminal or use '-E' cli
option */|
|log_stderror=yes|
| |
|memdbg=5|
|memlog=5|
| |
|log_facility=LOG_LOCAL0|
|log_prefix="{$mt $hdr(CSeq) $ci} "|
| |
|/* number of SIP routing processes for each UDP socket|
|* - value inherited by tcp_children and sctp_children when not set
explicitely */|
|children=8|
| |
|/* uncomment the next line to disable TCP (default on) */|
|disable_tcp=yes|
| |
|/* number of SIP routing processes for all TCP/TLS sockets */|
|# tcp_children=8|
| |
|/* uncomment the next line to disable the auto discovery of local aliases|
|* based on reverse DNS on IPs (default on) */|
|auto_aliases=no|
| |
|/* add local domain aliases - it can be set many times */|
|# alias="sip.mydomain.com"|
| |
|/* listen sockets - if none set, Kamailio binds to all local IP addresses|
|* - basic prototype (full prototype can be found in Wiki - Core
Cookbook):|
|* listen=[proto]:[localip]:[lport] advertise [publicip]:[pport]|
|* - it can be set many times to add more sockets to listen to */|
|listen=udp:172.28.72.99:5060 advertise 172.28.72.99:5060|
|#listen=tcp:172.28.72.99:5060|
| |
|/* life time of TCP connection when there is no traffic|
|* - a bit higher than registration expires to cope with UA behind NAT */|
|tcp_connection_lifetime=3605|
| |
|/* upper limit for TCP connections (it includes the TLS connections) */|
|tcp_max_connections=2048|
| |
|#!ifdef WITH_JSONRPC|
|tcp_accept_no_cl=yes|
|#!endif|
| |
|#!ifdef WITH_TLS|
|enable_tls=no|
| |
|/* upper limit for TLS connections */|
|tls_max_connections=2048|
|#!endif|
| |
|/* set it to yes to enable sctp and load sctp.so module */|
|enable_sctp=no|
| |
|####### Custom Parameters #########|
| |
|/* These parameters can be modified runtime via RPC interface|
|* - see the documentation of 'cfg_rpc' module.|
|*|
|* Format: group.id = value 'desc' description|
|* Access: $sel(cfg_get.group.id) or @cfg_get.group.id */|
| |
|#!ifdef WITH_PSTN|
|/* PSTN GW Routing|
|*|
|* - pstn.gw_ip: valid IP or hostname as string value, example:|
|* pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"|
|*|
|* - by default is empty to avoid misrouting */|
|pstn.gw_ip = "" desc "PSTN GW Address"|
|pstn.gw_port = "" desc "PSTN GW Port"|
|#!endif|
| |
|#!ifdef WITH_VOICEMAIL|
|/* VoiceMail Routing on offline, busy or no answer|
|*|
|* - by default Voicemail server IP is empty to avoid misrouting */|
|voicemail.srv_ip = "" desc "VoiceMail IP Address"|
|voicemail.srv_port = "5060" desc "VoiceMail Port"|
|#!endif|
| |
|####### Modules Section ########|
| |
|/* set paths to location of modules */|
|# mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/"|
| |
|#!ifdef WITH_MYSQL|
|loadmodule "db_mysql.so"|
|#!endif|
| |
|#!ifdef WITH_JSONRPC|
|loadmodule "xhttp.so"|
|#!endif|
|loadmodule "jsonrpcs.so"|
|loadmodule "kex.so"|
|loadmodule "corex.so"|
|loadmodule "tm.so"|
|loadmodule "tmx.so"|
|loadmodule "sl.so"|
|loadmodule "rr.so"|
|loadmodule "pv.so"|
|loadmodule "maxfwd.so"|
|loadmodule "usrloc.so"|
|loadmodule "registrar.so"|
|loadmodule "textops.so"|
|loadmodule "textopsx.so"|
|loadmodule "siputils.so"|
|loadmodule "xlog.so"|
|loadmodule "sanity.so"|
|loadmodule "ctl.so"|
|loadmodule "cfg_rpc.so"|
|loadmodule "acc.so"|
|loadmodule "counters.so"|
| |
|#!ifdef WITH_AUTH|
|loadmodule "auth.so"|
|loadmodule "auth_db.so"|
|#!ifdef WITH_IPAUTH|
|loadmodule "permissions.so"|
|#!endif|
|#!endif|
| |
|#!ifdef WITH_ALIASDB|
|loadmodule "alias_db.so"|
|#!endif|
| |
|#!ifdef WITH_SPEEDDIAL|
|loadmodule "speeddial.so"|
|#!endif|
| |
|#!ifdef WITH_MULTIDOMAIN|
|loadmodule "domain.so"|
|#!endif|
| |
|#!ifdef WITH_PRESENCE|
|loadmodule "presence.so"|
|loadmodule "presence_xml.so"|
|#!endif|
| |
|#!ifdef WITH_NAT|
|loadmodule "nathelper.so"|
|#!ifdef WITH_RTPENGINE|
|loadmodule "rtpengine.so"|
|#!else|
|loadmodule "rtpproxy.so"|
|#!endif|
|#!endif|
| |
|#!ifdef WITH_TLS|
|loadmodule "tls.so"|
|#!endif|
| |
|#!ifdef WITH_ANTIFLOOD|
|loadmodule "htable.so"|
|loadmodule "pike.so"|
|#!endif|
| |
|#!ifdef WITH_DEBUG|
|loadmodule "debugger.so"|
|#!endif|
| |
|# ----------------- setting module-specific parameters ---------------|
| |
| |
|# ----- jsonrpcs params -----|
|modparam("jsonrpcs", "pretty_format", 1)|
|/* set the path to RPC fifo control file */|
|# modparam("jsonrpcs", "fifo_name",
"/run/kamailio/kamailio_rpc.fifo")|
|/* set the path to RPC unix socket control file */|
|# modparam("jsonrpcs", "dgram_socket",
"/run/kamailio/kamailio_rpc.sock")|
|#!ifdef WITH_JSONRPC|
|modparam("jsonrpcs", "transport", 7)|
|#!endif|
| |
|# ----- ctl params -----|
|/* set the path to RPC unix socket control file */|
|# modparam("ctl", "binrpc",
"unix:/run/kamailio/kamailio_ctl")|
| |
|# ----- sanity params -----|
|modparam("sanity", "autodrop", 0)|
| |
|# ----- tm params -----|
|# auto-discard branches from previous serial forking leg|
|modparam("tm", "failure_reply_mode", 3)|
|# default retransmission timeout: 30sec|
|modparam("tm", "fr_timer", 30000)|
|# default invite retransmission timeout after 1xx: 120sec|
|modparam("tm", "fr_inv_timer", 120000)|
| |
|# ----- rr params -----|
|# set next param to 1 to add value to ;lr param (helps with some UAs)|
|modparam("rr", "enable_full_lr", 0)|
|# do not append from tag to the RR (no need for this script)|
|modparam("rr", "append_fromtag", 0)|
| |
|# ----- registrar params -----|
|modparam("registrar", "method_filtering", 1)|
|/* uncomment the next line to disable parallel forking via location */|
|# modparam("registrar", "append_branches", 0)|
|/* uncomment the next line not to allow more than 10 contacts per AOR */|
|# modparam("registrar", "max_contacts", 10)|
|/* max value for expires of registrations */|
|modparam("registrar", "max_expires", 3600)|
|/* set it to 1 to enable GRUU */|
|modparam("registrar", "gruu_enabled", 0)|
|/* set it to 0 to disable Path handling */|
|modparam("registrar", "use_path", 1)|
|/* save Path even if not listed in Supported header */|
|modparam("registrar", "path_mode", 0)|
| |
|# ----- acc params -----|
|/* what special events should be accounted ? */|
|modparam("acc", "early_media", 0)|
|modparam("acc", "report_ack", 0)|
|modparam("acc", "report_cancels", 0)|
|/* by default ww do not adjust the direct of the sequential requests.|
|* if you enable this parameter, be sure the enable "append_fromtag"|
|* in "rr" module */|
|modparam("acc", "detect_direction", 0)|
|/* account triggers (flags) */|
|modparam("acc", "log_flag", FLT_ACC)|
|modparam("acc", "log_missed_flag", FLT_ACCMISSED)|
|modparam("acc", "log_extra",|
| "src_user=$fU;src_domain=$fd;src_ip=$si;"|
| "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")|
|modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)|
|/* enhanced DB accounting */|
|#!ifdef WITH_ACCDB|
|modparam("acc", "db_flag", FLT_ACC)|
|modparam("acc", "db_missed_flag", FLT_ACCMISSED)|
|modparam("acc", "db_url", DBURL)|
|modparam("acc", "db_extra",|
| "src_user=$fU;src_domain=$fd;src_ip=$si;"|
| "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")|
|#!endif|
| |
|# ----- usrloc params -----|
|modparam("usrloc", "timer_interval", 60)|
|modparam("usrloc", "timer_procs", 1)|
|modparam("usrloc", "use_domain", MULTIDOMAIN)|
|/* enable DB persistency for location entries */|
|#!ifdef WITH_USRLOCDB|
|modparam("usrloc", "db_url", DBURL)|
|modparam("usrloc", "db_mode", 2)|
|#!endif|
| |
|# ----- auth_db params -----|
|#!ifdef WITH_AUTH|
|modparam("auth_db", "db_url", DBURL)|
|modparam("auth_db", "calculate_ha1", yes)|
|modparam("auth_db", "password_column", "password")|
|modparam("auth_db", "load_credentials", "")|
|modparam("auth_db", "use_domain", MULTIDOMAIN)|
| |
|# ----- permissions params -----|
|#!ifdef WITH_IPAUTH|
|modparam("permissions", "db_url", DBURL)|
|modparam("permissions", "db_mode", 1)|
|#!endif|
| |
|#!endif|
| |
|# ----- alias_db params -----|
|#!ifdef WITH_ALIASDB|
|modparam("alias_db", "db_url", DBURL)|
|modparam("alias_db", "use_domain", MULTIDOMAIN)|
|#!endif|
| |
|# ----- speeddial params -----|
|#!ifdef WITH_SPEEDDIAL|
|modparam("speeddial", "db_url", DBURL)|
|modparam("speeddial", "use_domain", MULTIDOMAIN)|
|#!endif|
| |
|# ----- domain params -----|
|#!ifdef WITH_MULTIDOMAIN|
|modparam("domain", "db_url", DBURL)|
|/* register callback to match myself condition with domains list */|
|modparam("domain", "register_myself", 1)|
|#!endif|
| |
|#!ifdef WITH_PRESENCE|
|# ----- presence params -----|
|modparam("presence", "db_url", DBURL)|
| |
|# ----- presence_xml params -----|
|modparam("presence_xml", "db_url", DBURL)|
|modparam("presence_xml", "force_active", 1)|
|#!endif|
| |
|#!ifdef WITH_NAT|
|#!ifdef WITH_RTPENGINE|
|# ----- rtpengine params -----|
|modparam("rtpengine", "rtpengine_sock",
"udp:127.0.0.1:2223")|
|#!else|
|# ----- rtpproxy params -----|
|modparam("rtpproxy", "rtpproxy_sock",
"udp:127.0.0.1:7722")|
|#!endif|
|# ----- nathelper params -----|
|modparam("nathelper", "natping_interval", 30)|
|modparam("nathelper", "ping_nated_only", 1)|
|modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)|
|modparam("nathelper", "sipping_from",
"sip:pinger@kamailio.org")|
| |
|# params needed for NAT traversal in other modules|
|modparam("nathelper|registrar", "received_avp",
"$avp(RECEIVED)")|
|modparam("usrloc", "nat_bflag", FLB_NATB)|
|#!endif|
| |
|#!ifdef WITH_TLS|
|# ----- tls params -----|
|modparam("tls", "config", "/etc/kamailio/tls.cfg")|
|#!endif|
| |
|#!ifdef WITH_ANTIFLOOD|
|# ----- pike params -----|
|modparam("pike", "sampling_time_unit", 2)|
|modparam("pike", "reqs_density_per_unit", 16)|
|modparam("pike", "remove_latency", 4)|
| |
|# ----- htable params -----|
|/* ip ban htable with autoexpire after 5 minutes */|
|modparam("htable", "htable",
"ipban=>size=8;autoexpire=300;")|
|#!endif|
| |
|#!ifdef WITH_DEBUG|
|# ----- debugger params -----|
|modparam("debugger", "cfgtrace", 1)|
|modparam("debugger", "log_level_name", "exec")|
|#!endif|
| |
|####### Routing Logic ########|
| |
| |
|/* Main SIP request routing logic|
|* - processing of any incoming SIP request starts with this route|
|* - note: this is the same as route { ... } */|
|request_route {|
| |
| # per request initial checks|
| # route(REQINIT);|
| |
| # NAT detection|
| #route(NATDETECT);|
| |
| # CANCEL processing|
| if (is_method("CANCEL")) {|
| if (t_check_trans()) {|
| route(RELAY);|
| }|
| exit;|
| }|
| |
| # handle retransmissions|
| if (!is_method("ACK")) {|
| if(t_precheck_trans()) {|
| t_check_trans();|
| exit;|
| }|
| t_check_trans();|
| }|
| |
| if (is_method("REGISTER")) {|
| xdbg("request from
gggggggggggggggggggggggggggggggggggggggggg - $rm from $fu
(IP:$si:$sp)\n");|
| }|
| rewritehostport("172.28.69.52:5060");|
| |
| # handle requests within SIP dialogs|
| # route(WITHINDLG);|
| |
| ### only initial requests (no To tag)|
| |
| # authentication|
| # route(AUTH);|
| |
| # record routing for dialog forming requests (in case they
are routed)|
| # - remove preloaded route headers|
| #remove_hf("Route");|
| #if (is_method("INVITE|SUBSCRIBE")) {|
| # record_route();|
| #}|
| |
| # account only INVITEs|
| #if (is_method("INVITE")) {|
| # setflag(FLT_ACC); # do accounting|
| #}|
| |
| # dispatch requests to foreign domains|
| #route(SIPOUT);|
| |
| ### requests for my local domains|
| |
| # handle presence related requests|
| #route(PRESENCE);|
| |
| # handle registrations|
| # route(REGISTRAR);|
| |
| #if ($rU==$null) {|
| # # request with no Username in RURI|
| # sl_send_reply("484","Address Incomplete");|
| # exit;|
| #}|
| |
| # dispatch destinations to PSTN|
| #route(PSTN);|
| |
| # user location service|
| #route(LOCATION);|
|}|
| |
|# Wrapper for relaying requests|
|route[RELAY] {|
| |
| # enable additional event routes for forwarded requests|
| # - serial forking, RTP relaying handling, a.s.o.|
| if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {|
| if(!t_is_set("branch_route"))
t_on_branch("MANAGE_BRANCH");|
| }|
| if (is_method("INVITE|SUBSCRIBE|UPDATE")) {|
| if(!t_is_set("onreply_route"))
t_on_reply("MANAGE_REPLY");|
| }|
| if (is_method("INVITE")) {|
| if(!t_is_set("failure_route"))
t_on_failure("MANAGE_FAILURE");|
| }|
| |
| if (!t_relay()) {|
| sl_reply_error();|
| }|
| exit;|
|}|
| |
|# Per SIP request initial checks|
|route[REQINIT] {|
| # no connect for sending replies|
| set_reply_no_connect();|
| # enforce symmetric signaling|
| # - send back replies to the source address of request|
| force_rport();|
| |
|#!ifdef WITH_ANTIFLOOD|
| # flood detection 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) {|
| # ip is already blocked|
| xdbg("request from blocked IP - $rm from
$fu (IP:$si:$sp)\n");|
| exit;|
| }|
| if (!pike_check_req()) {|
| xlog("L_ALERT","ALERT: pike blocking $rm
from $fu (IP:$si:$sp)\n");|
| $sht(ipban=>$si) = 1;|
| exit;|
| }|
| }|
|#!endif|
| if($ua =~
"friendly|scanner|sipcli|sipvicious|VaxSIPUserAgent") {|
| # silent drop for scanners - uncomment next line if
want to reply|
| # sl_send_reply("200", "OK");|
| exit;|
| }|
| |
| if (!mf_process_maxfwd_header("10")) {|
| sl_send_reply("483","Too Many Hops");|
| exit;|
| }|
| |
| if(is_method("OPTIONS") && uri==myself && $rU==$null)
{|
| sl_send_reply("200","Keepalive");|
| exit;|
| }|
| |
| if(!sanity_check("17895", "7")) {|
| xlog("Malformed SIP request from $si:$sp\n");|
| exit;|
| }|
|}|
| |
|# Handle requests within SIP dialogs|
|route[WITHINDLG] {|
| 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 statelessly|
| 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|
| route(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")) return;|
| |
| 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|
|route[LOCATION] {|
| |
|#!ifdef WITH_SPEEDDIAL|
| # search for short dialing - 2-digit extension|
| if($rU=~"^[0-9][0-9]$") {|
| if(sd_lookup("speed_dial")) {|
| route(SIPOUT);|
| }|
| }|
|#!endif|
| |
|#!ifdef WITH_ALIASDB|
| # search in DB-based aliases|
| if(alias_db_lookup("dbaliases")) {|
| route(SIPOUT);|
| }|
|#!endif|
| |
| $avp(oexten) = $rU;|
| if (!lookup("location")) {|
| $var(rc) = $rc;|
| route(TOVOICEMAIL);|
| t_newtran();|
| switch ($var(rc)) {|
| case -1:|
| case -3:|
| send_reply("404", "Not Found");|
| exit;|
| case -2:|
| send_reply("405", "Method Not
Allowed");|
| exit;|
| }|
| }|
| |
| # when routing via usrloc, log the missed calls also|
| if (is_method("INVITE")) {|
| setflag(FLT_ACCMISSED);|
| }|
| |
| route(RELAY);|
| exit;|
|}|
| |
|# Presence server processing|
|route[PRESENCE] {|
| if(!is_method("PUBLISH|SUBSCRIBE")) return;|
| |
| if(is_method("SUBSCRIBE") &&
$hdr(Event)=="message-summary") {|
| route(TOVOICEMAIL);|
| # returns here if no voicemail server is configured|
| sl_send_reply("404", "No voicemail service");|
| exit;|
| }|
| |
|#!ifdef WITH_PRESENCE|
|#!ifdef WITH_MSGREBUILD|
| # apply changes in case the request headers or body were
modified|
| msg_apply_changes();|
|#!endif|
| if (!t_newtran()) {|
| sl_reply_error();|
| exit;|
| }|
| |
| if(is_method("PUBLISH")) {|
| handle_publish();|
| t_release();|
| } else if(is_method("SUBSCRIBE")) {|
| handle_subscribe();|
| t_release();|
| }|
| exit;|
|#!endif|
| |
| # if presence enabled, this part will not be executed|
| if (is_method("PUBLISH") || $rU==$null) {|
| sl_send_reply("404", "Not here");|
| exit;|
| }|
| return;|
|}|
| |
|# IP authorization and user authentication|
|route[AUTH] {|
|#!ifdef WITH_AUTH|
| |
|#!ifdef WITH_IPAUTH|
| if((!is_method("REGISTER")) && allow_source_address()) {|
| # source IP allowed|
| return;|
| }|
|#!endif|
| |
| if (is_method("REGISTER") || from_uri==myself) {|
| # authenticate requests|
| if (!auth_check("$fd", "subscriber",
"1")) {|
| auth_challenge("$fd", "0");|
| exit;|
| }|
| # user authenticated - remove auth header|
| if(!is_method("REGISTER|PUBLISH"))|
| consume_credentials();|
| }|
| # 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) {|
| sl_send_reply("403","Not relaying");|
| exit;|
| }|
| |
|#!else|
| |
| # authentication not enabled - do not relay at all to
foreign networks|
| if(uri!=myself) {|
| sl_send_reply("403","Not relaying");|
| exit;|
| }|
| |
|#!endif|
| return;|
|}|
| |
|# Caller NAT detection|
|route[NATDETECT] {|
|#!ifdef WITH_NAT|
| if (nat_uac_test("19")) {|
| if (is_method("REGISTER")) {|
| fix_nated_register();|
| } else {|
| if(is_first_hop()) {|
| set_contact_alias();|
| }|
| }|
| setflag(FLT_NATS);|
| }|
|#!endif|
| return;|
|}|
| |
|# RTPProxy control and signaling updates for NAT traversal|
|route[NATMANAGE] {|
|#!ifdef WITH_NAT|
| if (is_request()) {|
| if(has_totag()) {|
| if(check_route_param("nat=yes")) {|
| setbflag(FLB_NATB);|
| }|
| }|
| }|
| if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return;|
| |
|#!ifdef WITH_RTPENGINE|
| if(nat_uac_test("8")) {|
| rtpengine_manage("replace-origin
replace-session-connection");|
| } else {|
| rtpengine_manage("trust-address replace-origin
replace-session-connection");|
| }|
|#!else|
| if(nat_uac_test("8")) {|
| rtpproxy_manage("co");|
| } else {|
| rtpproxy_manage("cor");|
| }|
|#!endif|
| |
| if (is_request()) {|
| if (!has_totag()) {|
| if(t_is_branch_route()) {|
| add_rr_param(";nat=yes");|
| }|
| }|
| }|
| if (is_reply()) {|
| if(isbflagset(FLB_NATB)) {|
| if(is_first_hop())|
| set_contact_alias();|
| }|
| }|
| |
| if(isbflagset(FLB_NATB)) {|
| # no connect message in a dialog involving NAT traversal|
| if (is_request()) {|
| if(has_totag()) {|
| set_forward_no_connect();|
| }|
| }|
| }|
|#!endif|
| return;|
|}|
| |
|# URI update for dialog requests|
|route[DLGURI] {|
|#!ifdef WITH_NAT|
| if(!isdsturiset()) {|
| handle_ruri_alias();|
| }|
|#!endif|
| return;|
|}|
| |
|# Routing to foreign domains|
|route[SIPOUT] {|
| if (uri==myself) return;|
| |
| append_hf("P-Hint: outbound\r\n");|
| route(RELAY);|
| exit;|
|}|
| |
|# PSTN GW routing|
|route[PSTN] {|
|#!ifdef WITH_PSTN|
| # check if PSTN GW IP is defined|
| if (strempty($sel(cfg_get.pstn.gw_ip))) {|
| xlog("SCRIPT: PSTN routing enabled but pstn.gw_ip
not defined\n");|
| return;|
| }|
| |
| # route to PSTN dialed numbers starting with '+' or '00'|
| # (international format)|
| # - update the condition to match your dialing rules for
PSTN routing|
| if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$")) return;|
| |
| # only local users allowed to call|
| if(from_uri!=myself) {|
| sl_send_reply("403", "Not Allowed");|
| exit;|
| }|
| |
| # normalize target number for pstn gateway|
| # - convert leading 00 to +|
| if (starts_with("$rU", "00")) {|
| strip(2);|
| prefix("+");|
| }|
| |
| if (strempty($sel(cfg_get.pstn.gw_port))) {|
| $ru = "sip:" + $rU + "@" +
$sel(cfg_get.pstn.gw_ip);|
| } else {|
| $ru = "sip:" + $rU + "@" +
$sel(cfg_get.pstn.gw_ip)
+ ":"|
| + $sel(cfg_get.pstn.gw_port);|
| }|
| |
| route(RELAY);|
| exit;|
|#!endif|
| |
| return;|
|}|
| |
|# JSONRPC over HTTP(S) routing|
|#!ifdef WITH_JSONRPC|
|event_route[xhttp:request] {|
| set_reply_close();|
| set_reply_no_connect();|
| if(src_ip!=127.0.0.1) {|
| xhttp_reply("403", "Forbidden",
"text/html",|
| "<html><body>Not allowed from
$si</body></html>");|
| exit;|
| }|
| if ($hu =~ "^/RPC") {|
| jsonrpc_dispatch();|
| exit;|
| }|
| |
| xhttp_reply("200", "OK", "text/html",|
| "<html><body>Wrong URL
$hu</body></html>");|
| exit;|
|}|
|#!endif|
| |
|# Routing to voicemail server|
|route[TOVOICEMAIL] {|
|#!ifdef WITH_VOICEMAIL|
| if(!is_method("INVITE|SUBSCRIBE")) return;|
| |
| # check if VoiceMail server IP is defined|
| if (strempty($sel(cfg_get.voicemail.srv_ip))) {|
| xlog("SCRIPT: VoiceMail routing enabled but IP not
defined\n");|
| return;|
| }|
| if(is_method("INVITE")) {|
| if($avp(oexten)==$null) return;|
| |
| $ru = "sip:" + $avp(oexten) + "@" +
$sel(cfg_get.voicemail.srv_ip)|
| + ":" +
$sel(cfg_get.voicemail.srv_port);|
| } else {|
| if($rU==$null) return;|
| |
| $ru = "sip:" + $rU + "@" +
$sel(cfg_get.voicemail.srv_ip)|
| + ":" +
$sel(cfg_get.voicemail.srv_port);|
| }|
| route(RELAY);|
| exit;|
|#!endif|
| |
| return;|
|}|
| |
|# Manage outgoing branches|
|branch_route[MANAGE_BRANCH] {|
| xdbg("new branch [$T_branch_idx] to $ru\n");|
| route(NATMANAGE);|
|}|
| |
|# Manage incoming replies|
|reply_route {|
| if(!sanity_check("17604", "6")) {|
| xlog("Malformed SIP response from $si:$sp\n");|
| drop;|
| }|
|}|
| |
|# Manage incoming replies in transaction context|
|onreply_route[MANAGE_REPLY] {|
| xdbg("incoming reply\n");|
| if(status=~"[12][0-9][0-9]") {|
| route(NATMANAGE);|
| }|
|}|
| |
|# Manage failure routing cases|
|failure_route[MANAGE_FAILURE] {|
| route(NATMANAGE);|
| |
| if (t_is_canceled()) exit;|
| |
|#!ifdef WITH_BLOCK3XX|
| # block call redirect based on 3xx replies.|
| if (t_check_status("3[0-9][0-9]")) {|
| t_reply("404","Not found");|
| exit;|
| }|
|#!endif|
| |
|#!ifdef WITH_BLOCK401407|
| # block call redirect based on 401, 407 replies.|
| if (t_check_status("401|407")) {|
| t_reply("404","Not found");|
| exit;|
| }|
|#!endif|
| |
|#!ifdef WITH_VOICEMAIL|
| # serial forking|
| # - route to voicemail on busy or no answer (timeout)|
| if (t_check_status("486|408")) {|
| $du = $null;|
| route(TOVOICEMAIL);|
| exit;|
| }|
|#!endif|
|}|
As you can see I just one thing in |request_route|
|request_route {|
| |
| # per request initial checks|
| # route(REQINIT);|
| |
| # NAT detection|
| #route(NATDETECT);|
| |
| # CANCEL processing|
| if (is_method("CANCEL")) {|
| if (t_check_trans()) {|
| route(RELAY);|
| }|
| exit;|
| }|
| |
| # handle retransmissions|
| if (!is_method("ACK")) {|
| if(t_precheck_trans()) {|
| t_check_trans();|
| exit;|
| }|
| t_check_trans();|
| }|
| |
| if (is_method("REGISTER")) {|
| xdbg("request from
gggggggggggggggggggggggggggggggggggggggggg - $rm from $fu
(IP:$si:$sp)\n");|
| }|
| rewritehostport("172.28.69.52:5060");|
The |172.28.69.52| is ip of my Freeswitch
After I try to call from Zoiper5, I get below error in Kamailio log
and Zoiper does not work.
|4(10) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|4(10) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
Troubleshooting
Reproduction
* pull official Kamailio docker image |kamailio/kamailio 5.4.6-buster|
* then run below command
|docker run --net=host --name kamailio \|
| -v /home/ssoroosh/kamailio:/etc/kamailio \|
| kamailio/kamailio:5.4.6-buster|
Debugging Data
I do not have any debug data
Log Messages
|Listening on|
| udp: 172.28.72.99 [172.28.72.99]:5060 advertise
172.28.72.99:5060|
|Aliases:|
| |
|0(1) INFO: rr [../outbound/api.h:52]: ob_load_api(): unable to import
bind_ob - maybe module is not loaded|
|0(1) INFO: rr [rr_mod.c:185]: mod_init(): outbound module not available|
|0(1) INFO: <core> [main.c:2919]: main(): processes (at least): 16 -
shm size: 67108864 - pkg size: 8388608|
|0(1) INFO: <core> [core/udp_server.c:154]:
probe_max_receive_buffer(): SO_RCVBUF is initially 212992|
|0(1) INFO: <core> [core/udp_server.c:206]:
probe_max_receive_buffer(): SO_RCVBUF is finally 425984|
|13(19) INFO: jsonrpcs [jsonrpcs_sock.c:443]: jsonrpc_dgram_process():
a new child 0/19|
|15(21) INFO: ctl [io_listener.c:210]: io_listen_loop():
io_listen_loop: using epoll_lt as the io watch method (auto detected)|
|2(8) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|2(8) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|2(8) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||��||>|
|2(8) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|4(10) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|4(10) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|4(10) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|4(10) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|1(7) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|1(7) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|1(7) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|1(7) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|3(9) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|3(9) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|3(9) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|3(9) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|5(11) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|5(11) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|5(11) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|5(11) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|8(14) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|8(14) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|8(14) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|8(14) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|1(7) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|1(7) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|1(7) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|1(7) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|5(11) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|5(11) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|5(11) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|5(11) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|4(10) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|4(10) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|4(10) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|4(10) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|5(11) INFO: <core> [core/parser/parse_fline.c:156]:
parse_first_line(): ERROR:parse_first_line: method not followed by SP|
|5(11) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 0)|
|5(11) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|5(11) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|6(12) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|6(12) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||��||>|
|6(12) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|7(13) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|7(13) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|7(13) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|8(14) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|8(14) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|8(14) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|2(8) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|2(8) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|2(8) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|4(10) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|4(10) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|4(10) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|1(7) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|1(7) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|1(7) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|3(9) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|3(9) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|3(9) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|5(11) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|5(11) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|5(11) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|6(12) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|6(12) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|6(12) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
|7(13) ERROR: <core> [core/parser/parse_fline.c:271]:
parse_first_line(): parse_first_line: bad message (offset: 41)|
|7(13) ERROR: <core> [core/parser/msg_parser.c:681]: parse_msg():
ERROR: parse_msg: message=<||���||>|
|7(13) ERROR: <core> [core/receive.c:310]: receive_msg(): core parsing
of SIP message failed (172.28.64.1:51370/1)|
SIP Traffic
My pcap is attached
sip.zip <https://github.com/kamailio/kamailio/files/8326814/sip.zip>
Possible Solutions
I have not any solution yet.
Additional Information
* *Kamailio Version* - output of |kamailio -v|
|version: kamailio 5.4.6 (x86_64/linux)|
|flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS,
DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, Q_MALLOC,
F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX,
FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR,
USE_DST_BLACKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED|
|ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_URI_SIZE
1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB|
|poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.|
|id: unknown|
|compiled with gcc 8.3.0|
* *Operating System*:
|Linux master 5.4.0-104-generic #118-Ubuntu SMP Wed Mar 2 19:02:41 UTC
2022 x86_64 GNU/Linux|
| |
|root@master:/home# lsb_release -a|
|No LSB modules are available.|
|Distributor ID: Debian|
|Description: Debian GNU/Linux 10 (buster)|
|Release: 10|
|Codename: buster|
*How to resolve this?*
thanks
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
* sr-users(a)lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
*
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users