I would like to send a call to voicemail server after simple timeout.
Called client replies with prov response (183 with SDP) but doesn't answer, so no 200OK message.
Is it possible to route call to voicemail server? How?
Many thanks
Hello,
We have recently installed the 4.0 Siremis/Kamailio 4.1 on Centos 6.5, to use as our SBC for our VoIP/hosted PBX. We struggled with the installation and aren't sure if it is in fact complete. We weren't able to find documentation that explained the correct setup and implementation of the server.
I would like to purchase support to help to get this up and running as well as configured to get us going.
We currently use FreePBX VMs for our customer with connections directly from our carriers to the servers. We would like to use this as a session border controller to existing deployments, another instance as the front end to the asterisk servers, and API information to connect to our portal to allow customers to maintain certain areas of their systems.
Please contact me so we can get together to get this going as soon as possible.
Thank you very much!
Mike Hancock
Managing Partner
Bridge Communications, LLC
678-845-7600 Main
678-845-7616 Fax
678-845-7602 Direct
[bridge-logo-email Signature]
* VoIP, Hosted PBX, Key, & PBX Telephone Systems
* Voice, Data, & Fiber Optic Cable Installation
* Wireless Broadband Internet & Networking
* Access Control, Audio & Video Systems
Hi to everyone,
I’m trying to implement a SBC for my network based on Kamailio
The base idea is putting Kamailio on a dual home machine (one public interface for clients and a private interface for media servers and database), using rtpproxy to handle the relaying from public to private network.
The only problem I got is that called client get the call as it was originated by one of the media server (the call contact is some like ext(a)media.server.ip), which is wrong in my opinion.
Here it is the configuration,
can you help me dealing with this?
Thank you
#!KAMAILIO
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_NAT
#!define WITH_DISPATCHER
#
# Kamailio (OpenSER) SIP Server v4.0 - default configuration script
# - web: http://www.kamailio.org
# - git: http://sip-router.org
#
# Direct your questions about this file to: <sr-users(a)lists.sip-router.org>
#
# Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php
# for an explanation of possible statements, functions and parameters.
#
# Several features can be enabled using '#!define WITH_FEATURE' directives:
#
# *** To run in debug mode:
# - define WITH_DEBUG
#
# *** To enable mysql:
# - define WITH_MYSQL
#
# *** To enable authentication execute:
# - enable mysql
# - define WITH_AUTH
# - add users using 'kamctl'
#
# *** To enable IP authentication execute:
# - enable mysql
# - enable authentication
# - define WITH_IPAUTH
# - add IP addresses with group id '1' to 'address' table
#
# *** To enable persistent user location execute:
# - enable mysql
# - define WITH_USRLOCDB
#
# *** To enable presence server execute:
# - enable mysql
# - define WITH_PRESENCE
#
# *** To enable nat traversal execute:
# - define WITH_NAT
# - install RTPProxy: http://www.rtpproxy.org
# - start RTPProxy:
# rtpproxy -l _your_public_ip_ -s udp:localhost:7722
#
# *** To enable PSTN gateway routing execute:
# - define WITH_PSTN
# - set the value of pstn.gw_ip
# - check route[PSTN] for regexp routing condition
#
# *** To enable database aliases lookup execute:
# - enable mysql
# - define WITH_ALIASDB
#
# *** To enable speed dial lookup execute:
# - enable mysql
# - define WITH_SPEEDDIAL
#
# *** To enable multi-domain support execute:
# - enable mysql
# - define WITH_MULTIDOMAIN
#
# *** To enable TLS support execute:
# - adjust CFGDIR/tls.cfg as needed
# - define WITH_TLS
#
# *** To enable XMLRPC support execute:
# - define WITH_XMLRPC
# - adjust route[XMLRPC] for access policy
#
# *** To enable anti-flood detection execute:
# - adjust pike and htable=>ipban settings as needed (default is
# block if more than 16 requests in 2 seconds and ban for 300 seconds)
# - define WITH_ANTIFLOOD
#
# *** To block 3XX redirect replies execute:
# - define WITH_BLOCK3XX
#
# *** To enable VoiceMail routing execute:
# - define WITH_VOICEMAIL
# - set the value of voicemail.srv_ip
# - adjust the value of voicemail.srv_port
#
# *** To enhance accounting execute:
# - enable mysql
# - define WITH_ACCDB
# - add following columns to database
#!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
####### Defined Values #########
# *** Value defines - IDs used later in config
#!ifdef WITH_MYSQL
# - database URL - used to connect to database server by modules such
# as: auth_db, acc, usrloc, a.s.o.
#!define DBURL “database stuff"
#!define DBASTURL "database stuff"
#!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 #########
#!ifdef WITH_DEBUG
debug=4
log_stderror=yes
#!else
debug=2
log_stderror=yes
#!endif
memdbg=5
memlog=5
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the next line to disable TCP (default on) */
#disable_tcp=yes
/* 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 */
#alias="sip.mydomain.com"
/* uncomment and configure the following line if you want Kamailio to
bind on a specific interface/port/proto (default bind on all available) */
listen=udp:172.20.20.29:5060
listen=tcp:172.20.20.29:5060
listen=udp:PUBLIC IP:5060
listen=tcp:PUBLIC IP:5060
mhomed=1
/* port to listen to
* - can be specified more than once if needed to listen on many ports */
port=5060
#!ifdef WITH_TLS
enable_tls=yes
#!endif
# 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
####### 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
#
asterisk.bindip = "172.20.20.80" desc "Asterisk IP Address"
asterisk.bindport = "5060" desc "Asterisk Port"
kamailio.bindip = "172.20.20.29" desc "Kamailio IP Address"
kamailio.bindport = "5060" desc "Kamailio Port"
####### Modules Section ########
# set paths to location of modules (to sources or installation folders)
#!ifdef WITH_SRCPATH
mpath="modules_k:modules"
#!else
mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/"
#!endif
#!ifdef WITH_MYSQL
loadmodule "db_mysql.so"
#!endif
loadmodule "mi_fifo.so"
loadmodule "kex.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 "siputils.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
loadmodule "ctl.so"
loadmodule "cfg_rpc.so"
loadmodule "mi_rpc.so"
loadmodule "acc.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"
loadmodule "rtpproxy.so"
#!endif
#!ifdef WITH_TLS
loadmodule "tls.so"
#!endif
#!ifdef WITH_ANTIFLOOD
loadmodule "htable.so"
loadmodule "pike.so"
#!endif
#!ifdef WITH_XMLRPC
loadmodule "xmlrpc.so"
#!endif
#!ifdef WITH_DEBUG
loadmodule "debugger.so"
#!endif
#!ifdef WITH_DISPATCHER
loadmodule "dispatcher.so"
loadmodule "ipops.so"
loadmodule "sqlops.so"
#!endif
loadmodule "uac.so"
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
# ----- 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 -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 1)
# ----- 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)
# ----- 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 -----
/* enable DB persistency for location entries */
#!ifdef WITH_USRLOCDB
modparam("usrloc", "db_url", DBURL)
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", MULTIDOMAIN)
#!endif
# ----- auth_db params -----
#!ifdef WITH_AUTH
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "load_credentials", "")
modparam("auth_db", "user_column", "name")
modparam("auth_db", "password_column", "sippasswd")
modparam("auth_db", "db_url", DBASTURL)
modparam("auth_db", "version_table", 0)
# ----- 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
# ----- speedial 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
# ----- rtpproxy params -----
modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
# ----- 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@PUBLIC IP")
# 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", "/usr/local/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_XMLRPC
# ----- xmlrpc params -----
modparam("xmlrpc", "route", "XMLRPC");
modparam("xmlrpc", "url_match", "^/RPC")
#!endif
#!ifdef WITH_DEBUG
# ----- debugger params -----
modparam("debugger", "cfgtrace", 1)
#!endif
#!ifdef WITH_DISPATCHER
# ------- Load-balancer params ------
modparam("dispatcher", "db_url”,”MYSQL STUFF")
modparam("dispatcher", "table_name", "dispatcher")
modparam("dispatcher", "setid_col", "setid")
modparam("dispatcher", "destination_col", "destination")
modparam("dispatcher", "force_dst", 1)
modparam("dispatcher", "flags", 3)
modparam("dispatcher", "dst_avp", "$avp(i:271)")
modparam("dispatcher", "grp_avp", "$avp(i:272)")
modparam("dispatcher", "cnt_avp", "$avp(i:273)")
modparam("dispatcher", "ds_ping_from", "sip:kamailio-sbc@172.20.20.29")
modparam("dispatcher", "ds_ping_interval",15)
modparam("dispatcher", "ds_probing_mode", 1)
modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=403;code=404;code=484;class=3")
modparam("sqlops","sqlcon",”ca=>OTHER MYSQL STUFF")
#!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);
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# 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
}
# 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;
}
# user location service
route(LOCATION);
route(RELAY);
}
# Per SIP request initial checks
route[REQINIT] {
#!ifdef WITH_ANTIFLOOD
# 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)
{
# 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 (!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;
}
}
# 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()) {
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
}
if ( is_method("ACK") ) {
# ACK is forwarded statelessy
route(NATMANAGE);
}
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 ... nore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
}
# Caller NAT detection route
route[NATDETECT] {
#!ifdef WITH_NAT
force_rport();
if (nat_uac_test("19")) {
if (is_method("REGISTER")) {
fix_nated_register();
} else {
fix_nated_contact();
}
setflag(FLT_NATS);
}
#!endif
return;
}
# Authentication route
route[AUTH] {
#if(route(FROMASTERISK))
# return;
# 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;
}
#!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", "sipusers", "1")) {
auth_challenge("$fd", "0");
exit;
}
# user authenticated - remove auth header
if(!is_method("REGISTER|PUBLISH"))
consume_credentials();
}
#!endif
return;
}
# Presence server route
route[PRESENCE] {
if(!is_method("PUBLISH|SUBSCRIBE"))
return;
#!ifdef WITH_PRESENCE
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;
}
# 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();
route(REGFWD);
exit;
}
}
# USER location service
route[LOCATION] {
if(is_method("INVITE") && (!route(FROMASTERISK))) {
# if new call from out there - send to Asterisk
# - non-INVITE request are routed directly by Kamailio
# - traffic from Asterisk is routed also directy by Kamailio
route(TOASTERISK);
exit;
}
$avp(oexten) = $rU;
if (!lookup("location")) {
$var(rc) = $rc;
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] {
# enable additional event routes for forwarded requests
# - serial forking, RTP relaying handling, a.s.o.
if (is_method("INVITE|SUBSCRIBE")) {
t_on_branch("MANAGE_BRANCH");
t_on_reply("MANAGE_REPLY");
}
if (is_method("INVITE")) {
t_on_failure("MANAGE_FAILURE");
}
if (!t_relay()) {
sl_reply_error();
}
exit;
}
# RTPProxy control
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;
route(RTPPROXY);
if (is_request()) {
if (!has_totag()) {
add_rr_param(";nat=yes");
}
}
if (is_reply()) {
if(isbflagset(FLB_NATB)) {
fix_nated_contact();
}
}
#!endif
return;
}
# manage incoming replies
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;
}
}
# RTPProxy control
route[RTPPROXY] {
if (is_method("INVITE")){
sql_query("ca", "select destination from dispatcher where destination like '%$dd%'","ra");
if($dbr(ra=>rows)>0){
$avp(duip)=$(du{s.select,-2,:});
if (is_ip_rfc1918("$avp(duip)")) {
xlog("L_INFO", "Call is going to private IPv4 Media Server Engage RTPProxy Now\n");
rtpproxy_manage("cwei","172.20.20.29");
#rtpproxy_manage("rwei");
}
}
else if(ds_is_from_list()){
if (is_ip_rfc1918("$si")) {
xlog("L_INFO", " Call is coming from a private IPv4 Media Server Engage RTPProxy Now\n");
rtpproxy_manage("cwie”,”PUBLIC IP");
#rtpproxy_manage("rwie");
}
}else if(!ds_is_from_list()){
rtpproxy_manage("rwei");
xlog("L_INFO", "NONE! RTP PROXY BOH\n");
}
}
}
# Send to Asterisk
route[TOASTERISK] {
ds_mark_dst("P");
if(!ds_select_dst("1", "4")) {
sl_send_reply("500", "Service Unavailable");
xlog("L_INFO","[$fU@$si:$sp]{$rm} No destinations available for $rd \n");
exit;
}
xlog("L_INFO","[$fU@$si:$sp]{$rm} From Outside World to Asterisk Box $du\n");
rtpproxy_manage("cawie");
route(RELAY);
exit;
}
# Test if coming from Asterisk
route[FROMASTERISK] {
if(ds_is_from_list()){
rtpproxy_manage("cawei");
xlog("L_INFO","[$fU@$si:$sp]{$rm} Call from Media-Server Cluster\n");
return 1;
}
return -1;
}
route[REGFWD] {
xlog("L_INFO","regfwd "+"sip:" +"\n");
if(!is_method("REGISTER"))
{
return;
}
$var(rip) = $sel(cfg_get.asterisk.bindip);
$uac_req(method)="REGISTER";
$uac_req(ruri)="sip:" + $var(rip) + ":" + $sel(cfg_get.asterisk.bindport);
$uac_req(furi)="sip:" + $au + "@" + $var(rip);
$uac_req(turi)="sip:" + $au + "@" + $var(rip);
$uac_req(hdrs)="Contact: <sip:" + $au + "@"
+ $sel(cfg_get.kamailio.bindip)
+ ":" + $sel(cfg_get.kamailio.bindport) + ">\r\n";
if($sel(contact.expires) != $null)
$uac_req(hdrs)= $uac_req(hdrs) + "Expires: " + $sel(contact.expires) + "\r\n";
else
$uac_req(hdrs)= $uac_req(hdrs) + "Expires: " + $hdr(Expires) + "\r\n";
uac_req_send();
}
--
Alex
PRE s.r.l.
Backbone Network Mission Control
System Engineering&Architecture Task Force
alex(a)presrl.net
http://www.presrl.it
+39 0971 471 430
+39 388 150 6886
Questo messaggio e i suoi allegati sono indirizzati esclusivamente alle persone indicate. La diffusione, copia o qualsiasi altra azione derivante dalla conoscenza di queste informazioni sono rigorosamente vietate. Qualora abbiate ricevuto questo documento per errore siete cortesemente pregati di darne immediata comunicazione al mittente e di provvedere alla sua distruzione, Grazie.
This e-mail and any attachments is confidential and may contain privileged information intended for the addressee(s) only. Dissemination, copying, printing or use by anybody else is unauthorised. If you are not the intended recipient, please delete this message and any attachments and advise the sender by return e-mail, Thanks.
Rispetta l'ambiente. Non stampare questa mail se non è necessario.
Gents,
I've been loving OpenVZ for a multitude of deployments in the last 24
months, but recently I stumbled over Docker, and I really like it!
It's simplicity is very appealing. I was trying to find good reasons not to
use Docker in production environments.
So far I couldn't get any further than that it's pretty new, and that it is
not having a great reputation in resource allocation. On a first check I
think OpenVZ is also much more flexible in it's networking, but that might
be my lack of understanding of Docker.
Typically I have my setups mixed with Postgres/Mysql and Freeswitch.
As such the question, any good reason not to use Docker?
thx!
Davy Van De Moere
Is there any way that i can create a list of ips for kamailio to compare
and do something, for example create an authorize list of ips on txt that
it can read for each invite that i receive than check a variable against
that list.
for example do a search $si on the external text file and if match do
something if it doesn't then continue the route downwards.
I am trying to create a list of banned ips but don't want to do it on the
firewall since i want to log all the bad ips and added to the list and do
something every time i receive a packed from any of the ips on the list.
is that possible with kamailio , is there any module i can use to cook this
configuration ?
Thank you
Julian
Thanks for replying !
But how to check whether a particular message received by Kamailio was sent
by UAC or SIP Server ?
Also, on the same lines - how to know whether a particular message about to
be send from Kamailio is bound to UAC or SIP Server ?
On Tue, Sep 16, 2014 at 10:51 PM, Muhammad Shahzad <shaheryarkh(a)gmail.com>
wrote:
> Hi,
>
> The network io intercept feature basically allows kamailio script writer
> to do whatever s/he may want to do with raw SIP packets (that are just
> received by kamailio or about to be sent out by kamailio), e.g. encryption,
> compression or any final touches to sip message before it is processed by
> kamailio core. That is why it is purposely kept abstract and any particular
> use or implementation is left to the script writer.
>
> In your case the encryption / decryption code is in C/C++, you can try one
> of the followings,
>
> 1. Writeup a C/C++ program that receives outgoing SIP message as text (and
> some other parameters, e.g. encryption key) in input arguments and returns
> the encrypted message in event_route [ network:msg ] and vice versa (for
> incoming messages). You can call this program directly from kamailio.cfg
> script.
>
> 2. Writeup e.g. a PERL wrapper for your encryption / decryption C/C++ code
> and call it using kamailio app_perl module within event_route [ network:msg
> ] as demonstrated in this example,
>
> http://kamailio.org/docs/modules/devel/modules/corex.html#idp125704
>
> You can also use any other kamailio language bind of you choice as well,
> e.g. Python, LUA, JAVA and so on.
>
> I would recommend the second option, as it has less processing overhead
> for kamailio.
>
> Thank you.
>
>
>
> On Tue, Sep 16, 2014 at 6:09 PM, Rahul MathuR <rahul.ultimate(a)gmail.com>
> wrote:
>
>> Hello,
>>
>> I was going through the new features and stumbled upon this new one -
>> developed by Mohd. Shahzad Shafi.
>> As already mentioned on the wiki about this module, I intend to use it
>> for my custom security layer between UACs and SIP Proxy (Kamailio) but the
>> issue is - the custom security layer (encryption/decryption code) is
>> written in C and should precisely be applied for the messages between UAC
>> and Proxy.
>>
>> Is there a way I can achieve this using Corex module since it does
>> intercept the network I/O messages ?
>>
>> Any help here would be really appreciated.
>>
>> --
>> Warm Regds.
>> MathuRahul
>>
>> _______________________________________________
>> sr-dev mailing list
>> sr-dev(a)lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>>
>>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev(a)lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
>
--
Warm Regds.
MathuRahul
Hello,
I was going through the new features and stumbled upon this new one -
developed by Mohd. Shahzad Shafi.
As already mentioned on the wiki about this module, I intend to use it for
my custom security layer between UACs and SIP Proxy (Kamailio) but the
issue is - the custom security layer (encryption/decryption code) is
written in C and should precisely be applied for the messages between UAC
and Proxy.
Is there a way I can achieve this using Corex module since it does
intercept the network I/O messages ?
Any help here would be really appreciated.
--
Warm Regds.
MathuRahul
Hello,
I'm learning Kamailio. My ultimate goal is to be able to route SIP messages
from User Agents to specific FS boxes.
I'm starting with routing REGISTER messages.
I used app_perl to randomly lookup one of the FS box's IP Address from
postgres database, then I stored the IP in avp and then in hash. It seemed
like overkill but it was the only way I could keep the FS IP address in
memory between the first REGISTER and REGISTER with Auth.
my app_perl script sets the IP as follows:
my $sth = $dbh->prepare("SELECT ip_address FROM host_machine WHERE
is_online = true ORDER BY random() LIMIT 1");
$sth->execute();
my $host_ip_address = $sth->fetchrow();
Kamailio::AVP::add(10, "sip:$host_ip_address:5060");
And here is my kamailio.cfg for REGISTERs
route[REGISTRAR]
{
if (!is_method("REGISTER|PUBLISH"))
return;
if (is_present_hf("Authorization")) {
add_path_received();
$avp(i:10) = $sht(a=>$ci::dest_server);
avp_pushto("$du", "$avp(i:10)");
} else {
perl_exec("random_server");
avp_pushto("$du", "$avp(i:10)");
$sht(a=>$ci::dest_server) = $avp(i:10);
}
t_relay();
exit;
}
"random_server" is the perl script to get the FS IP address...
Seems crude but works...
I'm sure there is probably a more elegant way to do what im trying so any
advice and criticism is appreciated, thank you!
/V
I like dispatcher but i need something more custom to my setup so I want to
attempt to emulate some basic behavior of dispatcher.
I have a simple perl script kamailio calls, it does a database query to get
an IP address and port similar to an item listed into the dispatcher list.
my question is how do I forward the SIP packet to the destination using the
database result query?
Here is what i have so far but it doesn't work because it's modifying the
request uri, where i just want to forward it to the FS server:
my $sth = $dbh->prepare("SELECT ip_address FROM host_machine WHERE
is_online = true ORDER BY random() LIMIT 1");
$sth->execute();
my $host_ip_address = $sth->fetchrow();
Kamailio::log(L_ERR, "Random server: " . $host_ip_address);
$m->rewrite_ruri('sip:' . $m->pseudoVar('$rU') . '@' . $host_ip_address .
':5060');
$sth->finish;
Thanks!
/V
In the source code of kamailio, I found some modules code in modules_k
folder. Code of same modules is also given modules_s. Examples of such
modules are registrar module and usrloc module. If we want to add somethings
like log statements etc. Where the change is supposed to be done ?
Thanks.
Regards,
Aawaise
--
View this message in context: http://sip-router.1086192.n5.nabble.com/Difference-between-modules-k-and-mo…
Sent from the Users mailing list archive at Nabble.com.