❶ 【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函数找到并调用相应的函数。
值得注意的是,为了避免命名冲突,模块函数的名称通常会加上前缀,以此来标识其特定的命名空间。