handle SASL failures

lumi created

Change summary

src/client.rs | 5 +++++
src/error.rs  | 1 +
2 files changed, 6 insertions(+)

Detailed changes

src/client.rs 🔗

@@ -191,6 +191,11 @@ impl Client {
                     }
                 }
             }
+            else if n.is("failure", ns::SASL) {
+                let msg = n.text();
+                let inner = if msg == "" { None } else { Some(msg) };
+                return Err(Error::SaslError(inner));
+            }
             else if n.is("iq", ns::CLIENT) && n.has_child("bind", ns::BIND) {
                 return Ok(());
             }

src/error.rs 🔗

@@ -24,6 +24,7 @@ pub enum Error {
     OpenSslErrorStack(ErrorStack),
     MinidomError(MinidomError),
     Base64Error(Base64Error),
+    SaslError(Option<String>),
     StreamError,
     EndOfDocument,
 }