1extern crate futures;
2extern crate tokio_core;
3extern crate tokio_xmpp;
4extern crate rustls;
5
6use std::sync::Arc;
7use std::io::BufReader;
8use std::fs::File;
9use tokio_core::reactor::Core;
10use futures::{Future, Stream};
11use tokio_xmpp::{Packet, TcpClient, StartTlsClient};
12use rustls::ClientConfig;
13
14fn main() {
15 use std::net::ToSocketAddrs;
16 let addr = "[2a01:4f8:a0:33d0::5]:5222"
17 .to_socket_addrs().unwrap()
18 .next().unwrap();
19
20 let mut config = ClientConfig::new();
21 let mut certfile = BufReader::new(File::open("/usr/share/ca-certificates/CAcert/root.crt").unwrap());
22 config.root_store.add_pem_file(&mut certfile).unwrap();
23 let arc_config = Arc::new(config);
24
25 let mut core = Core::new().unwrap();
26 let client = TcpClient::connect(
27 &addr,
28 &core.handle()
29 ).and_then(|stream| StartTlsClient::from_stream(stream, arc_config)
30 ).and_then(|stream| {
31 stream.for_each(|event| {
32 match event {
33 Packet::Stanza(el) => println!("<< {}", el),
34 _ => println!("!! {:?}", event),
35 }
36 Ok(())
37 })
38 });
39 match core.run(client) {
40 Ok(_) => (),
41 Err(e) => {
42 println!("Fatal: {}", e);
43 ()
44 }
45 }
46}