mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-01-18 07:43:01 +08:00
Merge pull request #982 from twmsh/master
update bytes(protobuf types) mapping, from Vec<u8> to bytes:Byte
This commit is contained in:
commit
416832a1ed
@ -55,6 +55,7 @@ rpassword = "7.0"
|
|||||||
base64 = "0.13"
|
base64 = "0.13"
|
||||||
sysinfo = "0.24"
|
sysinfo = "0.24"
|
||||||
num_cpus = "1.13"
|
num_cpus = "1.13"
|
||||||
|
bytes = { version = "1.2", features = ["serde"] }
|
||||||
default-net = "0.11.0"
|
default-net = "0.11.0"
|
||||||
wol-rs = "0.9.1"
|
wol-rs = "0.9.1"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ protobuf = { version = "3.1", features = ["with-bytes"] }
|
|||||||
tokio = { version = "1.20", features = ["full"] }
|
tokio = { version = "1.20", features = ["full"] }
|
||||||
tokio-util = { version = "0.7", features = ["full"] }
|
tokio-util = { version = "0.7", features = ["full"] }
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
bytes = "1.1"
|
bytes = { version = "1.2", features = ["serde"] }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
env_logger = "0.9"
|
env_logger = "0.9"
|
||||||
socket2 = { version = "0.3", features = ["reuseport"] }
|
socket2 = { version = "0.3", features = ["reuseport"] }
|
||||||
|
@ -5,6 +5,10 @@ fn main() {
|
|||||||
.out_dir("src/protos")
|
.out_dir("src/protos")
|
||||||
.inputs(&["protos/rendezvous.proto", "protos/message.proto"])
|
.inputs(&["protos/rendezvous.proto", "protos/message.proto"])
|
||||||
.include("protos")
|
.include("protos")
|
||||||
|
.customize(
|
||||||
|
protobuf_codegen::Customize::default()
|
||||||
|
.tokio_bytes(true)
|
||||||
|
)
|
||||||
.run()
|
.run()
|
||||||
.expect("Codegen failed.");
|
.expect("Codegen failed.");
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ use crate::STRIDE_ALIGN;
|
|||||||
use super::vpx::{vp8e_enc_control_id::*, vpx_codec_err_t::*, *};
|
use super::vpx::{vp8e_enc_control_id::*, vpx_codec_err_t::*, *};
|
||||||
use std::os::raw::{c_int, c_uint};
|
use std::os::raw::{c_int, c_uint};
|
||||||
use std::{ptr, slice};
|
use std::{ptr, slice};
|
||||||
|
use hbb_common::bytes::Bytes;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||||
pub enum VpxVideoCodecId {
|
pub enum VpxVideoCodecId {
|
||||||
@ -291,7 +292,7 @@ impl VpxEncoder {
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn create_frame(frame: &EncodeFrame) -> EncodedVideoFrame {
|
fn create_frame(frame: &EncodeFrame) -> EncodedVideoFrame {
|
||||||
EncodedVideoFrame {
|
EncodedVideoFrame {
|
||||||
data: frame.data.to_vec(),
|
data: Bytes::from(frame.data.to_vec()),
|
||||||
key: frame.key,
|
key: frame.key,
|
||||||
pts: frame.pts,
|
pts: frame.pts,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -216,7 +216,7 @@ impl Client {
|
|||||||
} else {
|
} else {
|
||||||
peer_nat_type = ph.nat_type();
|
peer_nat_type = ph.nat_type();
|
||||||
is_local = ph.is_local();
|
is_local = ph.is_local();
|
||||||
signed_id_pk = ph.pk;
|
signed_id_pk = ph.pk.into();
|
||||||
relay_server = ph.relay_server;
|
relay_server = ph.relay_server;
|
||||||
peer_addr = AddrMangle::decode(&ph.socket_addr);
|
peer_addr = AddrMangle::decode(&ph.socket_addr);
|
||||||
log::info!("Hole Punched {} = {}", peer, peer_addr);
|
log::info!("Hole Punched {} = {}", peer, peer_addr);
|
||||||
@ -408,8 +408,8 @@ impl Client {
|
|||||||
let sealed_key = box_::seal(&key.0, &nonce, &their_pk_b, &out_sk_b);
|
let sealed_key = box_::seal(&key.0, &nonce, &their_pk_b, &out_sk_b);
|
||||||
let mut msg_out = Message::new();
|
let mut msg_out = Message::new();
|
||||||
msg_out.set_public_key(PublicKey {
|
msg_out.set_public_key(PublicKey {
|
||||||
asymmetric_value: our_pk_b.0.into(),
|
asymmetric_value: Vec::from(our_pk_b.0).into(),
|
||||||
symmetric_value: sealed_key,
|
symmetric_value: sealed_key.into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
timeout(CONNECT_TIMEOUT, conn.send(&msg_out)).await??;
|
timeout(CONNECT_TIMEOUT, conn.send(&msg_out)).await??;
|
||||||
@ -1139,7 +1139,7 @@ impl LoginConfigHandler {
|
|||||||
let my_id = Config::get_id();
|
let my_id = Config::get_id();
|
||||||
let mut lr = LoginRequest {
|
let mut lr = LoginRequest {
|
||||||
username: self.id.clone(),
|
username: self.id.clone(),
|
||||||
password,
|
password:password.into(),
|
||||||
my_id,
|
my_id,
|
||||||
my_name: crate::username(),
|
my_name: crate::username(),
|
||||||
option: self.get_option_message(true).into(),
|
option: self.get_option_message(true).into(),
|
||||||
|
@ -67,7 +67,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
|||||||
CliprdrServerFormatDataResponse {
|
CliprdrServerFormatDataResponse {
|
||||||
conn_id,
|
conn_id,
|
||||||
msg_flags,
|
msg_flags,
|
||||||
format_data,
|
format_data: format_data.into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
)),
|
)),
|
||||||
@ -117,7 +117,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
|||||||
conn_id,
|
conn_id,
|
||||||
msg_flags,
|
msg_flags,
|
||||||
stream_id,
|
stream_id,
|
||||||
requested_data,
|
requested_data: requested_data.into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
)),
|
)),
|
||||||
@ -156,7 +156,7 @@ pub fn msg_2_clip(msg: Cliprdr) -> Option<ClipbaordFile> {
|
|||||||
Some(ClipbaordFile::ServerFormatDataResponse {
|
Some(ClipbaordFile::ServerFormatDataResponse {
|
||||||
conn_id: data.conn_id,
|
conn_id: data.conn_id,
|
||||||
msg_flags: data.msg_flags,
|
msg_flags: data.msg_flags,
|
||||||
format_data: data.format_data,
|
format_data: data.format_data.into(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
Some(cliprdr::Union::FileContentsRequest(data)) => {
|
Some(cliprdr::Union::FileContentsRequest(data)) => {
|
||||||
@ -177,7 +177,7 @@ pub fn msg_2_clip(msg: Cliprdr) -> Option<ClipbaordFile> {
|
|||||||
conn_id: data.conn_id,
|
conn_id: data.conn_id,
|
||||||
msg_flags: data.msg_flags,
|
msg_flags: data.msg_flags,
|
||||||
stream_id: data.stream_id,
|
stream_id: data.stream_id,
|
||||||
requested_data: data.requested_data,
|
requested_data: data.requested_data.into(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
|
@ -48,7 +48,7 @@ pub fn create_clipboard_msg(content: String) -> Message {
|
|||||||
let mut msg = Message::new();
|
let mut msg = Message::new();
|
||||||
msg.set_clipboard(Clipboard {
|
msg.set_clipboard(Clipboard {
|
||||||
compress,
|
compress,
|
||||||
content,
|
content:content.into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
msg
|
msg
|
||||||
@ -79,7 +79,7 @@ pub fn update_clipboard(clipboard: Clipboard, old: Option<&Arc<Mutex<String>>>)
|
|||||||
let content = if clipboard.compress {
|
let content = if clipboard.compress {
|
||||||
decompress(&clipboard.content)
|
decompress(&clipboard.content)
|
||||||
} else {
|
} else {
|
||||||
clipboard.content
|
clipboard.content.into()
|
||||||
};
|
};
|
||||||
if let Ok(content) = String::from_utf8(content) {
|
if let Ok(content) = String::from_utf8(content) {
|
||||||
if content.is_empty() {
|
if content.is_empty() {
|
||||||
|
@ -19,6 +19,7 @@ use parity_tokio_ipc::{
|
|||||||
};
|
};
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
use std::{collections::HashMap, sync::atomic::Ordering};
|
use std::{collections::HashMap, sync::atomic::Ordering};
|
||||||
|
use bytes::Bytes;
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
use std::{fs::File, io::prelude::*};
|
use std::{fs::File, io::prelude::*};
|
||||||
|
|
||||||
@ -75,7 +76,7 @@ pub enum FS {
|
|||||||
WriteBlock {
|
WriteBlock {
|
||||||
id: i32,
|
id: i32,
|
||||||
file_num: i32,
|
file_num: i32,
|
||||||
data: Vec<u8>,
|
data: Bytes,
|
||||||
compressed: bool,
|
compressed: bool,
|
||||||
},
|
},
|
||||||
WriteDone {
|
WriteDone {
|
||||||
@ -562,8 +563,8 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn send_raw(&mut self, data: Vec<u8>) -> ResultType<()> {
|
pub async fn send_raw(&mut self, data: Bytes) -> ResultType<()> {
|
||||||
self.inner.send(bytes::Bytes::from(data)).await?;
|
self.inner.send(data).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +111,8 @@ pub fn get_cursor_data(hcursor: u64) -> ResultType<CursorData> {
|
|||||||
cd.id = (*img).cursor_serial as _;
|
cd.id = (*img).cursor_serial as _;
|
||||||
let pixels =
|
let pixels =
|
||||||
std::slice::from_raw_parts((*img).pixels, (cd.width * cd.height) as _);
|
std::slice::from_raw_parts((*img).pixels, (cd.width * cd.height) as _);
|
||||||
cd.colors.resize(pixels.len() * 4, 0);
|
// cd.colors.resize(pixels.len() * 4, 0);
|
||||||
|
let mut cd_colors = vec![0_u8; pixels.len() * 4];
|
||||||
for y in 0..cd.height {
|
for y in 0..cd.height {
|
||||||
for x in 0..cd.width {
|
for x in 0..cd.width {
|
||||||
let pos = (y * cd.width + x) as usize;
|
let pos = (y * cd.width + x) as usize;
|
||||||
@ -124,12 +125,13 @@ pub fn get_cursor_data(hcursor: u64) -> ResultType<CursorData> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let pos = pos * 4;
|
let pos = pos * 4;
|
||||||
cd.colors[pos] = r as _;
|
cd_colors[pos] = r as _;
|
||||||
cd.colors[pos + 1] = g as _;
|
cd_colors[pos + 1] = g as _;
|
||||||
cd.colors[pos + 2] = b as _;
|
cd_colors[pos + 2] = b as _;
|
||||||
cd.colors[pos + 3] = a as _;
|
cd_colors[pos + 3] = a as _;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cd.colors = cd_colors.into();
|
||||||
res = Some(cd);
|
res = Some(cd);
|
||||||
}
|
}
|
||||||
if !img.is_null() {
|
if !img.is_null() {
|
||||||
|
@ -342,7 +342,7 @@ pub fn get_cursor_data(hcursor: u64) -> ResultType<CursorData> {
|
|||||||
}
|
}
|
||||||
Ok(CursorData {
|
Ok(CursorData {
|
||||||
id: hcursor,
|
id: hcursor,
|
||||||
colors,
|
colors: colors.into(),
|
||||||
hotx: hotspot.x as _,
|
hotx: hotspot.x as _,
|
||||||
hoty: hotspot.y as _,
|
hoty: hotspot.y as _,
|
||||||
width: size.width as _,
|
width: size.width as _,
|
||||||
|
@ -164,7 +164,7 @@ pub fn get_cursor_data(hcursor: u64) -> ResultType<CursorData> {
|
|||||||
|
|
||||||
Ok(CursorData {
|
Ok(CursorData {
|
||||||
id: hcursor,
|
id: hcursor,
|
||||||
colors: cbits,
|
colors: cbits.into(),
|
||||||
hotx: ii.0.xHotspot as _,
|
hotx: ii.0.xHotspot as _,
|
||||||
hoty: ii.0.yHotspot as _,
|
hoty: ii.0.yHotspot as _,
|
||||||
width: width as _,
|
width: width as _,
|
||||||
|
@ -266,7 +266,7 @@ impl RendezvousMediator {
|
|||||||
|
|
||||||
async fn handle_request_relay(&self, rr: RequestRelay, server: ServerPtr) -> ResultType<()> {
|
async fn handle_request_relay(&self, rr: RequestRelay, server: ServerPtr) -> ResultType<()> {
|
||||||
self.create_relay(
|
self.create_relay(
|
||||||
rr.socket_addr,
|
rr.socket_addr.into(),
|
||||||
rr.relay_server,
|
rr.relay_server,
|
||||||
rr.uuid,
|
rr.uuid,
|
||||||
server,
|
server,
|
||||||
@ -303,7 +303,7 @@ impl RendezvousMediator {
|
|||||||
|
|
||||||
let mut msg_out = Message::new();
|
let mut msg_out = Message::new();
|
||||||
let mut rr = RelayResponse {
|
let mut rr = RelayResponse {
|
||||||
socket_addr,
|
socket_addr: socket_addr.into(),
|
||||||
version: crate::VERSION.to_owned(),
|
version: crate::VERSION.to_owned(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
@ -334,8 +334,8 @@ impl RendezvousMediator {
|
|||||||
let relay_server = self.get_relay_server(fla.relay_server);
|
let relay_server = self.get_relay_server(fla.relay_server);
|
||||||
msg_out.set_local_addr(LocalAddr {
|
msg_out.set_local_addr(LocalAddr {
|
||||||
id: Config::get_id(),
|
id: Config::get_id(),
|
||||||
socket_addr: AddrMangle::encode(peer_addr),
|
socket_addr: AddrMangle::encode(peer_addr).into(),
|
||||||
local_addr: AddrMangle::encode(local_addr),
|
local_addr: AddrMangle::encode(local_addr).into(),
|
||||||
relay_server,
|
relay_server,
|
||||||
version: crate::VERSION.to_owned(),
|
version: crate::VERSION.to_owned(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -353,7 +353,7 @@ impl RendezvousMediator {
|
|||||||
{
|
{
|
||||||
let uuid = Uuid::new_v4().to_string();
|
let uuid = Uuid::new_v4().to_string();
|
||||||
return self
|
return self
|
||||||
.create_relay(ph.socket_addr, relay_server, uuid, server, true, true)
|
.create_relay(ph.socket_addr.into(), relay_server, uuid, server, true, true)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
let peer_addr = AddrMangle::decode(&ph.socket_addr);
|
let peer_addr = AddrMangle::decode(&ph.socket_addr);
|
||||||
@ -394,8 +394,8 @@ impl RendezvousMediator {
|
|||||||
self.last_id_pk_registry = id.clone();
|
self.last_id_pk_registry = id.clone();
|
||||||
msg_out.set_register_pk(RegisterPk {
|
msg_out.set_register_pk(RegisterPk {
|
||||||
id,
|
id,
|
||||||
uuid,
|
uuid: uuid.into(),
|
||||||
pk,
|
pk: pk.into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
socket.send(&msg_out, self.addr.to_owned()).await?;
|
socket.send(&msg_out, self.addr.to_owned()).await?;
|
||||||
|
@ -20,6 +20,8 @@ use std::{
|
|||||||
sync::{Arc, Mutex, RwLock, Weak},
|
sync::{Arc, Mutex, RwLock, Weak},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
use bytes::Bytes;
|
||||||
|
|
||||||
pub mod audio_service;
|
pub mod audio_service;
|
||||||
cfg_if::cfg_if! {
|
cfg_if::cfg_if! {
|
||||||
if #[cfg(not(any(target_os = "android", target_os = "ios")))] {
|
if #[cfg(not(any(target_os = "android", target_os = "ios")))] {
|
||||||
@ -130,13 +132,13 @@ pub async fn create_tcp_connection(
|
|||||||
id: sign::sign(
|
id: sign::sign(
|
||||||
&IdPk {
|
&IdPk {
|
||||||
id: Config::get_id(),
|
id: Config::get_id(),
|
||||||
pk: our_pk_b.0.to_vec(),
|
pk: Bytes::from(our_pk_b.0.to_vec()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
.write_to_bytes()
|
.write_to_bytes()
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
&sk,
|
&sk,
|
||||||
),
|
).into(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
timeout(CONNECT_TIMEOUT, stream.send(&msg_out)).await??;
|
timeout(CONNECT_TIMEOUT, stream.send(&msg_out)).await??;
|
||||||
|
@ -367,7 +367,7 @@ fn send_f32(data: &[f32], encoder: &mut Encoder, sp: &GenericService) {
|
|||||||
Ok(data) => {
|
Ok(data) => {
|
||||||
let mut msg_out = Message::new();
|
let mut msg_out = Message::new();
|
||||||
msg_out.set_audio_frame(AudioFrame {
|
msg_out.set_audio_frame(AudioFrame {
|
||||||
data,
|
data: data.into(),
|
||||||
timestamp: crate::common::get_time(),
|
timestamp: crate::common::get_time(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -1459,7 +1459,7 @@ async fn start_ipc(
|
|||||||
file_num,
|
file_num,
|
||||||
data,
|
data,
|
||||||
compressed}) = data {
|
compressed}) = data {
|
||||||
stream.send(&Data::FS(ipc::FS::WriteBlock{id, file_num, data: Vec::new(), compressed})).await?;
|
stream.send(&Data::FS(ipc::FS::WriteBlock{id, file_num, data: Bytes::new(), compressed})).await?;
|
||||||
stream.send_raw(data).await?;
|
stream.send_raw(data).await?;
|
||||||
} else {
|
} else {
|
||||||
stream.send(&data).await?;
|
stream.send(&data).await?;
|
||||||
|
@ -145,7 +145,7 @@ fn run_cursor(sp: MouseCursorService, state: &mut StateCursor) -> ResultType<()>
|
|||||||
msg = cached.clone();
|
msg = cached.clone();
|
||||||
} else {
|
} else {
|
||||||
let mut data = crate::get_cursor_data(hcursor)?;
|
let mut data = crate::get_cursor_data(hcursor)?;
|
||||||
data.colors = hbb_common::compress::compress(&data.colors[..], COMPRESS_LEVEL);
|
data.colors = hbb_common::compress::compress(&data.colors[..], COMPRESS_LEVEL).into();
|
||||||
let mut tmp = Message::new();
|
let mut tmp = Message::new();
|
||||||
tmp.set_cursor_data(data);
|
tmp.set_cursor_data(data);
|
||||||
msg = Arc::new(tmp);
|
msg = Arc::new(tmp);
|
||||||
|
@ -590,7 +590,7 @@ async fn start_pa() {
|
|||||||
} else {
|
} else {
|
||||||
buf.clone()
|
buf.clone()
|
||||||
};
|
};
|
||||||
if let Err(err) = stream.send_raw(out).await {
|
if let Err(err) = stream.send_raw(out.into()).await {
|
||||||
log::error!("Failed to send audio data:{}", err);
|
log::error!("Failed to send audio data:{}", err);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user