❶ 【opensips2.4源碼分析】模塊的載入
揭秘opensips 2.4源碼中的模塊載入奧秘
在opensips 2.4的底層架構中,模塊的載入過程由loadmole指令主導,核心實現主要集中在sr_mole.c的load_mole函數上。這個函數是模塊集成的關鍵,通過統一的介面<strong>struct mole_exports</strong>對外展示,無論是靜態模塊如<strong>proto_udp.so</strong>和<strong>proto_tcp.so</strong>,還是動態模塊,都遵循這一標准。
動態模塊載入的路徑是由<strong>mpath_buf變數控制,作為sr_load_mole參數的一部分,它默認設置在opensips安裝路徑下的<strong>opensips/lib64/opensips/moles/</strong>。
模塊載入流程如下:
理解模塊的運作,關鍵在於它繼承自<strong>struct mole_exports,特別是其中的初始化函數<strong>preinit_f和<strong>init_f,它們是模塊啟動的核心步驟。
在main.c中的<strong>init_moles函數中,這個流程被細致地執行:
在<strong>init_mod階段,進一步執行以下操作:
模塊函數的注冊過程十分關鍵,通過<strong>struct mole_exports中的cmds欄位,與全局的moles結構體關聯起來,通過find_export函數找到並調用相應的函數。
值得注意的是,為了避免命名沖突,模塊函數的名稱通常會加上前綴,以此來標識其特定的命名空間。