Hi, I'm newbie with opensips. I have followed the instructions of the video tutorial to install, and Ican register phones, I can call from one to one, but I can not config a trunk with other pbx.
I used the scriot of menuconfig to get the file opensips_residential and the opensips_trunking, when i config the /etc/init.d/opensips i modify the row begining OPTIONS=" to include the two files, but i can not enable the gateways.
Any help?????
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
If i use the trunking cfg file i can not registar any phones.
How do i config the file /etc/init.d/opensips to use both files residential and trunking..?
Thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Well, to combine both registration and trunks in the same time, you need to do some work by yourself in the opensips config file: use as starting point the scripts for trunking and for residential -> try to merge their functionality
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi to all. After several tests and errors, at least I have a config file to work internal calls and calls to other PBX using dialplan.
This is the config file
#
# $Id: opensips_residential.m4 9042 2012-05-17 13:57:10Z vladut-paiu $
#
# OpenSIPS residential configuration script
# by OpenSIPS Solutions <team@opensips-solutions.com>
#
# This script was generated via "make menuconfig", from
# the "Residential" scenario.
# You can enable / disable more features / functionalities by
# re-generating the scenario with different options.#
#
# Please refer to the Core CookBook at:
# http://www.opensips.org/Resources/DocsCookbooks
# for a explanation of possible statements, functions and parameters.
#
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL1
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#log_stderror=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
/* comment the next line to enable the auto discovery of local aliases
based on revers DNS on IPs */
auto_aliases=no
listen=udp:192.171.89.111:5060 # CUSTOMIZE ME
disable_tcp=no
listen=tcp:192.171.89.111:5060 # CUSTOMIZE ME
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
#### ACCounting module
loadmodule "acc.so"
/* what special events should be accounted ? */
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0)
/* by default we 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)
modparam("acc", "failed_transaction_flag", 3)
/* account triggers (flags) */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
modparam("acc", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
# validate the sequential request against dialog
if ( $DLG_status!=NULL && !validate_dialog() ) {
xlog("In-Dialog $rm from $si (callid=$ci) is not valid according to dialog\n");
## exit;
}
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(22);
} else {
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;
}
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
if ( !(is_method("REGISTER") || is_from_gw() ) ) {
if (from_uri==myself)
{
# authenticate if from local subscriber
# authenticate all initial non-REGISTER request that pretend to be
# generated by local subscriber (domain from FROM URI is local)
if (!proxy_authorize("", "subscriber")) {
proxy_challenge("", "0");
exit;
}
if (!db_check_from()) {
sl_send_reply("403","Forbidden auth ID");
exit;
}
consume_credentials();
# caller authenticated
} else {
# if caller is not local, then called number must be local
if (!uri==myself) {
send_reply("403","Rely forbidden");
exit;
}
}
}
# preloaded route checking
if (loose_route()) {
xlog("L_ERR",
"Attempt to route with preloaded Route's ");
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")) {
#create dialog with timeout
if ( !create_dialog("B") ) {
send_reply("500","Internal Server Error");
exit;
}
setflag(1); # do accounting
if(!dp_translate("0","$rU/$rU")){
send_reply("420", "Invalid Destination");
xlog ("invalido");
exit;
}
xlog("$avp(s:dest)");
if ($avp(s:dest)=="usrloc") {
#Route to usrloc
xlog("intrno");
# do lookup with method filtering
if (!lookup("location","m")) {
if (!db_does_uri_exist()) {
xlog("bad extension");
send_reply("420","Bad Extension");
exit;
}
xlog("Interno fallo");
t_newtran();
t_reply("404", "Not Found");
exit;
#route(1);
}
route(1);
}
if ($avp(s:dest)=="agp") {
#route to pstn
xlog("Enlace AGP");
route(6);
}
if ($avp(s:dest)=="pio") {
#route to pstn
xlog("Enlace SSCC");
route(89);
}
if ($avp(s:dest)=="grx") {
#route to pstn
xlog("Enlace Granada");
route(22);
}
send_reply("420", "Invalid Extension");
exit;
}
# requests for my domain
if (is_method("PUBLISH|SUBSCRIBE"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests
if (!www_authorize("", "subscriber"))
{
www_challenge("", "0");
exit;
}
if (!db_check_to())
{
sl_send_reply("403","Forbidden auth ID");
exit;
}
if ( proto==TCP || 0 ) setflag(7);
if (!save("location"))
sl_reply_error();
exit;
}
# do lookup with method filtering
if (!lookup("location","m")) {
if (!db_does_uri_exist()) {
send_reply("420","Bad Extension");
exit;
}
xlog("Interno fallo");
t_newtran();
t_reply("404", "Not Found");
exit;
}
# when routing via usrloc, log the missed calls also
setflag(2);
route(1);
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.22.10:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.6.10:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.89.150:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# 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();
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# 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;
}
branch_route {
xlog("new branch at $ru\n");
}
onreply_route {
xlog("incoming reply\n");
}
failure_route {
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")) {
##t_reply("404","Not found");
## exit;
##}
}
local_route {
if (is_method("BYE") && $DLG_dir=="UPSTREAM") {
acc_db_request("200 Dialog Timeout", "acc");
}
}
I use 4 routes, route 1 for internals, route 22, 6 y 89 for calling to other 3 PBXs.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi, I'm newbie with opensips. I have followed the instructions of the video tutorial to install, and Ican register phones, I can call from one to one, but I can not config a trunk with other pbx.
I used the scriot of menuconfig to get the file opensips_residential and the opensips_trunking, when i config the /etc/init.d/opensips i modify the row begining OPTIONS=" to include the two files, but i can not enable the gateways.
Any help?????
Use only the cfg file produced by the "trunking" scenario.
Regards,
Bogdan
If i use the trunking cfg file i can not registar any phones.
How do i config the file /etc/init.d/opensips to use both files residential and trunking..?
Thanks
In a standard trunking scenario there is no need to registration - so maybe you do not have a trunking case after all.
Can i use opensips as a standard pbx?
How do i create a cfg file to use phones and trunks?
Well, to combine both registration and trunks in the same time, you need to do some work by yourself in the opensips config file: use as starting point the scripts for trunking and for residential -> try to merge their functionality
Hi to all. After several tests and errors, at least I have a config file to work internal calls and calls to other PBX using dialplan.
This is the config file
#
# $Id: opensips_residential.m4 9042 2012-05-17 13:57:10Z vladut-paiu $
#
# OpenSIPS residential configuration script
# by OpenSIPS Solutions <team@opensips-solutions.com>
#
# This script was generated via "make menuconfig", from
# the "Residential" scenario.
# You can enable / disable more features / functionalities by
# re-generating the scenario with different options.#
#
# Please refer to the Core CookBook at:
# http://www.opensips.org/Resources/DocsCookbooks
# for a explanation of possible statements, functions and parameters.
#
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL1
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#log_stderror=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
/* comment the next line to enable the auto discovery of local aliases
based on revers DNS on IPs */
auto_aliases=no
listen=udp:192.171.89.111:5060 # CUSTOMIZE ME
disable_tcp=no
listen=tcp:192.171.89.111:5060 # CUSTOMIZE ME
disable_tls=yes
####### Modules Section ########
#set module path
mpath="/usr/local/opensips/lib/opensips/modules/"
#### SIGNALING module
loadmodule "signaling.so"
#### StateLess module
loadmodule "sl.so"
#### Transaction Module
loadmodule "tm.so"
modparam("tm", "fr_timer", 5)
modparam("tm", "fr_inv_timer", 30)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "onreply_avp_mode", 1)
#### Record Route Module
loadmodule "rr.so"
/* do not append from tag to the RR (no need for this script) */
modparam("rr", "append_fromtag", 0)
#### MAX ForWarD module
loadmodule "maxfwd.so"
#### SIP MSG OPerationS module
loadmodule "sipmsgops.so"
#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("mi_fifo", "fifo_mode", 0666)
#### URI module
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
modparam("uri", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### AVPOPS module
loadmodule "avpops.so"
modparam("avpops", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
modparam("avpops", "avp_table", "usr_preferences")
#### PERMISSIONS module
loadmodule "permissions.so"
modparam("permissions", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### MYSQL module
loadmodule "db_mysql.so"
#### USeR LOCation module
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", 10)
modparam("usrloc", "db_mode", 0)
#### REGISTRAR module
loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", 7)
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
#### ACCounting module
loadmodule "acc.so"
/* what special events should be accounted ? */
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0)
/* by default we 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)
modparam("acc", "failed_transaction_flag", 3)
/* account triggers (flags) */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
modparam("acc", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### AUTHentication modules
loadmodule "auth.so"
loadmodule "auth_db.so"
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
modparam("auth_db", "load_credentials", "")
loadmodule "domain.so"
# --- domain params ---
modparam("domain", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
modparam("domain", "db_mode", 1) # Use caching
loadmodule "alias_db.so"
# --- alias_db params ---
modparam("alias_db", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
loadmodule "group.so"
# --- Group ---
modparam("group","db_url","mysql://opensips:opensipsrw@localhost/opensips")
#### DIALOG module
loadmodule "dialog.so"
modparam("dialog", "dlg_match_mode", 1)
modparam("dialog", "default_timeout", 21600) # 6 hours timeout
modparam("dialog", "db_mode", 2)
modparam("dialog", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### DIALPLAN module
loadmodule "dialplan.so"
modparam("dialplan", "attrs_pvar", "$avp(s:dest)")
modparam("dialplan", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### DYNAMMIC ROUTING module
loadmodule "drouting.so"
modparam("drouting", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
####### Routing Logic ########
# main request routing logic
route{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
# validate the sequential request against dialog
if ( $DLG_status!=NULL && !validate_dialog() ) {
xlog("In-Dialog $rm from $si (callid=$ci) is not valid according to dialog\n");
## exit;
}
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(22);
} else {
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;
}
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
if ( !(is_method("REGISTER") || is_from_gw() ) ) {
if (from_uri==myself)
{
# authenticate if from local subscriber
# authenticate all initial non-REGISTER request that pretend to be
# generated by local subscriber (domain from FROM URI is local)
if (!proxy_authorize("", "subscriber")) {
proxy_challenge("", "0");
exit;
}
if (!db_check_from()) {
sl_send_reply("403","Forbidden auth ID");
exit;
}
consume_credentials();
# caller authenticated
} else {
# if caller is not local, then called number must be local
if (!uri==myself) {
send_reply("403","Rely forbidden");
exit;
}
}
}
# preloaded route checking
if (loose_route()) {
xlog("L_ERR",
"Attempt to route with preloaded Route's ");
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")) {
#create dialog with timeout
if ( !create_dialog("B") ) {
send_reply("500","Internal Server Error");
exit;
}
setflag(1); # do accounting
if(!dp_translate("0","$rU/$rU")){
send_reply("420", "Invalid Destination");
xlog ("invalido");
exit;
}
xlog("$avp(s:dest)");
if ($avp(s:dest)=="usrloc") {
#Route to usrloc
xlog("intrno");
# do lookup with method filtering
if (!lookup("location","m")) {
if (!db_does_uri_exist()) {
xlog("bad extension");
send_reply("420","Bad Extension");
exit;
}
xlog("Interno fallo");
t_newtran();
t_reply("404", "Not Found");
exit;
#route(1);
}
route(1);
}
if ($avp(s:dest)=="agp") {
#route to pstn
xlog("Enlace AGP");
route(6);
}
if ($avp(s:dest)=="pio") {
#route to pstn
xlog("Enlace SSCC");
route(89);
}
if ($avp(s:dest)=="grx") {
#route to pstn
xlog("Enlace Granada");
route(22);
}
send_reply("420", "Invalid Extension");
exit;
}
# requests for my domain
if (is_method("PUBLISH|SUBSCRIBE"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests
if (!www_authorize("", "subscriber"))
{
www_challenge("", "0");
exit;
}
if (!db_check_to())
{
sl_send_reply("403","Forbidden auth ID");
exit;
}
if ( proto==TCP || 0 ) setflag(7);
if (!save("location"))
sl_reply_error();
exit;
}
# do lookup with method filtering
if (!lookup("location","m")) {
if (!db_does_uri_exist()) {
send_reply("420","Bad Extension");
exit;
}
xlog("Interno fallo");
t_newtran();
t_reply("404", "Not Found");
exit;
}
# when routing via usrloc, log the missed calls also
setflag(2);
route(1);
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.22.10:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.6.10:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
rewritehostport("192.171.89.150:5060");
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# 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();
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
route {
# 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;
}
branch_route {
xlog("new branch at $ru\n");
}
onreply_route {
xlog("incoming reply\n");
}
failure_route {
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")) {
##t_reply("404","Not found");
## exit;
##}
}
local_route {
if (is_method("BYE") && $DLG_dir=="UPSTREAM") {
acc_db_request("200 Dialog Timeout", "acc");
}
}
I use 4 routes, route 1 for internals, route 22, 6 y 89 for calling to other 3 PBXs.