266行目: 266行目:
<br>
<br>


==== サンプルコード ====
==== サンプルコード 1 ====
以下の例では、Qtにおいて、D-Busを使用したメッセージの送受信を行っている。<br>
以下の例では、Qtにおいて、D-Busを使用したメッセージの送受信を行っている。<br>
# セッションバスへの接続を取得する。
# セッションバスへの接続を取得する。
334行目: 334行目:
サンプルコードの詳細を知りたい場合は、以下に示すGithubを参照すること。<br>
サンプルコードの詳細を知りたい場合は、以下に示すGithubを参照すること。<br>
https://github.com/PacktPublishing/Hands-On-Embedded-Programming-with-Qt/blob/master/Chapter10/DBusBruteForce/MyObject.cpp<br>
https://github.com/PacktPublishing/Hands-On-Embedded-Programming-with-Qt/blob/master/Chapter10/DBusBruteForce/MyObject.cpp<br>
<br>
==== サンプルコード 2 ====
以下の例では、Firewalldにおいて、以下に示すようなコマンドと同等のものをD-Busを使用して実行している。<br>
sudo firewall-cmd --permanent --zone=<ゾーン名> --add-port=<ポート番号>/tcp
sudo firewall-cmd --reload
<br>
以下に示すサンプルコードを実行するには、適切な権限 (root権限) が必要となることに注意する。<br>
<syntaxhighlight lang="c++">
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusReply>
// 開放するポートを指定する。
bool addPort(const QString& zone, int port, const QString &protocol)
{
    QDBusReply<void> reply = interface.call("addPort", zone, port, protocol);
    return reply.isValid();
}
// 変更を永続化する
bool makePermament()
{
    QDBusReply<void> reply = interface.call("runtimeToPermanent");
    return reply.isValid();
}
// Firewalldを再読み込みする
bool reloadFirewall()
{
    QDBusReply<void> reply = interface.call("reload");
    return reply.isValid();
}
int main()
{
    // ...略
    // FirewalldのD-Busインターフェースに接続する
    QDBusConnection bus = QDBusConnection::systemBus();
    QDBusInterface interface("org.fedoraproject.FirewallD1",
                            "/org/fedoraproject/FirewallD1",
                            "org.fedoraproject.FirewallD1",
                            bus);
    // 複数のゾーンに対して操作を行うことも可能
    QStringList zones = {"public", "internal", "work"};
    for (const auto& zone : zones) {
      if (addPort(zone, 80, "tcp")) {
          qDebug() << "Port 80 added to" << zone << "zone successfully";
      }
      else {
          qDebug() << "Failed to add port 80 to" << zone << "zone";
      }
    }
    if (makePermament()) {
      qDebug() << "Changes made permanent";
    }
    if (reloadFirewall()) {
      qDebug() << "Firewall reloaded";
    }
    // ...略
    return 0;
}
</syntaxhighlight>
<br><br>
<br><br>