Adds kordophoned, basic dbus interface
This commit is contained in:
188
Cargo.lock
generated
188
Cargo.lock
generated
@@ -1,6 +1,6 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
@@ -41,6 +41,15 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ansi_term"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "anstream"
|
||||||
version = "0.6.15"
|
version = "0.6.15"
|
||||||
@@ -113,6 +122,17 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "atty"
|
||||||
|
version = "0.2.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||||
|
dependencies = [
|
||||||
|
"hermit-abi 0.1.19",
|
||||||
|
"libc",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
@@ -190,6 +210,21 @@ dependencies = [
|
|||||||
"windows-targets 0.52.4",
|
"windows-targets 0.52.4",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "2.34.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
||||||
|
dependencies = [
|
||||||
|
"ansi_term",
|
||||||
|
"atty",
|
||||||
|
"bitflags 1.3.2",
|
||||||
|
"strsim 0.8.0",
|
||||||
|
"textwrap",
|
||||||
|
"unicode-width",
|
||||||
|
"vec_map",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.20"
|
version = "4.5.20"
|
||||||
@@ -209,7 +244,7 @@ dependencies = [
|
|||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"clap_lex",
|
"clap_lex",
|
||||||
"strsim",
|
"strsim 0.11.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -282,7 +317,7 @@ dependencies = [
|
|||||||
"ident_case",
|
"ident_case",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"strsim",
|
"strsim 0.11.1",
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -297,6 +332,59 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbus"
|
||||||
|
version = "0.9.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-util",
|
||||||
|
"libc",
|
||||||
|
"libdbus-sys",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbus-codegen"
|
||||||
|
version = "0.10.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a76dc35ce83e4e9fa089b4fabe66c757b27bd504dc2179c97a01b36d3e874fb0"
|
||||||
|
dependencies = [
|
||||||
|
"clap 2.34.0",
|
||||||
|
"dbus",
|
||||||
|
"xml-rs",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbus-crossroads"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a4c83437187544ba5142427746835061b330446ca8902eabd70e4afb8f76de0"
|
||||||
|
dependencies = [
|
||||||
|
"dbus",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbus-tokio"
|
||||||
|
version = "0.7.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "007688d459bc677131c063a3a77fb899526e17b7980f390b69644bdbc41fad13"
|
||||||
|
dependencies = [
|
||||||
|
"dbus",
|
||||||
|
"libc",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbus-tree"
|
||||||
|
version = "0.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f456e698ae8e54575e19ddb1f9b7bce2298568524f215496b248eb9498b4f508"
|
||||||
|
dependencies = [
|
||||||
|
"dbus",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
@@ -390,9 +478,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.11.5"
|
version = "0.11.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d"
|
checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -531,6 +619,15 @@ version = "0.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.1.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
@@ -708,12 +805,27 @@ dependencies = [
|
|||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kordophoned"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"dbus",
|
||||||
|
"dbus-codegen",
|
||||||
|
"dbus-crossroads",
|
||||||
|
"dbus-tokio",
|
||||||
|
"dbus-tree",
|
||||||
|
"env_logger",
|
||||||
|
"kordophone",
|
||||||
|
"log",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kpcli"
|
name = "kpcli"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap 4.5.20",
|
||||||
"dotenv",
|
"dotenv",
|
||||||
"kordophone",
|
"kordophone",
|
||||||
"kordophone-db",
|
"kordophone-db",
|
||||||
@@ -735,6 +847,15 @@ version = "0.2.153"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libdbus-sys"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
|
||||||
|
dependencies = [
|
||||||
|
"pkg-config",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsqlite3-sys"
|
name = "libsqlite3-sys"
|
||||||
version = "0.30.1"
|
version = "0.30.1"
|
||||||
@@ -763,9 +884,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.22"
|
version = "0.4.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
@@ -809,7 +930,7 @@ version = "1.0.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
|
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi",
|
"hermit-abi 0.3.9",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi",
|
||||||
"windows-sys",
|
"windows-sys",
|
||||||
@@ -1204,6 +1325,12 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
@@ -1242,6 +1369,15 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "textwrap"
|
||||||
|
version = "0.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.37"
|
version = "0.3.37"
|
||||||
@@ -1443,6 +1579,12 @@ version = "0.2.15"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vec_map"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "want"
|
name = "want"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@@ -1513,6 +1655,22 @@ version = "0.2.95"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-util"
|
name = "winapi-util"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
@@ -1522,6 +1680,12 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-core"
|
name = "windows-core"
|
||||||
version = "0.52.0"
|
version = "0.52.0"
|
||||||
@@ -1662,3 +1826,9 @@ checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xml-rs"
|
||||||
|
version = "0.8.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
members = [
|
members = [
|
||||||
"kordophone",
|
"kordophone",
|
||||||
"kordophone-db",
|
"kordophone-db",
|
||||||
|
"kordophoned",
|
||||||
"kpcli"
|
"kpcli"
|
||||||
]
|
]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|||||||
18
kordophoned/Cargo.toml
Normal file
18
kordophoned/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[package]
|
||||||
|
name = "kordophoned"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dbus = "0.9.7"
|
||||||
|
dbus-crossroads = "0.5.2"
|
||||||
|
dbus-tokio = "0.7.6"
|
||||||
|
dbus-tree = "0.9.2"
|
||||||
|
env_logger = "0.11.6"
|
||||||
|
kordophone = { path = "../kordophone" }
|
||||||
|
log = "0.4.25"
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
dbus-codegen = "0.10.0"
|
||||||
|
dbus-crossroads = "0.5.1"
|
||||||
24
kordophoned/build.rs
Normal file
24
kordophoned/build.rs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
const KORDOPHONE_XML: &str = "include/net.buzzert.kordophonecd.Server.xml";
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let out_dir = std::env::var("OUT_DIR").unwrap();
|
||||||
|
let out_path = std::path::Path::new(&out_dir).join("kordophone-server.rs");
|
||||||
|
|
||||||
|
let opts = dbus_codegen::GenOpts {
|
||||||
|
connectiontype: dbus_codegen::ConnectionType::Nonblock,
|
||||||
|
methodtype: None, // Set to None for crossroads
|
||||||
|
crossroads: true,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let xml = std::fs::read_to_string(KORDOPHONE_XML)
|
||||||
|
.expect("Error reading server dbus interface");
|
||||||
|
|
||||||
|
let output = dbus_codegen::generate(&xml, &opts)
|
||||||
|
.expect("Error generating server dbus interface");
|
||||||
|
|
||||||
|
std::fs::write(out_path, output)
|
||||||
|
.expect("Error writing server dbus code");
|
||||||
|
|
||||||
|
println!("cargo:rerun-if-changed={}", KORDOPHONE_XML);
|
||||||
|
}
|
||||||
8
kordophoned/include/net.buzzert.kordophonecd.Server.xml
Normal file
8
kordophoned/include/net.buzzert.kordophonecd.Server.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<node name="/">
|
||||||
|
<interface name="net.buzzert.kordophone.Server">
|
||||||
|
<method name="GetVersion">
|
||||||
|
<arg type="s" name="version" direction="out" />
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
</node>
|
||||||
11
kordophoned/src/daemon/mod.rs
Normal file
11
kordophoned/src/daemon/mod.rs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub struct Daemon {
|
||||||
|
pub version: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Daemon {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self { version: "0.1.0".to_string() }
|
||||||
|
}
|
||||||
|
}
|
||||||
93
kordophoned/src/dbus/endpoint.rs
Normal file
93
kordophoned/src/dbus/endpoint.rs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
use crate::{dbus::interface::OBJECT_PATH, daemon::Daemon};
|
||||||
|
|
||||||
|
use crossroads::Crossroads;
|
||||||
|
use dbus::{
|
||||||
|
channel::{MatchingReceiver, Sender},
|
||||||
|
message::MatchRule,
|
||||||
|
nonblock::SyncConnection,
|
||||||
|
Path,
|
||||||
|
};
|
||||||
|
|
||||||
|
use dbus_crossroads as crossroads;
|
||||||
|
use dbus_tokio::connection;
|
||||||
|
use dbus_tree::{DataType, MethodErr};
|
||||||
|
use log::info;
|
||||||
|
use std::{future::Future, sync::Arc, thread};
|
||||||
|
|
||||||
|
mod dbus_interface {
|
||||||
|
#![allow(unused)]
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/kordophone-server.rs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
use dbus_interface::NetBuzzertKordophoneServer;
|
||||||
|
|
||||||
|
pub struct Endpoint {
|
||||||
|
connection: Arc<SyncConnection>,
|
||||||
|
daemon: Arc<Daemon>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Endpoint {
|
||||||
|
pub fn new(daemon: Arc<Daemon>) -> Self {
|
||||||
|
let (resource, connection) = connection::new_session_sync().unwrap();
|
||||||
|
|
||||||
|
// The resource is a task that should be spawned onto a tokio compatible
|
||||||
|
// reactor ASAP. If the resource ever finishes, you lost connection to D-Bus.
|
||||||
|
//
|
||||||
|
// To shut down the connection, both call _handle.abort() and drop the connection.
|
||||||
|
let _handle = tokio::spawn(async {
|
||||||
|
let err = resource.await;
|
||||||
|
panic!("Lost connection to D-Bus: {}", err);
|
||||||
|
});
|
||||||
|
|
||||||
|
Self { connection, daemon }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn start(&self) {
|
||||||
|
use crate::dbus::interface;
|
||||||
|
|
||||||
|
self.connection
|
||||||
|
.request_name(interface::NAME, false, true, false)
|
||||||
|
.await
|
||||||
|
.expect("Unable to acquire dbus name");
|
||||||
|
|
||||||
|
let mut cr = Crossroads::new();
|
||||||
|
|
||||||
|
// Enable async support for the crossroads instance.
|
||||||
|
// (Currently irrelevant since dbus generates sync code)
|
||||||
|
cr.set_async_support(Some((
|
||||||
|
self.connection.clone(),
|
||||||
|
Box::new(|x| {
|
||||||
|
tokio::spawn(x);
|
||||||
|
}),
|
||||||
|
)));
|
||||||
|
|
||||||
|
// Register the daemon as a D-Bus object.
|
||||||
|
let token = dbus_interface::register_net_buzzert_kordophone_server(&mut cr);
|
||||||
|
cr.insert(OBJECT_PATH, &[token], self.daemon.clone());
|
||||||
|
|
||||||
|
// Start receiving messages.
|
||||||
|
self.connection.start_receive(
|
||||||
|
MatchRule::new_method_call(),
|
||||||
|
Box::new(move |msg, conn|
|
||||||
|
cr.handle_message(msg, conn).is_ok()
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
info!(target: "dbus", "DBus server started");
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn send_signal<S>(&self, signal: S) -> Result<u32, ()>
|
||||||
|
where
|
||||||
|
S: dbus::message::SignalArgs + dbus::arg::AppendAll,
|
||||||
|
{
|
||||||
|
let message = signal.to_emit_message(&Path::new(OBJECT_PATH).unwrap());
|
||||||
|
self.connection.send(message)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl NetBuzzertKordophoneServer for Arc<Daemon> {
|
||||||
|
fn get_version(&mut self) -> Result<String, MethodErr> {
|
||||||
|
Ok(self.version.clone())
|
||||||
|
}
|
||||||
|
}
|
||||||
6
kordophoned/src/dbus/mod.rs
Normal file
6
kordophoned/src/dbus/mod.rs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
pub mod endpoint;
|
||||||
|
|
||||||
|
pub mod interface {
|
||||||
|
pub static NAME: &str = "net.buzzert.kordophonecd";
|
||||||
|
pub static OBJECT_PATH: &str = "/net/buzzert/kordophone/Server";
|
||||||
|
}
|
||||||
24
kordophoned/src/main.rs
Normal file
24
kordophoned/src/main.rs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
mod dbus;
|
||||||
|
mod daemon;
|
||||||
|
|
||||||
|
use std::future;
|
||||||
|
use std::sync::Arc;
|
||||||
|
use log::LevelFilter;
|
||||||
|
fn initialize_logging() {
|
||||||
|
env_logger::Builder::from_default_env()
|
||||||
|
.filter_level(LevelFilter::Info)
|
||||||
|
.format_timestamp_secs()
|
||||||
|
.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
initialize_logging();
|
||||||
|
|
||||||
|
let daemon = Arc::new(daemon::Daemon::new());
|
||||||
|
let endpoint = Arc::new(dbus::endpoint::Endpoint::new(daemon));
|
||||||
|
endpoint.start().await;
|
||||||
|
|
||||||
|
future::pending::<()>().await;
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user