freediameter - как обрабатывать сообщения запроса вне функции отправки - PullRequest
0 голосов
/ 30 марта 2020

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

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

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

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

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

Спасибо.

1 Ответ

1 голос
/ 31 марта 2020

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

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

...