| 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> | ||