diff --git a/Cargo.lock b/Cargo.lock index c474ff7..33d3789 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,6 +10,7 @@ dependencies = [ "futures", "serde", "serde_json", + "systemd", "tokio", "tokio-xmpp", "tracing", @@ -123,6 +124,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "build-env" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1522ac6ee801a11bf9ef3f80403f4ede6eb41291fac3dde3de09989679305f25" + [[package]] name = "bytes" version = "1.3.0" @@ -196,6 +203,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "cstr-argument" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bd9c8e659a473bce955ae5c35b116af38af11a7acb0b480e01f3ed348aeb40" +dependencies = [ + "cfg-if", + "memchr", +] + [[package]] name = "data-encoding" version = "2.3.3" @@ -255,7 +272,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -264,6 +302,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.1.0" @@ -566,6 +610,17 @@ version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +[[package]] +name = "libsystemd-sys" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed080163caa59cc29b34bce2209b737149a4bac148cd9a8b04e4c12822798119" +dependencies = [ + "build-env", + "libc", + "pkg-config", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -737,7 +792,7 @@ checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566" dependencies = [ "bitflags", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -1294,6 +1349,21 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" +[[package]] +name = "systemd" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afec0101d9ae8ab26aedf0840109df689938ea7e538aa03df4369f1854f11562" +dependencies = [ + "cstr-argument", + "foreign-types 0.5.0", + "libc", + "libsystemd-sys", + "log", + "memchr", + "utf8-cstr", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -1641,6 +1711,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8-cstr" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55bcbb425141152b10d5693095950b51c3745d019363fc2929ffd8f61449b628" + [[package]] name = "valuable" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index c8418aa..b7847ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ serde_json = "1" tokio-xmpp = "3" xmpp-parsers = "0.19" axum = "0.6" +systemd = "0.10" diff --git a/src/jabber.rs b/src/jabber.rs index a38c787..6aeb643 100644 --- a/src/jabber.rs +++ b/src/jabber.rs @@ -66,6 +66,8 @@ pub async fn run(jid: String, password: String, muc_jid: String) -> Handle { Err(err) => println!("Received invalid presence: {:?}", err), } } + systemd::daemon::notify(false, [(systemd::daemon::STATE_WATCHDOG, "1")].iter()) + .unwrap(); } _ => {} } diff --git a/src/main.rs b/src/main.rs index 6e51af2..1fe6f3f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,8 +84,10 @@ async fn main() { let addr = SocketAddr::from(([127, 0, 0, 1], 9022)); tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await + let server = axum::Server::bind(&addr) + .serve(app.into_make_service()); + systemd::daemon::notify(false, [(systemd::daemon::STATE_READY, "1")].iter()) + .unwrap(); + server.await .unwrap(); }