freediameter - как обрабатывать сообщения запроса вне функции отправки

Итак, я рекламировал приложение DCCA в своем расширении через fd_disp_register, и я могу проанализировать и подготовить ответное сообщение и в конце отправить их из моей функции обратного вызова без проблем.

Это всегда работает, если ответное сообщение подготовлено внутри функции обратного вызова. Но что, если я хочу ответить на сообщение запроса вне моей функции обратного вызова?

Итак, я попробовал это с образцом кода. Я изменил логику функции обратного вызова, чтобы от нее не было отправлено сообщение, и вместо этого другой поток пытается получить некоторую информацию и отправить ответ.

Это абсолютно не удалось, потому что, как только обратный вызов вернется (с 0), произойдет следующее действие (в соответствии со значением disp_action), что не в мою пользу.

Итак, я хотел бы спросить, каково ваше решение для обработки такого случая, я имею в виду отправку ответных сообщений вне функции обратного вызова?

Спасибо.


person atari83    schedule 30.03.2020    source источник


Ответы (1)


Я не уверен, что когда-либо делал это раньше, но глядя на 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; (потому что вы взяли на себя ответственность за сообщение).

Это работает?

person Matt Williams    schedule 31.03.2020