diff --git a/tokio-xmpp/src/client/async_client.rs b/tokio-xmpp/src/client/async_client.rs index 44d9bdf9..91233b7e 100644 --- a/tokio-xmpp/src/client/async_client.rs +++ b/tokio-xmpp/src/client/async_client.rs @@ -17,7 +17,7 @@ use crate::event::Event; use crate::happy_eyeballs::{connect_to_host, connect_with_srv}; use crate::starttls::starttls; use crate::xmpp_codec::Packet; -use crate::xmpp_stream; +use crate::xmpp_stream::{self, make_id}; use crate::{Error, ProtocolError}; /// XMPP client connection and state @@ -161,7 +161,11 @@ impl Client { /// Send stanza pub async fn send_stanza(&mut self, stanza: Element) -> Result<(), Error> { - self.send(Packet::Stanza(stanza)).await + let mut el: Element = stanza; + if el.attr("id").is_none() { + el.set_attr("id", make_id()); + } + self.send(Packet::Stanza(el)).await } /// End connection by sending `` diff --git a/tokio-xmpp/src/client/simple_client.rs b/tokio-xmpp/src/client/simple_client.rs index df87ef0e..a55463ff 100644 --- a/tokio-xmpp/src/client/simple_client.rs +++ b/tokio-xmpp/src/client/simple_client.rs @@ -17,7 +17,7 @@ use super::bind::bind; use crate::happy_eyeballs::connect_with_srv; use crate::starttls::starttls; use crate::xmpp_codec::Packet; -use crate::xmpp_stream; +use crate::xmpp_stream::{self, make_id}; use crate::{Error, ProtocolError}; /// A simple XMPP client connection @@ -98,7 +98,11 @@ impl Client { where E: Into, { - self.send(Packet::Stanza(stanza.into())).await + let mut el: Element = stanza.into(); + if el.attr("id").is_none() { + el.set_attr("id", make_id()); + } + self.send(Packet::Stanza(el.into())).await } /// End connection by sending `` diff --git a/tokio-xmpp/src/component/mod.rs b/tokio-xmpp/src/component/mod.rs index 6ac1371f..8b0c3b55 100644 --- a/tokio-xmpp/src/component/mod.rs +++ b/tokio-xmpp/src/component/mod.rs @@ -12,6 +12,7 @@ use super::happy_eyeballs::connect_to_host; use super::xmpp_codec::Packet; use super::xmpp_stream; use super::Error; +use crate::xmpp_stream::make_id; mod auth; @@ -53,7 +54,11 @@ impl Component { /// Send stanza pub async fn send_stanza(&mut self, stanza: Element) -> Result<(), Error> { - self.send(stanza).await + let mut el: Element = stanza; + if el.attr("id").is_none() { + el.set_attr("id", make_id()); + } + self.send(el).await } /// End connection diff --git a/tokio-xmpp/src/xmpp_stream.rs b/tokio-xmpp/src/xmpp_stream.rs index 3c5f0477..83ea8a64 100644 --- a/tokio-xmpp/src/xmpp_stream.rs +++ b/tokio-xmpp/src/xmpp_stream.rs @@ -14,7 +14,7 @@ use crate::stream_start; use crate::xmpp_codec::{Packet, XMPPCodec}; use crate::Error; -fn make_id() -> String { +pub(crate) fn make_id() -> String { let id: u64 = thread_rng().gen(); format!("{}", id) } @@ -78,11 +78,7 @@ impl XMPPStream { impl XMPPStream { /// Convenience method pub fn send_stanza>(&mut self, e: E) -> Send { - let mut el: Element = e.into(); - if el.attr("id").is_none() { - el.set_attr("id", make_id()); - } - self.send(Packet::Stanza(el)) + self.send(Packet::Stanza(e.into())) } }