事无两极,一切皆是权衡

终于发现,这个世界遍地是金钱,到处是女人!

导航

利用 openimscore 配置注册服务器

Posted on 2009-06-19 15:02  中国小可  阅读(1317)  评论(0)    收藏  举报

 

目录

说明

软件版本与运行环境

安装与配置

数据库配置

数据库安装

域信息配置

Sip终端用户信息配置

模块说明

注册服务器的主要moduel的结构:

 

 

说明

本文档目的意在说明,如何利用openimscore的特定版本,配置一个注册服务器,能够正常运行起来,并对程序的原理进行简要的说明。最终目的是为用户完全配置,再开发openimscore打基础。

本文设定用户有以下条件:

对开源项目Seropenimscore的背景有充足的了解,但对其程序的原理了解不作要求。

Linxuc语言开发经验

 

这个注册服务器具有下列功能:

对前来注册的用户进行验证,验证的方式采用WWW-Authorizer的方式,详情请参考rfc217

利用mysql数据库对用户信息进行持久保存。

 

 

软件版本与运行环境

软件版本:

 Openimscore svn 版本号663

 Svn路径: http://195.37.77.137/svnroot/repos/openimscore/ser_ims/trunk

 

操作系统:

Ubuntu8.04 LTS

安装与配置

trunk目录,执行如下命令:

Make include_group=”standard mysql” all

Make include_group=”standard mysql” install

在执行上述make 命令时如果编译出错,多数原因是因为openimscore的依赖项没有安装,可以依据出错信息,查找到依赖项,并安进行安装。

这些依赖项可能是库文件(*.s0),也可能是库文件的头文件,也可以是其它组件程序,比如mysql

 

ubuntu下可以采用 apt-get install   命令进行安装eg:

Apt-get install libc6-dev

Apt-get install mysql

 

 

如果make include_group=”standard mysql” install 被正确安装,那么文件会被安装在下列位置:

/usr/local/etc/ser/ser.cfg 

核心配置文件

/usr/local/lib/ser/module/*.so 

module文件,openimscore是采用plus-in的方式构建成的,在运行时会依据核心配置文件来动态的加载这些库文件。

/usr/bin/ser

 

到配置文件目录/usr/local/etc/ser/下把 ser.cfg换成附件中的ser.cfg

见附件。 Ser.cfg

 

 

如果以上操顺利,在命令行下运行 ./ser 注册服务器就可以运行起来。 如果不能正常运行,请确定所有的module是否全部被安装到/usr/local/lib/ser/module目录,如果没有请手动从编译目录下边考过去。

 

虽然能够正常的跑起来,但并不意味着sip终端可以前来成功的注册,因为数据库中没有注册服务器的域信息和终端用户信息。所以sip终端要想成功注册,还得先把数据库给配置完整。

 

数据库配置

数据库安装

trunk/script/mysql

运行 ./ser_mysql.sh 然后按提示添加参数,进行数据库安装。

域信息配置

注册服务器必须要有自己的域信息,它是在数据表domaindomain_attrs表中存放。对于domain表中的记录字段,一定要在domain_attrs中体现出来。这一点非常重要,如果在domain中加一条域记录,ser是不认的,因为它只读domain_attrs中的数据。

Domain(did, domain,        flags)

                    1   192.168.7.103   1

Domain_attrs(did, name ,        type,value,         flags)

            1, digest_realm , 2,   192.168.7.103 1

 

上述两条记录指明:本地注册服务器的域是192.168.7.103. 它有一个属性名字叫:digest_realm, 类型是2,值是192.168.7.103 ,flags1是指明要把这个属性加载到AVP中。

什么是AVP? 正如其名 attribute-value pair  实际上就是一个key-value。它把一个个的key-value加载到内存中,以便快速查找引用。 ser中,有个了Moudle叫做AVP,这个module是专门负责avp工作的。 在配置文件ser.cfg中有很多以$开前的变量,在ser内部的路由Engine中,这些变量会被转换成实际值,这个变量的实际值就来自于AVP 如果你把上边Domain_attrs中的flags设为0,就表明它不会加载到avp中,那么你在ser.cfg中使用$digest_realm就不会被转换为 192.168.7.103*@192.168.7.103的用户前来注册,注册服务器就不会理会。 扯远了,先回来。

 

Sip终端用户信息配置

Sip终端用户前来注册,如果它的信息在注册服务器的数据库中查不到,注册就会失败。要让一个用户注册成功,数据库中得有如下信息。

ACC 保存用户的基本信息,没有什么要说的,直接添加的的sip 终端信息就是,

Credentials 保存用户的认证信息。

Uri 定义用户的通信范围,也就是说所有前来注册的sip headto字段和form字段的uri都要在些定义,如果没有则会引起注册失败。 此处要留意flags的设置,8表示本条uri只可用来to, 16表示只可用来from ,1,表示有效。 如果你定义一个url想让它用业当to,也用来当from ,并且启用,那么它的flag要设为 8+16+1=25

模块说明

注册服务器的主要moduel的结构:

 

 

 

一个sip msg进来,主要用到了三个module:

 

           Sl所有msg进来的必经之中。它的导出函数有:

sl_filter_ACK(struct sip_msg *msg, void *bar )用来过滤ACK

sl_send_reply(struct sip_msg *msg , int code, char* reason)用来回发响应包。

           Auth_db 进行用户信息验证。

           Registear 注册操作。 比如把在线的用户状态保存到数据库,超时时把用户的状态信息从数据库中删除。

那么mysql module用在哪呢? 实际上mysql module 是一个公共服务组件:

 

它可以被其它moduel调用。但有可能不直接参与消息处理。

 

 

 

 

配置文件:

 

Code