ipc windows work
This commit is contained in:
		
							parent
							
								
									6f796db523
								
							
						
					
					
						commit
						05c4dacbe9
					
				
							
								
								
									
										22
									
								
								src/ipc.rs
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/ipc.rs
									
									
									
									
									
								
							| @ -5,10 +5,13 @@ use hbb_common::{ | |||||||
|     futures::StreamExt as _, |     futures::StreamExt as _, | ||||||
|     futures_util::sink::SinkExt, |     futures_util::sink::SinkExt, | ||||||
|     log, timeout, tokio, |     log, timeout, tokio, | ||||||
|  |     tokio::io::{AsyncRead, AsyncWrite}, | ||||||
|     tokio_util::codec::Framed, |     tokio_util::codec::Framed, | ||||||
|     ResultType, |     ResultType, | ||||||
| }; | }; | ||||||
| use parity_tokio_ipc::{Connection as Conn, Endpoint, Incoming, SecurityAttributes}; | use parity_tokio_ipc::{ | ||||||
|  |     Connection as Conn, ConnectionClient as ConnClient, Endpoint, Incoming, SecurityAttributes, | ||||||
|  | }; | ||||||
| use serde_derive::{Deserialize, Serialize}; | use serde_derive::{Deserialize, Serialize}; | ||||||
| use std::{collections::HashMap, net::SocketAddr}; | use std::{collections::HashMap, net::SocketAddr}; | ||||||
| #[cfg(not(windows))] | #[cfg(not(windows))] | ||||||
| @ -235,10 +238,10 @@ async fn handle(data: Data, stream: &mut Connection) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn connect(ms_timeout: u64, postfix: &str) -> ResultType<Connection> { | pub async fn connect(ms_timeout: u64, postfix: &str) -> ResultType<ConnectionTmpl<ConnClient>> { | ||||||
|     let path = Config::ipc_path(postfix); |     let path = Config::ipc_path(postfix); | ||||||
|     let client = timeout(ms_timeout, Endpoint::connect(&path)).await??; |     let client = timeout(ms_timeout, Endpoint::connect(&path)).await??; | ||||||
|     Ok(Connection::new(client)) |     Ok(ConnectionTmpl::new(client)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[inline] | #[inline] | ||||||
| @ -284,12 +287,17 @@ fn write_pid(postfix: &str) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct Connection { | pub struct ConnectionTmpl<T> { | ||||||
|     inner: Framed<Conn, BytesCodec>, |     inner: Framed<T, BytesCodec>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Connection { | pub type Connection = ConnectionTmpl<Conn>; | ||||||
|     pub fn new(conn: Conn) -> Self { | 
 | ||||||
|  | impl<T> ConnectionTmpl<T> | ||||||
|  | where | ||||||
|  |     T: AsyncRead + AsyncWrite + std::marker::Unpin, | ||||||
|  | { | ||||||
|  |     pub fn new(conn: T) -> Self { | ||||||
|         Self { |         Self { | ||||||
|             inner: Framed::new(conn, BytesCodec::new()), |             inner: Framed::new(conn, BytesCodec::new()), | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ use crate::ipc; | |||||||
| use hbb_common::{ | use hbb_common::{ | ||||||
|     allow_err, bail, |     allow_err, bail, | ||||||
|     config::{Config, APP_NAME}, |     config::{Config, APP_NAME}, | ||||||
|     futures_util::stream::StreamExt, |  | ||||||
|     log, sleep, timeout, tokio, |     log, sleep, timeout, tokio, | ||||||
| }; | }; | ||||||
| use std::io::prelude::*; | use std::io::prelude::*; | ||||||
| @ -652,7 +651,10 @@ pub fn get_active_username() -> String { | |||||||
|         return "".to_owned(); |         return "".to_owned(); | ||||||
|     } |     } | ||||||
|     let sl = unsafe { std::slice::from_raw_parts(buff.as_ptr(), n as _) }; |     let sl = unsafe { std::slice::from_raw_parts(buff.as_ptr(), n as _) }; | ||||||
|     String::from_utf16(sl).unwrap_or("??".to_owned()).trim_end_matches('\0').to_owned() |     String::from_utf16(sl) | ||||||
|  |         .unwrap_or("??".to_owned()) | ||||||
|  |         .trim_end_matches('\0') | ||||||
|  |         .to_owned() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -1038,7 +1040,6 @@ pub fn get_installed_version() -> String { | |||||||
|     "".to_owned() |     "".to_owned() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| pub fn create_shortcut(id: &str) -> ResultType<()> { | pub fn create_shortcut(id: &str) -> ResultType<()> { | ||||||
|     let exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); |     let exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); | ||||||
|     let shortcut = write_cmds( |     let shortcut = write_cmds( | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ pub async fn listen( | |||||||
|     interface: impl Interface, |     interface: impl Interface, | ||||||
|     ui_receiver: mpsc::UnboundedReceiver<Data>, |     ui_receiver: mpsc::UnboundedReceiver<Data>, | ||||||
| ) -> ResultType<()> { | ) -> ResultType<()> { | ||||||
|     let mut listener = tcp::new_listener(format!("0.0.0.0:{}", port), true).await?; |     let listener = tcp::new_listener(format!("0.0.0.0:{}", port), true).await?; | ||||||
|     let addr = listener.local_addr()?; |     let addr = listener.local_addr()?; | ||||||
|     log::info!("listening on port {:?}", addr); |     log::info!("listening on port {:?}", addr); | ||||||
|     let is_rdp = port == 0; |     let is_rdp = port == 0; | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ async fn accept_connection_(server: ServerPtr, socket: Stream, secure: bool) -> | |||||||
|     // even we drop socket, below still may fail if not use reuse_addr,
 |     // even we drop socket, below still may fail if not use reuse_addr,
 | ||||||
|     // there is TIME_WAIT before socket really released, so sometimes we
 |     // there is TIME_WAIT before socket really released, so sometimes we
 | ||||||
|     // see “Only one usage of each socket address is normally permitted” on windows sometimes,
 |     // see “Only one usage of each socket address is normally permitted” on windows sometimes,
 | ||||||
|     let mut listener = new_listener(local_addr, true).await?; |     let listener = new_listener(local_addr, true).await?; | ||||||
|     log::info!("Server listening on: {}", &listener.local_addr()?); |     log::info!("Server listening on: {}", &listener.local_addr()?); | ||||||
|     if let Ok((stream, addr)) = timeout(CONNECT_TIMEOUT, listener.accept()).await? { |     if let Ok((stream, addr)) = timeout(CONNECT_TIMEOUT, listener.accept()).await? { | ||||||
|         create_tcp_connection_(server, Stream::from(stream), addr, secure).await?; |         create_tcp_connection_(server, Stream::from(stream), addr, secure).await?; | ||||||
|  | |||||||
| @ -1,6 +1,4 @@ | |||||||
| use crate::ipc::{self, new_listener, Connection, Data}; | use crate::ipc::{self, new_listener, Connection, Data}; | ||||||
| #[cfg(windows)] |  | ||||||
| use hbb_common::futures_util::stream::StreamExt; |  | ||||||
| use hbb_common::{ | use hbb_common::{ | ||||||
|     allow_err, |     allow_err, | ||||||
|     config::{Config, ICON}, |     config::{Config, ICON}, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user