Hi List
Attached is my opensips config file.
I guess this will make it much easier to spot why I am experiencing
problems.
I am still learning how opensips work, but it is a bit difficult for
me as I have no prior programming knowledge or experience.
My goal is as follows:
1. Multi-Domain Support
2. Presence
3. Instant Messaging
3. Permissions per domain and per user
(Groups should be local, Long distance (ld), International (Int),
calls allowed between users only within a specific domain (domain-
name_voip))
4. Users are Names and not numbers. ie. [email protected] and not [email protected]
.
5. Dynamic routing to Gateways
6. Integrate Asterisk with Opensips for Media (I still have to do
this, but I would first like to get the above issues resolved before
moving on to this point)
Hope the above is clear enough for the goal I am looking to achieve.
Any other suggestions how to achieve my goals will be appreciated.
Symptoms: I can't make any calls, presence and instant messaging
doesn't work at the moment.
I use Sermyadmin and created the users with a test domain and put 2
users in that domain.
I selected all the predefined groups to both users, but no calls,
presence or instant Messaging works.
For some unknown reason the Group Permissions in my previous mail are
not returning errors when starting opensips.
I am using the Building Telephony Systems with OpenSIPS 1.6 guide, but
I've picked up that what it says should work doesn't.
Thanks for the help/guidance.
Regards
Deon
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\fonttbl\f0\fmodern\fcharset0 Courier;}
{\colortbl;\red255\green255\blue255;}
\paperw11900\paperh16840\margl1440\margr1440\vieww18660\viewh15440\viewkind0
\deftab720
\pard\pardeftab720\ql\qnatural
\f0\fs24 \cf0 sips01:~# cat /etc/opensips/opensips.cfg\
#\
# $Id: opensips.cfg 7027 2010-07-15 13:48:29Z razvancrainea $\
#\
# OpenSIPS basic configuration script\
# by Anca Vamanu <[email protected]>\
#\
# Please refer to the Core CookBook at:\
# http://www.opensips.org/index.php?n=Resources.DocsCookbooks\
# for a explanation of possible statements, functions and parameters.\
#\
\
#########################################################\
# ----------------- Global Parameters ----------------- #\
#########################################################\
\
debug=6\
log_stderror=no\
log_facility=LOG_LOCAL0\
\
fork=yes\
children=4\
\
/* uncomment the following lines to enable debugging */\
#debug=6\
#log_stderror=yes\
\
/* uncomment the next line to disable TCP (default on) */\
#disable_tcp=yes\
\
/* uncomment the next line to enable the auto temporary blacklisting of\
not available destinations (default disabled) */\
#disable_dns_blacklist=no\
\
/* uncomment the next line to enable IPv6 lookup after IPv4 dns\
lookup failures (default disabled) */\
#dns_try_ipv6=yes\
\
/* uncomment the next line to disable the auto discovery of local aliases\
based on revers DNS on IPs (default on) */\
#auto_aliases=no\
\
/* uncomment the following lines to enable TLS support (default off) */\
#disable_tls = no\
#listen = tls:your_IP:5061\
#tls_verify_server = 1\
#tls_verify_client = 1\
#tls_require_client_certificate = 0\
#tls_method = TLSv1\
#tls_certificate = "//etc/opensips/tls/user/user-cert.pem"\
#tls_private_key = "//etc/opensips/tls/user/user-privkey.pem"\
#tls_ca_list = "//etc/opensips/tls/user/user-calist.pem"\
\
\
port=5060\
\
/* uncomment and configure the following line if you want opensips to\
bind on a specific interface/port/proto (default bind on all available) */\
#listen=udp:192.168.1.2:5060\
\
\
#######################################################\
# ----------------- Modules Section ----------------- #\
#######################################################\
\
#set module path\
mpath="//lib/opensips/modules/"\
\
/* uncomment next line for MySQL DB support */\
loadmodule "db_mysql.so"\
loadmodule "signaling.so"\
loadmodule "sl.so"\
loadmodule "tm.so"\
loadmodule "rr.so"\
loadmodule "maxfwd.so"\
loadmodule "usrloc.so"\
loadmodule "registrar.so"\
loadmodule "textops.so"\
loadmodule "mi_fifo.so"\
loadmodule "uri.so"\
loadmodule "acc.so"\
loadmodule "group.so"\
#loadmodule "drouting.so"\
loadmodule "dialplan.so"\
loadmodule "avpops.so"\
/* uncomment next lines for MySQL based authentication support\
NOTE: a DB (like db_mysql) module must be also loaded */\
loadmodule "auth.so"\
loadmodule "auth_db.so"\
/* uncomment next line for aliases support\
NOTE: a DB (like db_mysql) module must be also loaded */\
loadmodule "alias_db.so"\
/* uncomment next line for multi-domain support\
NOTE: a DB (like db_mysql) module must be also loaded\
NOTE: be sure and enable multi-domain support in all used modules\
(see "multi-module params" section ) */\
loadmodule "domain.so"\
/* uncomment the next two lines for presence server support\
NOTE: a DB (like db_mysql) module must be also loaded */\
loadmodule "presence.so"\
#loadmodule "presence_xml.so"\
\
################################################################\
# ----------------- Module-Specific parameters --------------- #\
################################################################\
\
# ------ avpops params ----- #\
modparam("avpops", "db_url", "mysql://opensips:opensip...@localhost/opensips")\
modparam("avpops","db_scheme","scheme0:username_col=username;domain_col=domain;value_col=acl;value_type=integer;table=subscriber")\
\
\
# ------ load the dpid field to a pseudo-variable $avp(s:dpid) ------ #\
modparam("auth_db", "load_credentials", "$avp(s:rpid)=rpid ;$avp(s:countrycode)=contrycode;$avp(s:areacode)=areacode")\'a7\
\
\
#----- dialplan params ----- #\
modparam("dialplan", "db_url","mysql://opensips:opensip...@localhost/opensips")\
## attribute of the matched line will be store in the $avp(s:dest)\
modparam("dialplan", "attrs_pvar", "$avp(s:dest)")\
\
\
#----- drouting params ----- #\
##modparam("drouting", "sort_order", 0)\
#modparam("drouting", "use_domain", 1)\
#modparam("drouting","db_url", "mysql://opensips:opensip...@localhost/opensips")\
\
\
# ----- group params ----- #\
#db_is_user_in("credentials", "Int") #Use digest credential to verify\
#db_is_user_in("credentials", "ld")\
#db_is_user_in("credentials", "local")\
#db_is_user_in("credentials", "toll_free")\
#db_is_user_in("credentials", "voip")\
#db_is_user_in("credentials", "service")\
\
modparam("group", "use_domain", 1)\
modparam("group", "db_url", "mysql://opensips:opensip...@localhost/opensips")\
#modparam("group", "table", "grp_table")\
#modparam("group", "user_column", "user")\
#modparam("group", "domain_column", "realm")\
\
\
# ----- mi_fifo params ----- #\
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")\
modparam("mi_fifo", "fifo_mode", 0666)\
\
# ----- 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", 0)\
\
\
# ----- registrar params ----- #\
/* uncomment the next line not to allow more than 10 contacts per AOR */\
#modparam("registrar", "max_contacts", 10)\
\
\
# ----- usrloc params ----- #\
#modparam("usrloc", "db_mode", 0)\
/* uncomment the following lines if you want to enable DB persistency\
for location entries */\
modparam("usrloc", "db_mode", 2)\
modparam("usrloc", "db_url",\
"mysql://opensips:opensip...@localhost/opensips")\
\
\
# ----- uri params ----- #\
modparam("uri", "use_uri_table", 0)\
\
\
# ----- acc params ----- #\
/* what sepcial events should be accounted ? */\
modparam("acc", "early_media", 1)\
modparam("acc", "report_ack", 1)\
modparam("acc", "report_cancels", 1)\
/* 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", "failed_transaction_flag", 3)\
modparam("acc", "log_flag", 1)\
modparam("acc", "log_missed_flag", 2)\
/* uncomment the following lines to enable DB accounting also */\
modparam("acc", "db_flag", 1)\
modparam("acc", "db_missed_flag", 2)\
\
\
# ----- auth_db params ----- #\
/* uncomment the following lines if you want to enable the DB based\
authentication */\
modparam("auth_db", "calculate_ha1", yes)\
modparam("auth_db", "password_column", "password")\
#modparam("auth_db", "db_url",\
# "mysql://opensips:opensip...@localhost/opensips")\
#modparam("auth_db", "load_credentials", "")\
\
\
# ----- alias_db params ----- #\
/* uncomment the following lines if you want to enable the DB based\
aliases */\
modparam("alias_db", "db_url",\
"mysql://opensips:opensip...@localhost/opensips")\
\
\
# ----- Domain params ----- #\
/* uncomment the following lines to enable multi-domain detection\
support */\
modparam("domain", "db_url",\
"mysql://opensips:opensip...@localhost/opensips")\
modparam("domain", "db_mode", 1) # Use caching\
\
\
# ----- Multi-Module params ----- #\
/* uncomment the following line if you want to enable multi-domain support\
in the modules (dafault off) */\
modparam("auth_db|usrloc|uri", "use_domain", 1)\
\
\
# ----- Presence params ----- #\
/* uncomment the following lines if you want to enable presence */\
modparam("presence|presence_xml", "db_url",\
"mysql://opensips:opensip...@localhost/opensips")\
#modparam("presence_xml", "force_active", 1)\
#modparam("presence", "server_address", "sip:my.server.ip:5060")\
modparam("presence", "presentity_table", "presentity")\
modparam("presence", "db_update_period", 100)\
modparam("presence", "mix_dialog_presence", 1)\
\
\
#####################################################\
# ----------------- Routing Logic ----------------- #\
#####################################################\
\
# main request routing logic\
\
route\{\
\
if (!mf_process_maxfwd_header("10")) \{\
log("LOG: Too many hops\\n");\
sl_send_reply("483","Too Many Hops");\
exit;\
\};\
\
\
#########################################\
#----- Sequential requests section -----#\
#########################################\
if (has_totag()) \{\
# sequential request withing a dialog should\
# take the path determined by record-routing\
if (loose_route()) \{\
if (is_method("BYE")) \{\
setflag(1); # do accounting ...\
setflag(3); # ... even if the transaction fails\
\} else if (is_method("INVITE")) \{\
# even if in most of the cases is useless, do RR for\
# re-INVITEs alos, as some buggy clients do change route set\
# during the dialog.\
record_route();\
\}\
# route it out to whatever destination was set by loose_route()\
# in $du (destination URI).\
route(1);\
\} else \{\
/* uncomment the following lines if you want to enable presence */\
if (is_method("SUBSCRIBE") && $rd == "my.server.ip") \{\
# in-dialog subscribe requests\
route(2);\
exit;\
\}\
if ( is_method("ACK") ) \{\
if ( t_check_trans() ) \{\
# non 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;\
\}\
\
######################################\
#----- Initial requests section -----#\
######################################\
# CANCEL processing\
if (is_method("CANCEL"))\
\{\
if (t_check_trans())\
t_relay();\
exit;\
\}\
\
t_check_trans();\
\
# authenticate if from local subscriber (uncomment to enable auth)\
# authenticate all initial non-REGISTER request that pretend to be\
# generated by local subscriber (domain from FROM URI is local)\
#if (!(method=="REGISTER") && from_uri==myself) /*no multidomain version*/\
#if (!(method=="REGISTER") && is_from_local()) /*multidomain version*/\
#\{\
# if (!proxy_authorize("", "subscriber")) \{\
# proxy_challenge("", "0");\
# exit;\
# \}\
# if (!db_check_from()) \{\
# sl_send_reply("403","Forbidden auth ID");\
# exit;\
# \}\
#\
# consume_credentials();\
# # caller authenticated\
# \}\
\
######################################\
#----- Preloaded Route Checking -----#\
######################################\
if (loose_route()) \{\
xlog("L_ERR",\
"Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");\
if (!is_method("ACK"))\
sl_send_reply("403","Preload Route denied");\
exit;\
\}\
\
# record routing\
if (!is_method("REGISTER|MESSAGE"))\
record_route();\
\
# account only INVITEs\
if (is_method("INVITE")) \{\
setflag(1); # do accounting\
\}\
if (!uri==myself)\
\
\
#########################################\
#----- Routing to External Domains -----#\
#########################################\
if (!is_uri_host_local())\
\{\
append_hf("P-hint: outbound\\r\\n");\
if(is_uri_host_local()) \{\
# if you have some interdomain connections via TLS\
##if($rd=="tls_domain1.net") \{\
## t_relay("tls:domain1.net");\
## exit;\
##\} else if($rd=="tls_domain2.net") \{\
## t_relay("tls:domain2.net");\
## exit;\
##\}\
route(1);\
\}\
\
# requests for my domain\
\
## uncomment this if you want to enable presence server\
## and comment the next 'if' block\
## NOTE: uncomment also the definition of route[2] from below\
if( is_method("PUBLISH|SUBSCRIBE"))\
route(2);\
\
#if (is_method("PUBLISH"))\
#\{\
# sl_send_reply("503", "Service Unavailable");\
# exit;\
\}\
\
\
if (is_method("REGISTER"))\
\{\
# authenticate the REGISTER requests (uncomment to enable auth)\
if (!www_authorize("", "subscriber"))\
\{\
www_challenge("", "0");\
exit;\
\}\
\
if (!db_check_to())\
\{\
sl_send_reply("403","Forbidden auth ID");\
exit;\
\}\
\
if (!save("location"))\
sl_reply_error();\
\
exit;\
\}\
\
if ($rU==NULL) \{\
# request with no Username in RURI\
sl_send_reply("484","Address Incomplete");\
exit;\
\}\
\
# apply DB based aliases (uncomment to enable)\
alias_db_lookup("dbaliases");\
\
\
##################################\
#----- Group Routing Params -----#\
##################################\
#Normalize the local number e.164-Windhoek(061)\
if (uri=~"^sip:[2-9][0-9]\{6\}@") \{\
if (db_is_user_in("credentials","local")) \{\
prefix("061");\
route(4);\
exit;\
\}\
else \{\
sl_send_reply("403", "No permissions for local calls");\
exit;\
\}\
\}\
if (uri=~"^sip:06[2-9][0-9]\{6\}@") \{\
if (db_is_user_in("credentials","ld")) \{\
route(4);\
exit;\
\}\
else \{\
sl_send_reply("403", "No permissions for long distance");\
exit;\
\}\
\}\
if (uri=~"^sip:00[0-9]*@") \{\
if (db_is_user_in("credentials","Int")) \{\
strip(3);\
route(4);\
exit;\
\}\
else \{\
sl_send_reply("403", "No permissions for internat. calls");\
exit;\
\}\
\}\
\
\
########################\
# ----- Dialplan ----- #\
########################\
\}\
\
######################\
# ----- Routes ----- #\
######################\
route[1] \{\
# for INVITEs enable some additional helper routes\
if (is_method("INVITE")) \{\
t_on_branch("2");\
t_on_reply("2");\
t_on_failure("1");\
\}\
\
if (!t_relay()) \{\
sl_reply_error();\
\};\
exit;\
\}\
\
\
# ----- Presence route ----- #\
/* uncomment the whole following route for enabling presence\
NOTE: do not forget to enable the call of this route from the main\
route */\
route[2]\
\{\
if (!t_newtran())\
\{\
sl_reply_error();\
exit;\
\};\
\
if(is_method("PUBLISH"))\
\{\
handle_publish();\
\}\
else\
if( is_method("SUBSCRIBE"))\
\{\
handle_subscribe();\
\}\
\
exit;\
\}\
\
route[3] \{\
##################################################\
#----- Routing to local users (usrloc table) -----#\
##################################################\
# do lookup with method filtering\
if (!lookup("location","m")) \{\
switch ($retcode) \{\
case -1:\
case -3:\
t_newtran();\
t_reply("404", "Not Found");\
exit;\
case -2:\
sl_send_reply("405", "Method Not Allowed");\
exit;\
\}\
\}\
\
# when routing via usrloc, log the missed calls also\
setflag(2);\
route(1);\
\}\
\
\
#route[4] \{\
#########################\
#----- PSTN Routes -----#\
#########################\
#######################################################\
# Send the calls to the PSTN #\
# Change the IP Address below to reflect network #\
#######################################################\
\
#--- Normal Routing ---#\
route[4] \{\
rewritehostport("gateway.ip");\
route(1);\
\}\
# --- Dynamic Routing --- # # This is what should be used #\
# if(!do_routing())\{\
# send_reply("503", "No rules found matching the URI prefix");\
# exit;\
# \}\
# flag 10 \'96 flag the transaction to handle the failure route\
# setflag(10);\
# route(1);\
# \}\
# failure_route[1] \{\
# if (t_was_cancelled()) \{\
# exit;\
# \}\
# if(isflagset(10))\{\
# if (use_next_gw()) \{\
#xlog ("next gateway $ru \\n");\
# t_on_failure("1");\
# t_relay();\
# exit;\
# \}\
# else \{\
# t_reply("503", "Service not available, no more gateways");\
# exit;\
# \}\
# \}\
#\}\
\
branch_route[2] \{\
xlog("new branch at $ru\\n");\
\}\
\
\
onreply_route[2] \{\
xlog("incoming reply\\n");\
\}\
\
\
failure_route[1] \{\
if (t_was_cancelled()) \{\
exit;\
\}\
\
# uncomment the following lines if you want to block client\
# redirect based on 3xx replies.\
##if (t_check_status("3[0-9][0-9]")) \{\
##t_reply("404","Not found");\
## exit;\
##\}\
\
# uncomment the following lines if you want to redirect the failed\
# calls to a different new destination\
##if (t_check_status("486|408")) \{\
## sethostport("192.168.2.100:5060");\
## # do not set the missed call flag again\
## t_relay();\
##\}\
\}\
sips01:~#\
}
On 18 Sep 2010, at 4:36 PM, Deon Vermeulen wrote:
Good Day
I am trying to setup Routing Parameters but get errors when checking
opensips config.
Can some one please point out what I'm doing wrong in my script
below or suggestions doing it differently will really be appreciated?
##################################
#----- Group Routing Params -----#
##################################
#Normalize the local number e.164 - Windhoek (061)
if (uri=~"^sip:[2-9][0-9]{6}@") {
if (db_is_user_in("credentials","local")) {
prefix("061");
route(4);
exit;
}
else {
sl_send_reply("403", "No permissions for local calls");
exit;
}
}
# ---- National Calls ---- #
if (uri=~"^sip:06[1-9]{6}@") {
if (db_is_user_in("credentials","ld")) {
route(4);
exit;
}
else {
sl_send_reply("403", "No permissions for long distance");
exit;
}
}
# ---- International Calls ---- #
if (uri=~"^sip:00[0-9]*@") {
if (db_is_user_in("credentials","Int")) {
strip(3);
route(4);
exit;
}
else {
sl_send_reply("403", "No permissions for internat. calls");
exit;
}
}
#########################
#----- PSTN Routes -----#
#########################
#######################################################
# Send the calls to the PSTN #
# Change the IP Address below to reflect network #
#######################################################
# ---- "Static" Routing ---- #
##route[4] {
## rewritehostport("x.x.x.x");
## route(1);
# ---- Dynamic Routing ---- # #### ---- THIS IS WHAT
SHOULD BE USED ---- #####
if(!do_routing()){
send_reply("503", "No rules found matching the URI
prefix");
exit;
}
# flag 10 – flag the transaction to handle the failure route
setflag(10);
route(1);
}
failure_route[1] {
if (t_was_cancelled()) {
exit;
}
if(isflagset(10)){
if (use_next_gw()) {
#xlog ("next gateway $ru \n");
t_on_failure("1");
t_relay();
exit;
}
else {
t_reply("503", "Service not available, no more gateways");
exit;
}
}
}
I get this error when checking the config with "opensipsctl -C /etc/
opensips/opensips.cfg
Sep 18 18:21:11 [19963] CRITICAL:core:yyerror: parse error in config
file, line 409, column 2-4: syntax error
Sep 18 18:21:11 [19963] CRITICAL:core:yyerror: parse error in config
file, line 409, column 2-4:
Sep 18 18:21:11 [19963] ERROR:core:main: bad config file (2 errors)
" if (uri=~"^sip:[2-9][0-9]{6}@") { " Starts on line 409
I have the uri.so module loaded.
Do I need the regex.so module?
I am also looking for help to setup a Group permission "VOIP_XYZ" to
only allow calls between users in a specific Domain "XYZ".
Thank you very very much in advance.
Regards
Deon
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users