使用OpenSER构建电话通信系统——第五章(2)

使用OpenSips构建电话通信系统 使用OpenSips构建电话通信系统,详细介绍如何使用opensips开发、构建一个通信系统。 立即下载

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!

安装 MySQL支持

为了允许持续性,换句话说,为了能够将用户的证书保存在数据库中,也就是说,为了避免这些数据在断电和重启的情况下被毁,OpenSER需要配置使用如MySQL的数据库。在你继续之前,确认你已经安装了MySQL并且已经编译并安装了OpenSER MySQL模块是非常重要的。

在第三章,我们在编译OpenSER的时候加入了对MySQL的支持。检查/lib/openser/modules文件夹看看有没有mysql.so模块。

在你可以使用带有MySQL的OpenSER之前,还有一些任务需要去做。

步骤1:确认mysql.so模块在指定的文件夹中是否存在:

ls /lib/openser/mokules/mysql.so

如果该模块不存在,那么请重新编译OpenSER以支持MySQL。

步骤2:使用openser_mysql.sh shell脚本创建MySQL表。

这个脚本将使用下面的参数来创建MySQL表:

DBNAME="openser"

DBHOST="localhost"

DBRWUSER="openser"

DBRWPW="openserrw"

DBROUSER="openserro"

DBROPW="openserro"

DBROOTUSER="root"

cd/sbin

./openser_mysql.sh create

MySQL password for root:

Enter password:

Enter password:

creating database openser ...

Core OpenSER tables succesfully created.

Install presence related tables ?(y/n):y

creating presence tables into openser ...

Presence tables succesfully created.

Install extra tables - imc,cpl,siptrace,domainpolicy ?(y/n):y

creating extra tables into openser ...

Extra tables succesfully created.

Install SERWEB related tables ?(y/n):n

Domain (realm) for the default user 'admin': voffice.com.br

需要密码才能够访问该数据库。这时候,密码是空的。该脚本会询问密码两次;两次都要按回车键。此脚本也会询问域(realm);要告诉管理者用户的域。

步骤3:配置OpenSER使用MySQL。

按照下面文件的高亮部分进行修改:

# ------------------ module loading ----------------------------------

#set module path

mpath="//lib/openser/modules/"

# Uncomment this if you want to use SQL database

loadmodule "mysql.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"

# Uncomment this if you want digest authentication

# mysql.so must be loaded !

loadmodule "auth.so"

loadmodule "auth_db.so"

# ----------------- setting module-specific parameters ---------------

# -- mi_fifo params --

modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")

# -- usrloc params --

#modparam("usrloc", "db_mode", 0)

# Uncomment this if you want to use SQL database

# for persistent storage and comment the previous line

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

# -- auth params --

# Uncomment if you are using auth module

#

modparam("auth_db", "calculate_ha1", yes)

#

# If you set "calculate_ha1" parameter to yes (which true in this config),

# uncomment also the following parameter)

#

modparam("auth_db", "password_column", "password")

# -- rr params --

# add value to ;lr param to make some broken UAs happy

modparam("rr", "enable_full_lr", 1)

# ------------------------- request routing logic -------------------

# main routing logic

route{

# initial sanity checks -- messages with

# max_forwards==0, or excessively long requests

if (!mf_process_maxfwd_header("10")) {

sl_send_reply("483","Too Many Hops");

exit;

};

if (msg:len >= 2048 ) {

sl_send_reply("513", "Message too big");

exit;

};

# we record-route all messages -- to make sure that

# subsequent messages will go through our proxy; that's

# particularly good if upstream and downstream entities

# use different transport protocol

if (!method=="REGISTER")

record_route();

# subsequent messages withing a dialog should take the

# path determined by record-routing

if (loose_route()) {

# mark routing logic in request

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

route(1);

};

if (!uri==myself) {

# mark routing logic in request

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

# if you have some interdomain connections via TLS

#if(uri=~"@tls_domain1.net") {

# t_relay("tls:domain1.net");  # exit;

#} else if(uri=~"@tls_domain2.net") {

# t_relay("tls:domain2.net");

# exit;

#}

route(1);

};   # if the request is for other domain use UsrLoc

# (in case, it does not work, use the following command

# with proper names and addresses in it)

if (uri==myself) {

if (method=="REGISTER") {

# Uncomment this if you want to use digest.

if (!www_authorize("", "subscriber")) {

www_challenge("", "0");

exit;

};

save("location");

exit;

};

if (!proxy_authorize("","subscriber")) {

proxy_challenge("","0");

exit;

};

consume_credentials();

lookup("aliases");

if (!uri==myself) {

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

route(1);

};             # native SIP destinations are handled using our USRLOC DB

if (!lookup("location")) {

sl_send_reply("404", "Not Found");

exit;

};

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

};

route(1);

}

route[1] {

# send it out now; use stateful forwarding as it works

reliably

# even for UDP2TCP

if (!t_relay()) {

sl_reply_error();

};

exit;

}

Openser.cfg文件分析(openser.cfg File Analysis)

现在,配置已经做好准备来对REGISTER事务进行认证了。我们可以将AOR保存在位置数据库中来实现持续性。这就允许我们可以重启服务器而不会丢失AOR记录和影响UACs。

另一个重要的方面是,OpenSER现在要对REGISTER请求进行认证。之后我们要对INVITE请求的认证进行实现。现在需要的是UACs的注册认证。

loadmodule "mysql.so"

loadmodule "auth.so"

loadmodule "auth_db.so"

MySQL支持可以通过在要加载的模块列表中添加包含mysql.so语句来轻松实现。MySQL模块要在其他模块之前加载。有些模块,例如uri_db,需要依靠MySQL来加载。

认证的能力是由auth.so和auth_db.so模块提供的。这些模块被用来使能认证功能。模块uri_db列出了一些认证函数。

modparam("auth_db", "calculate_ha1", 1)

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

参数calculate_hal告诉auth_db模块要使用明文密码。我们将使用明文密码来与SerMyAdmin兼容。

db_mode参数告诉usrloc模块存储或获取数据库中的AOR记录。

if (method=="REGISTER") {

# Uncomment this if you want to use digest auth.

if (!www_authorize("", "subscriber")) {

www_challenge("", "0");

exit;

};

save("location");

exit;

} else if (method=="INVITE") {

if (!proxy_authorize("","subscriber")) {

proxy_challenge("","0");

exit;

};

consume_credentials();

};

在上面的代码片段中,我们检查了INVITE和REGISTER方法的认证过程。

如果是REGISTER方法,并且证书是正确的,那么www_authorize返回true。在认证完成后,系统保存该UAC的位置信息数据。第一个参数指定了用户被进行认证的域(realm)。Realm通常是域名(domain name)或主机名(host name)。第二个参数告诉OpenSER到底要寻找那一个MySQL表。

www_challenge("","0");

如果包中不含有Authorize头域,我们则向UAC发送”401 unauthorized”消息。它告诉UAC重新传送包含证书的请求消息。www_challenge命令有两个参数。第一个是UAC用来计算摘要的域(realm)。第二个参数则会影响发送给UAC消息中的qop参数的使用。1表明在摘要中要包含qop。有些话机可能不支持qop。你可以在这种状况下试试将参数设为0。

consume_credentials();

我们不想冒险将摘要证书发送到服务器上。因此,我们使用函数consume_credentials()函数在将请求中继前移除Authorize头域。

if (!proxy_authorize("","subscriber")) {

我们使用proxy_authorize()函数来对认证头进行检查。如果我们不检查证书我们会被认为是一个比较开放的中继器。它的参数与www_authorize的参数相同。


<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
阅读(1078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
opensips网站数据离线包 本人缓存了opensips官网网页共网络不好的网友使用, 立即下载

相关推荐

SeetaFace6人脸活体检测C++代码实现Demo

活体检测是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。 人脸识别系统存在被伪造攻击的风险。因此需要在人脸识别系统中加入活体检测,验证用户是否为真实活体本人操作,以防止照片、视频、以及三维模型的入侵,从而帮助用户甄别欺诈行为,保障用户的利益。

mickey2007的博客 3472

SQL Mode 及相关问题

回到首页☞ 定位 暂时跳过吧,目前没用到。 回到首页☞

JDIT的博客 229

软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端)

软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端)一、Charles简介二、Charles下载与安装三、Charles配置(1)Charles-PC端的配置如下:(2)过滤网络请求:(3)Charles抓取HTTPS请求包前置条件:(4)Charles抓取HTTPS双向认证包:关注我,免费领取学习资料 嘿。大家好,我是4U: 做过 APP 测试的同学都会接触抓包工具,通过抓包工具可以获取到客户端与服务端接口的交互数据,在实际测试APP的过程中,我们往往会发现服务端返回 的参数字段错

leboxy的博客 4154

安装opensips时创建MySQL表_Centos7.6安装opensips并实现通话成功

先是使用opensips官方的docker尝试,好不容易装好了,软电话(sipphone)上注册不成功,主要是我docker又是装在VirtualBox的虚拟机里的,网络结构致使调试困难,直接新开一个虚拟机,很顺利的就安装成功并且实现局域网终端之间通话。1. 准备工作1.1. 安装依赖以下是我的环境镜像CentOS7.6.1810.x86_64需要安装的,至于怎么使用虚拟机安装CentOS,看这篇...

weixin_42504785的博客 1009

信息流广告ROI线性预测看板&投放分析监控看板展示&数据处理入库全流程

此看板数据量太大,在tableau public部署运行速度极慢,因此用图片作展示 数据清洗

Larry_Westside的博客 2317

RAG——从0到1快速搭建RAG应用

本文介绍了基于LangChain框架构建RAG(检索增强生成)应用的技术方案,涵盖核心模块选型与实现流程。技术栈包括:LangChain应用框架、pypdf文档解析、RecursiveCharacterTextSplitter文本分块、bge-small-zh-v1.5向量模型、Faiss向量库和通义千问大模型。文章详细说明了开发环境配置步骤,包括虚拟环境创建、依赖库安装和模型下载。核心代码分为索引、检索、生成三大流程,索引流程完成PDF文档解析、分块和向量化存储;检索流程实现查询向量化和相似度匹配;生成流

小志的博客 592

在 ubuntu 12.10 中安装 opensips 1.8.2

在 ubuntu 12.10 中安装 opensips 1.8.2

jhope的专栏 777

MWORKS 2025a电气模型库实战:手把手教你搭建全桥LLC电路(附避坑指南)

本文详细介绍了如何使用MWORKS 2025a电气模型库搭建全桥LLC电路,包括环境准备、电路拓扑构建、参数优化及故障诊断。通过实战案例和避坑指南,帮助电源工程师高效设计谐振转换器,提升转换效率至98%以上。文章特别强调了Modelica模型库在电气系统建模中的关键作用。

s8t9u0v1w的博客 603

金仓数据库KingbaseES主备和读写分离集群使用手册(部署操作说明)

金仓数据库KingbaseES主备和读写分离集群使用手册(部署操作说明)

arthemis_14的博客 2072

C# Winform使用Monaco打造代码编辑器

本文介绍了如何在Winform项目中集成Monaco代码编辑器。通过NuGet安装WebView2控件,创建monaco-editor.html文件加载编辑器,并实现与C#代码的交互。关键步骤包括:初始化WebView2环境、配置Monaco编辑器参数、设置代码变更监听事件以及处理C#与JavaScript之间的通信。注意事项提示了依赖库安装问题的解决方法。该方案实现了功能完整的代码编辑器,支持代码自动保存和实时显示功能。

遇见--专栏 346

关于React Native Android找不到node的错误

最近,按照官方文档初始化了一个React Native项目,但是在Android端运行的时候,报了如下的一个错误。 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:recordFilesBeforeBundleCommandDebug'. Caused by: org.gradle.process.internal.ExecException: A problem occurred starting p

xiangzhihong8的专栏 4247

Ser/OpenSer(Linux下安装过程及一些配置说明)--支持TLS

  SIP快速路由器(SER)严格遵守SIP标准。它用C语言编写,采用GPL许可证发行,已被移植到Linux和Solaris上。除了充当SIP服务器外,SER还可以为短消息服务(SMS)、即时通信(IM)、RADIUS记账和授权以及基于Web的用户配置充当网关。基于SER的商用产品可从iptelorg购得。可启动的LiveCD版软件也可以获得,它扩展了SER的功能,添加了用起来方便得多的基于Web

zysee的专栏 5159

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

提供《使用OpenSER构建电话通信系统》中文翻译版本下载

提供《使用OpenSER构建电话通信系统》中文翻译版本下载    感谢网友将这本《使用OpenSER构建电话通信系统》整理城doc文档,方便了大家,在此非常之感谢,感谢这个开源的世界,感谢互联网。《使用OpenSER构建电话通信系统》 管理员在2009年8月13日编辑了该文章文章。 -->

老黑 865

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用OpenSER构建电话通信系统——第三章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!这一章前半部分的内容是介绍系统安装和openser安装的,图片较多,而本blog文章中嵌入图片太过费时,所以直接将pdf文档链接公布如下,请直接下载。使用OpenSER构建电话通信系统——第三章(1) 管理员在2009年8月13日编辑了该文章文章。 -->

老黑 436

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

使用OpenSER构建VoIP通话 (转载)

使用OpenSER构建VoIP通话   使用OpenSER构建电话通信系统——第一章(1)       前言:openser已经成为opensips项目,但是本书的内容绝大部分是适合于学习相关知识的。所以还是针对原书原封不动的做的翻译。   使用OpenSER

Android 开发 6668

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用OpenSER构建电话通信系统——第五章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢! Openserctl shell脚本 Openserctl工具是安装在/usr/sbin上的shell脚本。被用来使用命令行的方式来对OpenSER进行管理。可以用来进行: l         启动,终止,重启Open

Android 开发 1660

使用OpenSER构建电话通信系统——第五章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!第五章:用MySQL添加认证(Adding Authentication with MySQL)在这一章中我们将学到如何使用几种数据库后端来对SIP请求进行鉴定并提供诸如位置和别名表等数据的持续性。最主要的是,我们将使用MySQL来做每一件事。这一章分为两个部分。第一个部分,我们将学到如何实现认证,第二部分我们将学到如何处理不同方向的通话。这一

老黑 1086

使用OpenSER构建电话通信系统——第二章

<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt:5.0pt; page-break-before:always;tab-stops:0cm">注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt

老黑 776

使用OpenSER构建电话通信系统——第四章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!<h1 style="margin-left:0cm;text-indent:0cm;mso-line-height-alt:5.0pt; page-break-before:always;tab-stops:0cm"><span lang="AR-SA" style="font-size:14.0pt; font-family:宋体;ms

老黑 1045

使用OpenSER构建电话通信系统——第七章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!实验——使用LCR特性(Lab——using the LCR Feature)<p class="MsoNormal" style="text-indent:21.0pt;line-height:22.0pt;mso-line-height-rule: exactly"><span style="font-family:宋体;mso-asci

老黑 804

使用OpenSER构建电话通信系统——第八章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!     检查配置文件(Ispecting the Configureation File) 我们的脚本正变得难以debug。现在,让我们介绍XLOG模块。它实现了XLOG函数。这个函数与LOG()函数很相似,但是它允许你在消息中使用诸如请求URI($ru)的伪变量。下面有一个使用XLOG的例子。 loadmodule "xlog

老黑 725

使用OpenSER构建电话通信系统——第三章(2)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!OpenSER v1.2 目录结构 <p class="MsoNormal" style="text-indent:21.0pt;line-height:22.0pt;mso-line-height-rule: exactly"><span lang="AR-SA" style="mso-bidi-font-size:10.5pt;f

老黑 501

使用OpenSER构建电话通信系统——第一章(1)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!前言:openser已经成为opensips项目,但是本书的内容绝大部分是适合于学习相关知识的。所以还是针对原书原封不动的做的翻译。使用OpenSER构建电话通信系统 Building Telephony Systems with OpenSER第一章:SIP介绍(Introduction to SIP) 会话初始化协议是互联网工程

老黑 763
上一篇: 使用OpenSER构建电话通信系统——第四章(2)
下一篇: 使用OpenSER构建电话通信系统——第五章(3)
老黑徒
博客等级 码龄23年 9粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值