Получить PID отправителя из DBUS - PullRequest
1 голос
/ 20 марта 2012

Я провел четыре часа в глубоком поиске :), но не нашел: Как получить PID от отправителя DBUS из Qt.

Из других библиотек dbus это довольно просто:

Вызовите dbus_message_get_sender, чтобы получить идентификатор вызывающего абонента D-Bus, а затем вызовите GetConnectionUnixProcessID, чтобы получить pid процесса, который отправил сообщение.

Как это сделать из Qt?Я пытался использовать этот код, но он возвращает мой PID, а не клиентское приложение.

class ServerAdaptor: public QDBusAbstractAdaptor
{
public Q_SLOTS:

 // this method shared through the D-BUS and called from different application (client)
 bool Show(const QString &in0)
 { 
    QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, "org.freedesktop.DBus");

    if( connection.isConnected() )
    {
       qDebug() << "Sender PID " << connection.interface()->servicePid(  QDBusConnection::sender().baseService() ).value();
    }

 }
}

Редактировать:

Как получить PID из удаленного приложения через D-BUS (Qt)

// this class receive D-BUS methods
class Server: public QObject, protected QDBusContext {

public slots:

    bool SomeMethod( const QString &name ) 
    {
     qDebug() << "PID is: " << connection().interface()->servicePid( message().service() ); 
    }

}

Ответы [ 2 ]

1 голос
/ 21 марта 2012

1) const QDBusMessage & QDBusContext :: message () const Возвращает сообщение, сгенерировавшее этот вызов.

2) QString QDBusMessage :: service () const Возвращает имя службы или адрес шины удаленного вызова метода.

3) QDBusReply QDBusConnectionInterface :: servicePid (const QString & serviceName) const Возвращает идентификатор процесса Unix (PID) для процесса, который в настоящее время содержит имя службы service bus.

1 голос
/ 20 марта 2012

Вы уже пытались получить свой зарегистрированный класс из QDBusContext ? Это должно дать вам дополнительную информацию в вашем слоте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...