Merge pull request #5223 from dignow/refact/win_clipboard_use_ref_instead_of_box_ref

win clipboard context, use ref instead of box ref
This commit is contained in:
RustDesk 2023-08-01 22:12:01 +08:00 committed by GitHub
commit 17587bb299
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 35 deletions

View File

@ -57,15 +57,10 @@ impl ContextSend {
} }
} }
pub fn proc<F: FnOnce(&mut Box<CliprdrClientContext>) -> u32>(f: F) -> u32 { pub fn proc<F: FnOnce(&mut CliprdrClientContext) -> u32>(f: F) -> u32 {
let lock = CONTEXT_SEND.addr.lock().unwrap(); let lock = CONTEXT_SEND.addr.lock().unwrap();
if *lock != 0 { if *lock != 0 {
unsafe { unsafe { f(&mut *(*lock as *mut CliprdrClientContext)) }
let mut context = Box::from_raw(*lock as *mut CliprdrClientContext);
let code = f(&mut context);
std::mem::forget(context);
code
}
} else { } else {
0 0
} }

View File

@ -164,12 +164,12 @@ fn send_data(conn_id: i32, data: ClipboardFile) {
} }
} }
pub fn empty_clipboard(context: &mut Box<CliprdrClientContext>, conn_id: i32) -> bool { pub fn empty_clipboard(context: &mut CliprdrClientContext, conn_id: i32) -> bool {
unsafe { TRUE == cliprdr::empty_cliprdr(&mut (**context), conn_id as u32) } unsafe { TRUE == cliprdr::empty_cliprdr(context, conn_id as u32) }
} }
pub fn server_clip_file( pub fn server_clip_file(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
msg: ClipboardFile, msg: ClipboardFile,
) -> u32 { ) -> u32 {
@ -294,7 +294,7 @@ pub fn server_clip_file(
ret ret
} }
pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i32) -> u32 { pub fn server_monitor_ready(context: &mut CliprdrClientContext, conn_id: i32) -> u32 {
unsafe { unsafe {
let monitor_ready = CLIPRDR_MONITOR_READY { let monitor_ready = CLIPRDR_MONITOR_READY {
connID: conn_id as UINT32, connID: conn_id as UINT32,
@ -302,8 +302,8 @@ pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i3
msgFlags: 0 as UINT16, msgFlags: 0 as UINT16,
dataLen: 0 as UINT32, dataLen: 0 as UINT32,
}; };
if let Some(f) = (**context).MonitorReady { if let Some(f) = context.MonitorReady {
let ret = f(&mut (**context), &monitor_ready); let ret = f(context, &monitor_ready);
ret as u32 ret as u32
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
@ -312,7 +312,7 @@ pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i3
} }
pub fn server_format_list( pub fn server_format_list(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
format_list: Vec<(i32, String)>, format_list: Vec<(i32, String)>,
) -> u32 { ) -> u32 {
@ -348,8 +348,8 @@ pub fn server_format_list(
formats: formats.as_mut_ptr(), formats: formats.as_mut_ptr(),
}; };
let ret = if let Some(f) = (**context).ServerFormatList { let ret = if let Some(f) = context.ServerFormatList {
f(&mut (**context), &format_list) f(context, &format_list)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
}; };
@ -366,7 +366,7 @@ pub fn server_format_list(
} }
pub fn server_format_list_response( pub fn server_format_list_response(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
msg_flags: i32, msg_flags: i32,
) -> u32 { ) -> u32 {
@ -378,8 +378,8 @@ pub fn server_format_list_response(
dataLen: 0 as UINT32, dataLen: 0 as UINT32,
}; };
if let Some(f) = (**context).ServerFormatListResponse { if let Some(f) = context.ServerFormatListResponse {
f(&mut (**context), &format_list_response) f(context, &format_list_response)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
} }
@ -387,7 +387,7 @@ pub fn server_format_list_response(
} }
pub fn server_format_data_request( pub fn server_format_data_request(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
requested_format_id: i32, requested_format_id: i32,
) -> u32 { ) -> u32 {
@ -399,8 +399,8 @@ pub fn server_format_data_request(
dataLen: 0 as UINT32, dataLen: 0 as UINT32,
requestedFormatId: requested_format_id as UINT32, requestedFormatId: requested_format_id as UINT32,
}; };
if let Some(f) = (**context).ServerFormatDataRequest { if let Some(f) = context.ServerFormatDataRequest {
f(&mut (**context), &format_data_request) f(context, &format_data_request)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
} }
@ -408,7 +408,7 @@ pub fn server_format_data_request(
} }
pub fn server_format_data_response( pub fn server_format_data_response(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
msg_flags: i32, msg_flags: i32,
mut format_data: Vec<u8>, mut format_data: Vec<u8>,
@ -421,8 +421,8 @@ pub fn server_format_data_response(
dataLen: format_data.len() as UINT32, dataLen: format_data.len() as UINT32,
requestedFormatData: format_data.as_mut_ptr(), requestedFormatData: format_data.as_mut_ptr(),
}; };
if let Some(f) = (**context).ServerFormatDataResponse { if let Some(f) = context.ServerFormatDataResponse {
f(&mut (**context), &format_data_response) f(context, &format_data_response)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
} }
@ -430,7 +430,7 @@ pub fn server_format_data_response(
} }
pub fn server_file_contents_request( pub fn server_file_contents_request(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
stream_id: i32, stream_id: i32,
list_index: i32, list_index: i32,
@ -456,8 +456,8 @@ pub fn server_file_contents_request(
haveClipDataId: if have_clip_data_id { TRUE } else { FALSE }, haveClipDataId: if have_clip_data_id { TRUE } else { FALSE },
clipDataId: clip_data_id as UINT32, clipDataId: clip_data_id as UINT32,
}; };
if let Some(f) = (**context).ServerFileContentsRequest { if let Some(f) = context.ServerFileContentsRequest {
f(&mut (**context), &file_contents_request) f(context, &file_contents_request)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
} }
@ -465,7 +465,7 @@ pub fn server_file_contents_request(
} }
pub fn server_file_contents_response( pub fn server_file_contents_response(
context: &mut Box<CliprdrClientContext>, context: &mut CliprdrClientContext,
conn_id: i32, conn_id: i32,
msg_flags: i32, msg_flags: i32,
stream_id: i32, stream_id: i32,
@ -481,8 +481,8 @@ pub fn server_file_contents_response(
cbRequested: requested_data.len() as UINT32, cbRequested: requested_data.len() as UINT32,
requestedData: requested_data.as_mut_ptr(), requestedData: requested_data.as_mut_ptr(),
}; };
if let Some(f) = (**context).ServerFileContentsResponse { if let Some(f) = context.ServerFileContentsResponse {
f(&mut (**context), &file_contents_response) f(context, &file_contents_response)
} else { } else {
ERR_CODE_SERVER_FUNCTION_NONE ERR_CODE_SERVER_FUNCTION_NONE
} }

View File

@ -251,7 +251,7 @@ impl<T: InvokeUiSession> Remote<T> {
#[cfg(windows)] #[cfg(windows)]
{ {
let conn_id = self.client_conn_id; let conn_id = self.client_conn_id;
ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 { ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
empty_clipboard(context, conn_id); empty_clipboard(context, conn_id);
0 0
}); });
@ -1624,7 +1624,7 @@ impl<T: InvokeUiSession> Remote<T> {
"Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}", "Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}",
stop, is_stopping_allowed, file_transfer_enabled); stop, is_stopping_allowed, file_transfer_enabled);
if !stop { if !stop {
ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 { ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
clipboard::server_clip_file(context, self.client_conn_id, clip) clipboard::server_clip_file(context, self.client_conn_id, clip)
}); });
} }

View File

@ -184,7 +184,7 @@ impl<T: InvokeUiCM> ConnectionManager<T> {
#[cfg(windows)] #[cfg(windows)]
{ {
ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 { ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
empty_clipboard(context, id); empty_clipboard(context, id);
0 0
}); });
@ -427,7 +427,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
continue; continue;
} }
let conn_id = self.conn_id; let conn_id = self.conn_id;
ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 { ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
clipboard::server_clip_file(context, conn_id, _clip) clipboard::server_clip_file(context, conn_id, _clip)
}); });
} }