Line data Source code
1 : use std::io;
2 :
3 : use tokio::net::TcpStream;
4 :
5 : use crate::client::SocketConfig;
6 : use crate::config::{Host, SslMode};
7 : use crate::tls::MakeTlsConnect;
8 : use crate::{Error, cancel_query_raw, connect_socket};
9 :
10 0 : pub(crate) async fn cancel_query<T>(
11 0 : config: Option<SocketConfig>,
12 0 : ssl_mode: SslMode,
13 0 : mut tls: T,
14 0 : process_id: i32,
15 0 : secret_key: i32,
16 0 : ) -> Result<(), Error>
17 0 : where
18 0 : T: MakeTlsConnect<TcpStream>,
19 0 : {
20 0 : let config = match config {
21 0 : Some(config) => config,
22 : None => {
23 0 : return Err(Error::connect(io::Error::new(
24 0 : io::ErrorKind::InvalidInput,
25 0 : "unknown host",
26 0 : )));
27 : }
28 : };
29 :
30 0 : let hostname = match &config.host {
31 0 : Host::Tcp(host) => &**host,
32 : };
33 0 : let tls = tls
34 0 : .make_tls_connect(hostname)
35 0 : .map_err(|e| Error::tls(e.into()))?;
36 :
37 0 : let socket = connect_socket::connect_socket(
38 0 : config.host_addr,
39 0 : &config.host,
40 0 : config.port,
41 0 : config.connect_timeout,
42 0 : )
43 0 : .await?;
44 :
45 0 : cancel_query_raw::cancel_query_raw(socket, ssl_mode, tls, process_id, secret_key).await
46 0 : }
|