freediameter - 如何在调度函数之外处理请求消息
freediameter - how to handle request messages outside of dispatch function
所以,我已经通过 fd_disp_register 在我的扩展程序中为 DCCA 应用程序做广告,我可以解析和准备响应消息,最后从我的回调函数发送它们没有问题。
如果在回调函数中准备了应答消息,这总是有效的。但是,如果我想在回调函数之外回复请求消息怎么办?
因此,我尝试了示例代码。我更改了回调函数逻辑,因此没有从中发送消息,而是另一个线程尝试获取一些信息并发送响应。
这绝对失败了,因为一旦回调 returns(0),下一个动作就会发生(根据 disp_action 值),这对我不利。
所以,我想问一下您处理这种情况的解决方案是什么,我的意思是在回调函数之外发送响应消息?
谢谢。
我不确定我以前做过这个,但看着 libfdproto.h
...
enum disp_action {
DISP_ACT_CONT, /* The next handler should be called, unless *msg == NULL. */
DISP_ACT_SEND, /* The updated message must be sent. No further callback is called. */
DISP_ACT_ERROR /* An error must be created and sent as a reply -- not valid for callbacks, only for fd_msg_dispatch. */
};
...听起来您想设置 *act = DISP_ACT_CONT;
和 *msg = NULL;
(因为您已经取得了消息的所有权)。
这样行吗?
所以,我已经通过 fd_disp_register 在我的扩展程序中为 DCCA 应用程序做广告,我可以解析和准备响应消息,最后从我的回调函数发送它们没有问题。
如果在回调函数中准备了应答消息,这总是有效的。但是,如果我想在回调函数之外回复请求消息怎么办?
因此,我尝试了示例代码。我更改了回调函数逻辑,因此没有从中发送消息,而是另一个线程尝试获取一些信息并发送响应。
这绝对失败了,因为一旦回调 returns(0),下一个动作就会发生(根据 disp_action 值),这对我不利。
所以,我想问一下您处理这种情况的解决方案是什么,我的意思是在回调函数之外发送响应消息?
谢谢。
我不确定我以前做过这个,但看着 libfdproto.h
...
enum disp_action {
DISP_ACT_CONT, /* The next handler should be called, unless *msg == NULL. */
DISP_ACT_SEND, /* The updated message must be sent. No further callback is called. */
DISP_ACT_ERROR /* An error must be created and sent as a reply -- not valid for callbacks, only for fd_msg_dispatch. */
};
...听起来您想设置 *act = DISP_ACT_CONT;
和 *msg = NULL;
(因为您已经取得了消息的所有权)。
这样行吗?