client: use idna

This commit is contained in:
Astro 2017-07-21 00:39:29 +02:00
parent 7cd31bd425
commit dc5ddc73f6
3 changed files with 16 additions and 5 deletions

View file

@ -18,3 +18,4 @@ rustc-serialize = "*"
jid = "*"
domain = "0.2.1"
xmpp-parsers = "0.6.0"
idna = "*"

View file

@ -5,10 +5,11 @@ use tokio_core::reactor::Handle;
use tokio_core::net::TcpStream;
use tokio_io::{AsyncRead, AsyncWrite};
use tokio_tls::TlsStream;
use futures::{Future, Stream, Poll, Async, Sink, StartSend, AsyncSink};
use futures::{future, Future, Stream, Poll, Async, Sink, StartSend, AsyncSink};
use minidom::Element;
use jid::{Jid, JidParseError};
use sasl::common::{Credentials, ChannelBinding};
use idna;
use super::xmpp_codec::Packet;
use super::xmpp_stream;
@ -53,19 +54,27 @@ impl Client {
let jid1 = jid.clone();
let jid2 = jid.clone();
let password = password;
let domain = match idna::domain_to_ascii(&jid.domain) {
Ok(domain) =>
domain,
Err(e) =>
return Box::new(future::err(format!("{:?}", e))),
};
Box::new(
Connecter::from_lookup(handle, &jid.domain, "_xmpp-client._tcp", 5222)
Connecter::from_lookup(handle, &domain, "_xmpp-client._tcp", 5222)
.expect("Connector::from_lookup")
.and_then(move |tcp_stream|
xmpp_stream::XMPPStream::start(tcp_stream, jid1, NS_JABBER_CLIENT.to_owned())
.map_err(|e| format!("{}", e))
).and_then(|xmpp_stream| {
if Self::can_starttls(&xmpp_stream) {
Self::starttls(xmpp_stream)
Ok(Self::starttls(xmpp_stream))
} else {
panic!("No STARTTLS")
Err("No STARTTLS".to_owned())
}
}).and_then(|tls_stream|
}).and_then(|starttls|
starttls
).and_then(|tls_stream|
XMPPStream::start(tls_stream, jid2, NS_JABBER_CLIENT.to_owned())
.map_err(|e| format!("{}", e))
).and_then(move |xmpp_stream| {

View file

@ -11,6 +11,7 @@ extern crate sasl;
extern crate rustc_serialize as serialize;
extern crate jid;
extern crate domain;
extern crate idna;
pub mod xmpp_codec;
pub mod xmpp_stream;