天天看點

不可不知的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

繼續閱讀