天天看点

不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2

作者:SIP实验室

2001年9月2日,Andrei Pelinescu-Onciul在德国柏林的FhG Fokus研究所担任网络通信研究员时提交了SIP Express Router(又称SER)的第一行代码,从此开创了开源SIP软交换的基础研究和部署使用。以下示例是当初Andrei的第一行SER代码的记录。

❯ git log --reverse

commit 512dcd9838f5aeb0bfccd02cfc156067b7f02b71
Author: Andrei Pelinescu-Onciul <[email protected]>
Date:   Mon Sep 3 21:27:11 2001 +0000

     Initial revision
           

大家可不能忽略了这一行看似无实际意义的代码,也不要小看德国人的韧性。这一行代码具有跨时代的意义,同时也为开源SIP软交换和其他开源项目,例如Asterisk以及后来的FreeSWITCH树立了一个榜样,也为IP通信领域部署方式和扩展提供了更多的可能。Kamailio/OpenSIPS在SIP开源领域一直扮演着非常主要的角色。不计其数的SIP软交换使用了开源Kamailio/OpenSIPS的平台。但是,很多人可能不知道这两个平台分道扬镳之前的早期版本是什么样的。其实Kamailio/OpenSIPS是基于OpenSER克隆出来的两个子项目,而最早公开发布的OpenSER版本是1.2版本。

以后,很多用户为了从代码开始学习Kamailio或者OpenSIPS,就从最简单的代码量最少的OpenSER开始了他们的学习历程。笔者当初也多多少少有所涉猎,但遗憾的是天赋和专注力不够,没有完全将第一个版本的代码熟读理解吃透,基础不牢固,导致后面的学习就感觉艰难。真是应验了莫言先生在“晚熟”的一句话:

年轻的时候爱上什么都不为过,成熟的时候放弃什么都不为错。

虽然这也是笔者给自己找一个借口。但是我们还是回顾整个开源项目的曲曲折折。以下是项目文件夹的截图。

不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2
不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2

此版本包括大概67个核心模块,代码量大概13M大小。

不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2

当初默认的openser.cfg文件也才174行。

#
# $Id: openser.cfg 1827 2007-03-12 15:22:53Z bogdan_iancu $
#
# simple quick-start config script
# Please refer to the Core CookBook at http://www.openser.org/dokuwiki/doku.php
# for a explanation of possible statements, functions and parameters.
#

# ----------- global configuration parameters ------------------------

debug=3            # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no    # (cmd line: -E)
children=4

# Uncomment these lines to enter debugging mode 
#fork=no
#log_stderror=yes
#

port=5060

# uncomment the following lines for TLS support
#disable_tls = 0
#listen = tls:your_IP:5061
#tls_verify_server = 1
#tls_verify_client = 1
#tls_require_client_certificate = 0
#tls_method = TLSv1
#tls_certificate = "/usr/local/etc/openser/tls/user/user-cert.pem"
#tls_private_key = "/usr/local/etc/openser/tls/user/user-privkey.pem"
#tls_ca_list = "/usr/local/etc/openser/tls/user/user-calist.pem"

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

#set module path
mpath="/usr/local/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 -------------------           
不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2

当前的Kamailio或OpenSIPS已经添加了很多的模块,并且代码结构重新进行了规划。以最新发布的OpenSIPS-3.4为例,包括了大概177个模块,代码量接近100M,默认的opensips.cfg 文件大概260行脚本。

不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2
不可不知的Kamailio/OpenSIPS的前世-OpenSER-1.2

经过20年的风风雨雨,基于SER开源SIP软交换项目虽然也经历了分分合合,开源项目运营也一直缺乏有力的财务支持,但是它们对IP语音做出了很大的贡献,并且培养孵化了很多基于开源软交换的商业产品。虽然笔者这里仅提到的是一点小历史,但是这些开源项目的努力仍然是时代发展的推动剂,推动着IP通信领域的技术不断革新和进步。

参考资料:

www.opensips.org

http://kamailio.org/

http://kamailio.org.cn

www.asterisk.org.cn

www.sip.org.cn

继续阅读