1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use actix_http::ws;
use actix_web::client::*;
use futures::prelude::*;
use openssl::ssl;
pub fn wss(
host: &str,
port: u16,
) -> impl Future<
Item = impl Sink<SinkItem = ws::Message, SinkError = ws::ProtocolError>
+ Stream<Item = ws::Frame, Error = ws::ProtocolError>,
Error = WsClientError,
> + 'static {
let mut builder = ssl::SslConnector::builder(ssl::SslMethod::tls()).unwrap();
builder.set_verify_callback(ssl::SslVerifyMode::NONE, |internal_check, cert| {
log::debug!(
"internal_check={}, cert={:?}",
internal_check,
cert.current_cert()
.map(|x| x.digest(openssl::hash::MessageDigest::sha1()).unwrap())
);
false
});
let connector = actix_http::client::Connector::new()
.ssl(builder.build())
.finish();
Client::build()
.connector(connector)
.finish()
.ws(format!("wss://{}:{}", host, port))
.header("Host", format!("{}:{}", host, port))
.protocols(&["wamp.2.msgpack"])
.connect()
.and_then(|(resp, framed): (ClientResponse, _)| {
log::debug!("wss response={:?}", resp);
Ok(framed)
})
}