LINUX.ORG.RU

dbus_bus_add_match на сервере

 ,


0

0

Пишу сервер, который работает с dbus. У меня задача принять запрос на выполнение определённого метода из dbus. С обработкой и ответом проблем не возникает. Проблема с приёмом. Урезанный код сервера:

//gcc -Wall -o server.run server-lor.c `pkg-config --cflags --libs dbus-1`

#include <dbus/dbus.h>
#include <unistd.h>
#include <stdio.h>


int main()
{
  DBusMessage* msg;
  DBusConnection* conn;
  DBusError err;

  dbus_error_init(&err);
  conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
  dbus_bus_request_name(conn, "andromeda.server", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
  dbus_bus_add_match(conn, "type='method_call',interface='andromeda.listener',member='method',path='/andromeda/methods',destination='andromeda.server'", NULL);
  dbus_connection_flush(conn);

  while (dbus_connection_read_write(conn, 0))
  {
    msg = dbus_connection_pop_message(conn);
    if (NULL == msg)
    {
      sleep(1);
      continue;
    }
    printf("got message\n");
    dbus_message_unref(msg);
    //break;
  }
  dbus_connection_unref(conn);
  return 0;
}
в качестве клиента использую:
dbus-send --session --type=method_call --dest=andromeda.server /andromeda/methods andromeda.listener.method
Проблема в том, что сервер принимает любые значения OBJECT_PATH и INTERFACE.MEMBER Видимо, проблема в использовании dbus_bus_add_match

Ответ на: комментарий от intelfx

Правильно ли я это перевожу? «Сообщения, которые используют клиента в качестве DESTINATION, не нуждаются в отборе, и посылаются клиенту независимо.» В качесве dest я использую адрес сервера вроде бы. Или тут имеется ввиду, что при посылке сообщений из клиента сущности «клиент» и «сервер» временно меняются местами?

signijalv52
() автор топика
Ответ на: комментарий от signijalv52

«Клиент» в данном случае относится к D-Bus. И твой сервер, и твой клиент — это D-Bus-клиенты.

А понимать нужно так, что сообщения, отправленные юникастом какому-либо узлу, не проходят через его (этого узла) фильтры. Фильтры в D-Bus нужны для отбора бредкастов.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.