• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            Kamailio學習【二】--自定義模塊

            更新時間:2023-12-09 21:21:06 閱讀: 評論:0

            2023年12月9日發(作者:守望明天)

            -

            Kamailio學習【二】--自定義模塊

            Kamailio學習【二】--自定義模塊

            寫在前面的話:里面的截圖除非特殊說明,都是來自sr_module.h

            一、關于版本

            定義每一個模塊都要說明這個模塊的結構,以便于讓kamailio能解釋它,包括模塊導出函數的結構cmd_export_和模塊整體的結構

            module_exports。在sr_module.h中有兩種版本的模塊結構,一個是SER,一個是kam,是這樣定義的:

            這里的cmd_export_t和module_exports即可代表r的也可以代表kam的。在自己定義模塊時候直接由結構的內容體現是哪種版本(個

            數)。

            模塊導出函數結構:

            模塊結構:

            有默認使用哪種版本的定義,猜想應該是從這里默認定義的:

            默認版本是SER的,但是沒找到用另一個版本kam所代表的數值,在json_mod.c中就是用的kam版本的(下圖)

            但是里面的版本聲明 MODULE_VERSION仍然是SER的意思,這里面應該有一些定義是沒注意到的,也就是什么時候可以用kam版本,這

            個我沒找到,希望有大神能幫我解惑。

            二、結構具體含義二、

            1、對于模塊導出函數結構:

            第一個參數是該module導出到opensips腳本中的函數名。

            第二個參數是對應的具體執行函數。cmd_function的函數定義為

            從第二個參數起都是字符串。具體使用多少個參數由結構體第三個參數決定。

            對于cmd_function,返回值小于0表示函數執行出錯,返回值等于0會使該次腳本執行結束;返回值大于0表示函數執行正常。

            第四個參數fixup function,主要用于將腳本傳入的參數轉換成int、正則表達式等其他種類的參數。常用的類型轉換定義在mod_fix.h中,

            一般直接調用。

            第五個參數用于描述該導出函數可以在哪段路由中被執行。可選的值定義在route.h中:

            kam版本比r的多了一個free_fixup_function參數,用于釋放fixup function執行時申請的內存。

            2、對于模塊結構:

            char* name: 模塊的名字。

            r_cmd_export_t* cmds:前面定義的模塊導出函數,這里如果一個模塊里多于兩個導出函數的情況下就要定義r_cmd_export_t類型的

            結構體數組cmds[],每一個元素都是一個r_cmd_export_t類型的結構體,各對應一個導出函數。

            rpc_export_t* rpc_methods:遠程程序調用的導出函數(rpc.h中定義的)。

            param_export_t* params:參數導出,很多參數的時候也是定義一個param_export_t類型的數組,每個數組元素都是對這個參數的說

            明,例如acc_mod.c中的184行(部分):

            init_function init_f: 模塊初始化化函數,只在啟動的時候被執行一次。

            respon_function respon_f: 用于回復,有yes或no,null也行,不知道做什么的。

            destroy_function destroy_f: 模塊銷毀時被調用。

            onbreak_function onbreak_f;:不知道做什么的,onbreak_function在120行:

            typedef void (*onbreak_function)(struct sip_msg*);是指向sip_msg結構體的一個指針。

            child_init_function init_child_f: 模塊在每個子進程中的初始化函數。因kamailio的架構是多進程的,像數據庫連接這些必須在每個子進程

            內自己創建一份。

            unsigned int dlflags: 一般都把值設為DEFAULT_DLFLAG,后面的stat_、nn_、pv_還沒看是做什么的。

            proc_export_t* procs: 定義模塊自己的獨立運行進程。

            三、編寫一個簡單的模塊

            1、寫模塊主體代碼test.c文件

            在目錄/usr/local/src/kamailio-5.1/kamailio/src/modules(也就是下載kamailio源碼的位置那)建立一個名為test的文件夾,編寫模塊主

            體代碼test.c文件。

            cd /usr/local/src/kamailio-5.1/kamailio/src/modules

            sudo mkdir test

            cd test

            sudo vi test.c /*根據自己常用的編輯器來即可*/

            test.c文件如下:

            /*

            /*

            *時間:2018年3月29日16點24分

            *作者:cxy

            *模塊名:test

            *導出函數名:my_test

            *功能:在初始化的時候在日志輸出“”,在每一個request(invite,subscribe,

            *register,cancel等等)到來時候輸出“Receive message 123456”,為了看是否模塊添加成功

            *輸入:123456(或者其他)

            *輸出:Receive message 123456(或者其他)

            */

            #include "../../core/sr_module.h"

            MODULE_VERSION

            static int mod_init(void);

            static int my_test(struct sip_msg* _msg, char *param);

            /* Exported functions */

            static cmd_export_t cmds[]={

            {"my_test", (cmd_function)my_test, 1, 0, ANY_ROUTE}, /*在任何路由塊都能用*/

            {0, 0, 0, 0, 0}

            };

            /* Module interface */

            struct r_module_exports exports = {

            "test", /**< null terminated module name */

            cmds, /**< null terminated array of the exported

            commands */

            0, /**< null terminated array of exported rpc methods */

            0, /**< null terminated array of the exported module parameters */

            mod_init, /**< Initialization function */

            0, /**< function ud for respons, returns yes or no; can be null */

            0, /**< function called when the module should be "destroyed", e.g: on r exit;

            can be null */

            0,

            0, /**< function called by all process after the fork */

            };

            static int my_test(struct sip_msg* _msg, char *param)

            {

            LM_INFO("Receive message %sn", param);

            return 1;

            }

            static int mod_init(void)

            {

            LM_INFO("");

            return 0;

            }

            2、編寫Makefile文件

            如果這個module不需要連接其他額外的庫,只要把NAME后面生成庫的名字改成。如下所示:

            #

            #test makefile

            #

            #WARNING: do not run this directly. it should be run by the master Makefile

            include ../../

            auto_gen=

            NAME=

            LIBS=

            DEFS+=-DSER_MOD_INTERFACE

            include ../../s

            3、編譯

            編譯這個模塊,除非在src目錄下的主Makefile的exclude_modules中加入了這個模塊的名字,就不編譯這個模塊。

            cd /usr/local/src/kamailio-5.1/kamailio

            sudo make all

            sudo make install

            (按理說不用再次安裝吧?但是如果不再安裝的話我發現生成的庫文件不能被導入/usr/local/lib64/kamailio/modules中,還是說是應

            該要安裝一遍的?)

            4、載入新模塊

            不載入的話kamailio不會自己添加這個功能的,在文件中相應位置加入以下語句:

            loadmodule ""

            把新編寫的模塊加入路由之中,在路由邏輯的request邏輯下插入:

            my_test("123456");

            5、驗證模塊是否添加成功

            PS:這里有什么說錯的麻煩能告訴我一下,謝謝!作為一個kamailio初學者,我感覺要學的東西太多了,這可能是和我專業不是計算機相

            關的有關吧。知識是一點點積累的,需要什么就去學什么就好了,涉及到基礎的東西就去系統的看看教材或視頻。今天花了一下午把昨天學

            到的東西記錄在這里,在這里就順便給自己打打氣,加油cxy。

            任重而道遠,與君共勉。

            -

            Kamailio學習【二】--自定義模塊

            本文發布于:2023-12-09 21:21:05,感謝您對本站的認可!

            本文鏈接:http://m.newhan.cn/zhishi/a/1702128065116495.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:Kamailio學習【二】--自定義模塊.doc

            本文 PDF 下載地址:Kamailio學習【二】--自定義模塊.pdf

            標簽:模塊   函數   結構   導出   定義   參數   執行   版本
            留言與評論(共有 0 條評論)
               
            驗證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 久久精品国产再热青青青| av无码一区二区大桥久未| 99视频精品国产免费观看| 国产拍拍拍无码视频免费| 亚洲国产韩国欧美在线| 日本高清熟妇老熟妇| 免费看成人毛片无码视频| 色琪琪丁香婷婷综合久久| 国产免费午夜福利蜜芽无码| 国产在线观看播放av| 在线精品国产中文字幕| 亚洲色帝国综合婷婷久久| 国产在线无码精品无码| 性生交片免费无码看人| 国产亚洲女人久久久精品| 国产精品国产三级国产试看| 国产极品尤物粉嫩在线观看| 最新亚洲人成网站在线影院| 狠狠婷婷色五月中文字幕| 最新日韩精品视频在线| 一级二级三一片内射视频在线| chinese乱国产伦video| 激情综合网激情五月我去也| 日韩国产亚洲一区二区三区| 欧美xxxxhd高清| 激情综合网五月激情五月| 久久亚洲国产精品日日av夜夜| 国产成人久久综合第一区| 四虎精品视频永久免费| 性无码专区无码| 最近中文字幕免费手机版| 人人模人人爽人人喊久久| 国产亚洲综合一区在线| 欧洲精品码一区二区三区| 中文字幕无线码中文字幕| 免费国产午夜理论片不卡| 久久久国产成人一区二区| 国产成人免费无码AV| 九九re线精品视频在线观看视频| 国产午夜福利高清在线观看| 岛国岛国免费v片在线观看|