linux 添加 modssl.so,OpenSIPS离线消息功能配置

按照项目的需求,需要使用OpenSIPS的离线功能,现在将配置过程记录以备后用。

修改OpenSIPS的配置文件opensips.cfg添加

loadmodule "msilo.so"

#加载msilo模块

modparam("msilo", "db_table", "silo")

#配置离线消息存储的表silo

modparam("msilo", "db_url","mysql://opensips:opensipsrw@localhost/opensips")

#配置数据库路径

modparam("msilo", "add_date", 1)

#配置是否显示[offline message +时间]

modparam("msilo","content_type_hdr","Content-Type: text/plain\r\n")

#配置存储类型

#注释以下这段:

/*      if ( !(is_method("REGISTER")  ) ) {

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;

}

}

}

*/

#修改一下这段

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 (  0 ) setflag(TCP_PERSISTENT);

if (!save("location"))

sl_reply_error();

#增加部分--start

if (m_dump()){

log("MSILO:offline message dumped\n");

}else{

log("MSILO:no offline message dumped\n");

}

#增加部分--end

exit;

}

#修改这段

if (!lookup("location","m")) {

if (!db_does_uri_exist()) {

send_reply("420","Bad Extension");

exit;

}

#从这里开始修改

if(! t_newtran()){

sl_reply_error();

exit;

}

#以下为增加部分

if (!method=="MESSAGE")

{

if (!t_reply("404", "Not found"))

{

sl_reply_error();

};

exit;

};

log("MSILO:Message received -> storing using MSILO\n");

if (m_store("$ru")){

log("MSILO:offline message stored\n");

if (!t_reply("202","Accepted")){

sl_reply_error();

};

}else{

log("MSILO:offline message NOT stroed\n");

if(!t_reply("503","Service Unavailable")){

sl_reply_error();

};

};

exit;

}

t_on_failure("1");  #增加这句

if (isbflagset(NAT)) setflag(NAT);

#在配置文件最后增加:

failure_route[1] {

# forwarding failed -- check if the request was a MESSAGE

if (!method=="MESSAGE")

{

exit;

};

log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n");

# we have changed the R-URI with the contact address, ignore it now

if (m_store("$ou"))

{

log("MSILO: offline message stored\n");

t_reply("202", "Accepted");

}else{

log("MSILO: offline message NOT stored\n");

t_reply("503", "Service Unavailable");

};

}

#

# OpenSIPS residential configuration script

#    by OpenSIPS Solutions

#

# 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_LOCAL0

fork=yes

children=4

/* uncomment the following lines to enable debugging */

#debug=6

#fork=no

#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:eth0:5060  # CUSTOMIZE ME

#disable_tcp=yes

#disable_tls=yes

####### Modules Section ########

#set module path

mpath="/data/opensips1.11.4/lib64/opensips/modules/"

#### SIGNALING module

loadmodule "signaling.so"

#### StateLess module

loadmodule "sl.so"

#### Transaction Module

loadmodule "tm.so"

modparam("tm", "fr_timeout", 5)

modparam("tm", "fr_inv_timeout", 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")

loadmodule "msilo.so"

modparam("msilo", "db_table", "silo")

modparam("msilo", "db_url","mysql://opensips:opensipsrw@localhost/opensips")

modparam("msilo", "add_date", 1)

modparam("msilo","content_type_hdr","Content-Type: text/plain\r\n")

#### MYSQL module

loadmodule "db_mysql.so"

#### USeR LOCation module

loadmodule "usrloc.so"

modparam("usrloc", "nat_bflag", "NAT")

modparam("usrloc", "db_mode",  2)

modparam("usrloc", "db_url",

"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME

#### REGISTRAR module

loadmodule "registrar.so"

modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT")

modparam("registrar", "received_avp", "$avp(received_nh)")

/* 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", "ACC_FAILED")

/* account triggers (flags) */

modparam("acc", "db_flag", "ACC_DO")

modparam("acc", "db_missed_flag", "ACC_MISSED")

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", no)

modparam("auth_db", "password_column", "ha1")

modparam("auth_db", "db_url",

"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME

modparam("auth_db", "load_credentials", "")

#### ALIAS module

loadmodule "alias_db.so"

modparam("alias_db", "db_url",

"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME

#### 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

####  NAT modules

loadmodule "nathelper.so"

modparam("nathelper", "natping_interval", 10)

modparam("nathelper", "ping_nated_only", 1)

modparam("nathelper", "received_avp", "$avp(received_nh)")

loadmodule "rtpproxy.so"

modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:12221") # CUSTOMIZE ME

####### Routing Logic ########

# main request routing logic

route{

force_rport();

if (nat_uac_test("23")) {

if (is_method("REGISTER")) {

fix_nated_register();

setbflag(NAT);

} else {

fix_nated_contact();

setflag(NAT);

}

}

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(ACC_DO); # do accounting ...

setflag(ACC_FAILED); # ... 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();

}

if (check_route_param("nat=yes"))

setflag(NAT);

# route it out to whatever destination was set by loose_route()

# in $du (destination URI).

route(relay);

} 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")  ) ) {

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 [$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")) {

# create dialog with timeout

if ( !create_dialog("B") ) {

send_reply("500","Internal Server Error");

exit;

}

setflag(ACC_DO); # do accounting

}

if (!uri==myself) {

append_hf("P-hint: outbound\r\n");

route(relay);

}

# 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 (  0 ) setflag(TCP_PERSISTENT);

if (!save("location"))

sl_reply_error();

if (m_dump()){

log("MSILO:offline message dumped\n");

}else{

log("MSILO:no offline message dumped\n");

}

exit;

}

if ($rU==NULL) {

# request with no Username in RURI

sl_send_reply("484","Address Incomplete");

exit;

}

# apply DB based aliases

alias_db_lookup("dbaliases");

# do lookup with method filtering

if (!lookup("location","m")) {

if (!db_does_uri_exist()) {

send_reply("420","Bad Extension");

exit;

}

if(! t_newtran()){

sl_reply_error();

exit;

}

if (!method=="MESSAGE")

{

if (!t_reply("404", "Not found"))

{

sl_reply_error();

};

exit;

};

log("MSILO:Message received -> storing using MSILO\n");

if (m_store("$ru")){

log("MSILO:offline message stored\n");

if (!t_reply("202","Accepted")){

sl_reply_error();

};

}else{

log("MSILO:offline message NOT stroed\n");

if(!t_reply("503","Service Unavailable")){

sl_reply_error();

};

};

exit;

}

t_on_failure("1");

if (isbflagset(NAT)) setflag(NAT);

# when routing via usrloc, log the missed calls also

setflag(ACC_MISSED);

route(relay);

}

route[relay] {

# for INVITEs enable some additional helper routes

if (is_method("INVITE")) {

if (isflagset(NAT)) {

rtpproxy_offer("ro");

}

t_on_branch("per_branch_ops");

t_on_reply("handle_nat");

t_on_failure("missed_call");

}

if (isflagset(NAT)) {

add_rr_param(";nat=yes");

}

if (!t_relay()) {

send_reply("500","Internal Error");

};

exit;

}

branch_route[per_branch_ops] {

xlog("new branch at $ru\n");

}

onreply_route[handle_nat] {

if (nat_uac_test("1"))

fix_nated_contact();

if ( isflagset(NAT) )

rtpproxy_answer("ro");

xlog("incoming reply\n");

}

failure_route[missed_call] {

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;

##}

}

local_route {

if (is_method("BYE") && $DLG_dir=="UPSTREAM") {

acc_db_request("200 Dialog Timeout", "acc");

}

}

failure_route[1] {

# forwarding failed -- check if the request was a MESSAGE

if (!method=="MESSAGE")

{

exit;

};

log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n");

# we have changed the R-URI with the contact address, ignore it now

if (m_store("$ou"))

{

log("MSILO: offline message stored\n");

t_reply("202", "Accepted");

}else{

log("MSILO: offline message NOT stored\n");

t_reply("503", "Service Unavailable");

};

}

OpenSIPS 的详细介绍:请点这里

OpenSIPS 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值