aboutsummaryrefslogtreecommitdiffstats
path: root/jabber/src/client.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--jabber/src/client.rs (renamed from src/client.rs)45
1 files changed, 8 insertions, 37 deletions
diff --git a/src/client.rs b/jabber/src/client.rs
index e94008d..c8b0b73 100644
--- a/src/client.rs
+++ b/jabber/src/client.rs
@@ -1,16 +1,16 @@
use std::{pin::pin, sync::Arc, task::Poll};
use futures::{Sink, Stream, StreamExt};
+use jid::ParseError;
use rsasl::config::SASLConfig;
+use stanza::{
+ client::Stanza,
+ sasl::Mechanisms,
+ stream::{Feature, Features},
+};
use crate::{
connection::{Tls, Unencrypted},
- jid::ParseError,
- stanza::{
- client::Stanza,
- sasl::Mechanisms,
- stream::{Feature, Features},
- },
Connection, Error, JabberStream, Result, JID,
};
@@ -113,7 +113,7 @@ impl ConnectionState {
))
}
Connecting::InsecureGotFeatures((features, jabber_stream)) => {
- match features.negotiate()? {
+ match features.negotiate().ok_or(Error::Negotiation)? {
Feature::StartTls(_start_tls) => {
self =
ConnectionState::Connecting(Connecting::StartTls(jabber_stream))
@@ -138,7 +138,7 @@ impl ConnectionState {
))
}
Connecting::GotFeatures((features, jabber_stream)) => {
- match features.negotiate()? {
+ match features.negotiate().ok_or(Error::Negotiation)? {
Feature::StartTls(_start_tls) => return Err(Error::AlreadyTls),
Feature::Sasl(mechanisms) => {
self = ConnectionState::Connecting(Connecting::Sasl(
@@ -190,35 +190,6 @@ impl Connecting {
}
}
-impl Features {
- pub fn negotiate(self) -> Result<Feature> {
- if let Some(Feature::StartTls(s)) = self
- .features
- .iter()
- .find(|feature| matches!(feature, Feature::StartTls(_s)))
- {
- // TODO: avoid clone
- return Ok(Feature::StartTls(s.clone()));
- } else if let Some(Feature::Sasl(mechanisms)) = self
- .features
- .iter()
- .find(|feature| matches!(feature, Feature::Sasl(_)))
- {
- // TODO: avoid clone
- return Ok(Feature::Sasl(mechanisms.clone()));
- } else if let Some(Feature::Bind) = self
- .features
- .into_iter()
- .find(|feature| matches!(feature, Feature::Bind))
- {
- Ok(Feature::Bind)
- } else {
- // TODO: better error
- return Err(Error::Negotiation);
- }
- }
-}
-
pub enum InsecureConnecting {
Disconnected,
ConnectionEstablished(Connection),