aboutsummaryrefslogtreecommitdiffstats
path: root/lampada
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lampada/Cargo.toml4
-rw-r--r--lampada/README.md6
-rw-r--r--lampada/src/connection/mod.rs31
-rw-r--r--lampada/src/connection/read.rs4
-rw-r--r--lampada/src/connection/write.rs4
-rw-r--r--lampada/src/error.rs6
-rw-r--r--lampada/src/lib.rs44
7 files changed, 50 insertions, 49 deletions
diff --git a/lampada/Cargo.toml b/lampada/Cargo.toml
index 1937162..20ede3a 100644
--- a/lampada/Cargo.toml
+++ b/lampada/Cargo.toml
@@ -1,3 +1,7 @@
+# SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+#
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
[package]
name = "lampada"
version = "0.1.0"
diff --git a/lampada/README.md b/lampada/README.md
index dc5f016..68bf418 100644
--- a/lampada/README.md
+++ b/lampada/README.md
@@ -1,3 +1,9 @@
+<!--
+SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+
+SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+
# lampada
a core xmpp client that graciously manages streams, delegating logic to an implementor of a trait.
diff --git a/lampada/src/connection/mod.rs b/lampada/src/connection/mod.rs
index 3a3187f..485b93d 100644
--- a/lampada/src/connection/mod.rs
+++ b/lampada/src/connection/mod.rs
@@ -1,3 +1,7 @@
+// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
// TODO: consider if this needs to be handled by a supervisor or could be handled by luz directly
use std::{
@@ -7,7 +11,7 @@ use std::{
time::Duration,
};
-use jid::JID;
+use jid::{BareJID, FullJID, JID};
use luz::jabber_stream::bound_stream::BoundJabberStream;
use read::{ReadControl, ReadControlHandle, ReadState};
use stanza::{client::Stanza, stream_error::Error as StreamError};
@@ -121,12 +125,11 @@ where
break
}
- let mut jid = self.connected.jid.clone();
- let mut domain = jid.domainpart.clone();
+ let mut jid = self.connected.jid.clone().into();
// TODO: make sure connect_and_login does not modify the jid, but instead returns a jid. or something like that
- let connection = luz::connect_and_login(&mut jid, &*self.password, &mut domain).await;
+ let connection = luz::connect_and_login(&jid, &*self.password).await;
match connection {
- Ok(c) => {
+ Ok((c, full_jid)) => {
let (read, write) = c.split();
let (send, recv) = oneshot::channel();
self.writer_crash = recv;
@@ -169,12 +172,11 @@ where
else => break,
};
- let mut jid = self.connected.jid.clone();
- let mut domain = jid.domainpart.clone();
+ let mut jid = self.connected.jid.clone().into();
// TODO: same here
- let connection = luz::connect_and_login(&mut jid, &*self.password, &mut domain).await;
+ let connection = luz::connect_and_login(&jid, &*self.password).await;
match connection {
- Ok(c) => {
+ Ok((c, full_jid)) => {
let (read, write) = c.split();
let (send, recv) = oneshot::channel();
self.writer_crash = recv;
@@ -214,11 +216,10 @@ where
else => break,
};
- let mut jid = self.connected.jid.clone();
- let mut domain = jid.domainpart.clone();
- let connection = luz::connect_and_login(&mut jid, &*self.password, &mut domain).await;
+ let mut jid = self.connected.jid.clone().into();
+ let connection = luz::connect_and_login(&jid, &*self.password).await;
match connection {
- Ok(c) => {
+ Ok((c, full_jid)) => {
let (read, write) = c.split();
let (send, recv) = oneshot::channel();
self.writer_crash = recv;
@@ -305,8 +306,7 @@ impl SupervisorHandle {
pub fn new<Lgc>(
streams: BoundJabberStream,
on_crash: oneshot::Sender<()>,
- jid: JID,
- server: JID,
+ jid: FullJID,
password: Arc<String>,
logic: Lgc,
) -> (WriteHandle, Self)
@@ -327,7 +327,6 @@ impl SupervisorHandle {
let connected = Connected {
jid,
write_handle: write_handle.clone(),
- server,
};
let supervisor_sender = SupervisorSender {
diff --git a/lampada/src/connection/read.rs b/lampada/src/connection/read.rs
index 591a2cb..ebcf66a 100644
--- a/lampada/src/connection/read.rs
+++ b/lampada/src/connection/read.rs
@@ -1,3 +1,7 @@
+// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
use std::{
collections::HashMap,
marker::PhantomData,
diff --git a/lampada/src/connection/write.rs b/lampada/src/connection/write.rs
index b982eea..a047674 100644
--- a/lampada/src/connection/write.rs
+++ b/lampada/src/connection/write.rs
@@ -1,3 +1,7 @@
+// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
use std::ops::{Deref, DerefMut};
use luz::jabber_stream::bound_stream::BoundJabberWriter;
diff --git a/lampada/src/error.rs b/lampada/src/error.rs
index f29d0cc..9ca5f12 100644
--- a/lampada/src/error.rs
+++ b/lampada/src/error.rs
@@ -1,3 +1,7 @@
+// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
use std::sync::Arc;
use stanza::client::Stanza;
@@ -24,7 +28,7 @@ pub enum ConnectionError {
#[error("disconnected")]
Disconnected,
#[error("invalid server jid: {0}")]
- InvalidServerJID(#[from] jid::ParseError),
+ InvalidServerJID(#[from] jid::JIDError),
}
#[derive(Debug, Error, Clone)]
diff --git a/lampada/src/lib.rs b/lampada/src/lib.rs
index 6b6cbe8..2b71a9d 100644
--- a/lampada/src/lib.rs
+++ b/lampada/src/lib.rs
@@ -1,5 +1,9 @@
#![feature(where_clause_attrs)]
+// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
use std::{
collections::HashMap,
ops::{Deref, DerefMut},
@@ -12,6 +16,7 @@ pub use connection::write::WriteMessage;
pub use connection::SupervisorSender;
use error::ConnectionError;
use futures::{future::Fuse, FutureExt};
+use jid::{BareJID, FullJID};
use luz::JID;
use stanza::client::{
iq::{self, Iq, IqType},
@@ -36,24 +41,18 @@ pub mod error;
#[derive(Clone)]
pub struct Connected {
// full jid will stay stable across reconnections
- jid: JID,
+ jid: FullJID,
write_handle: WriteHandle,
- // the server jid
- server: JID,
}
impl Connected {
- pub fn jid(&self) -> &JID {
+ pub fn jid(&self) -> &FullJID {
&self.jid
}
pub fn write_handle(&self) -> &WriteHandle {
&self.write_handle
}
-
- pub fn server(&self) -> &JID {
- &self.server
- }
}
/// everything that a particular xmpp client must implement
@@ -227,34 +226,17 @@ where
.await;
}
None => {
- let mut jid = self.jid.clone();
- let mut domain = jid.domainpart.clone();
// TODO: check what happens upon reconnection with same resource (this is probably what one wants to do and why jid should be mutated from a bare jid to one with a resource)
let streams_result =
- luz::connect_and_login(&mut jid, &*self.password, &mut domain)
- .await;
- let server: JID = match domain.parse() {
- Ok(j) => j,
- Err(e) => {
- self.logic
- .clone()
- .handle_connection_error(ConnectionError::InvalidServerJID(
- e.clone(),
- ))
- .await;
- sender.send(Err(ConnectionError::InvalidServerJID(e)));
- continue;
- }
- };
+ luz::connect_and_login(&self.jid, &*self.password).await;
match streams_result {
- Ok(s) => {
+ Ok((s, full_jid)) => {
debug!("ok stream result");
let (shutdown_send, shutdown_recv) = oneshot::channel::<()>();
let (writer, supervisor) = SupervisorHandle::new(
s,
shutdown_send,
- jid.clone(),
- server.clone(),
+ full_jid.clone(),
self.password.clone(),
self.logic.clone(),
);
@@ -262,18 +244,16 @@ where
let shutdown_recv = shutdown_recv.fuse();
self.connection_supervisor_shutdown = shutdown_recv;
- let resource = jid.resourcepart.clone().expect("client somehow connected without binding");
let connected = Connected {
- jid,
+ jid: full_jid.clone(),
write_handle: writer,
- server,
};
self.logic.clone().handle_connect(connected.clone()).await;
self.connected = Some((connected, supervisor));
// REMEMBER TO NOTIFY IT@S GOOD
- sender.send(Ok(resource));
+ sender.send(Ok(full_jid.resourcepart));
}
Err(e) => {
tracing::error!("error: {}", e);