我正在为 Asterisk(版本 18.16.0)编写自定义模块。我定义了一个这样的自定义模块:
static pjsip_module custom_module = {
.name = { "custom handler", 14 },
.priority = PJSIP_MOD_PRIORITY_APPLICATION - 1,
.on_rx_request = inspect_rx_req,
};
我的功能是这样的:
static pj_bool_t inspect_rx_req(pjsip_rx_data *rdata) {
ast_log(LOG_NOTICE, "Received SIP request: %.*s, Length: %d", (int)rdata->msg_info.len, rdata->msg_info.msg_buf, rdata->msg_info.len);
ast_log(LOG_NOTICE, "[RX] Request received");
if (!rdata->msg_info.msg) {
ast_log(LOG_ERROR, "[RX] Received message is NULL");
return PJ_FALSE;
}
return PJ_FALSE;
}
这是这样注册的:
static int load_module(void)
{
ast_sip_register_service(&custom_module);
return AST_MODULE_LOAD_SUCCESS;
}
函数接收到的每个请求都是 0 长度。我尝试了各种优先级,但每次我都收到一条空消息。我查看了 Asterisk 的源代码,看看其他模块是如何处理请求的,我没有发现我正在做的与源代码中已有的有什么区别。