echo_bot.rs

 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}