rustdesk лет назад: 3
Родитель
Сommit
51d8cd80c1
9 измененных файлов с 107 добавлено и 111 удалено
  1. 1 0
      .gitignore
  2. 31 32
      Cargo.lock
  3. 5 5
      libs/hbb_common/Cargo.toml
  4. 6 1
      libs/hbb_common/build.rs
  5. 1 2
      src/common.rs
  6. 3 19
      src/database.rs
  7. 9 14
      src/peer.rs
  8. 1 1
      src/relay_server.rs
  9. 50 37
      src/rendezvous_server.rs

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@ db*
4
 debian-build
4
 debian-build
5
 debian/.debhelper
5
 debian/.debhelper
6
 debian/debhelper-build-stamp
6
 debian/debhelper-build-stamp
7
+.DS_Store

+ 31 - 32
Cargo.lock

@@ -194,9 +194,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
194
 
194
 
195
 [[package]]
195
 [[package]]
196
 name = "bytes"
196
 name = "bytes"
197
-version = "1.1.0"
197
+version = "1.2.0"
198
 source = "registry+https://github.com/rust-lang/crates.io-index"
198
 source = "registry+https://github.com/rust-lang/crates.io-index"
199
-checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
199
+checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e"
200
 
200
 
201
 [[package]]
201
 [[package]]
202
 name = "cc"
202
 name = "cc"
@@ -749,7 +749,7 @@ dependencies = [
749
  "log",
749
  "log",
750
  "mac_address",
750
  "mac_address",
751
  "protobuf",
751
  "protobuf",
752
- "protobuf-codegen-pure",
752
+ "protobuf-codegen",
753
  "quinn",
753
  "quinn",
754
  "rand",
754
  "rand",
755
  "regex",
755
  "regex",
@@ -760,7 +760,7 @@ dependencies = [
760
  "sodiumoxide",
760
  "sodiumoxide",
761
  "tokio",
761
  "tokio",
762
  "tokio-socks",
762
  "tokio-socks",
763
- "tokio-util 0.6.9",
763
+ "tokio-util 0.7.1",
764
  "toml",
764
  "toml",
765
  "winapi",
765
  "winapi",
766
  "zstd",
766
  "zstd",
@@ -1463,58 +1463,54 @@ dependencies = [
1463
 
1463
 
1464
 [[package]]
1464
 [[package]]
1465
 name = "protobuf"
1465
 name = "protobuf"
1466
-version = "3.0.0-alpha.2"
1467
-source = "registry+https://github.com/rust-lang/crates.io-index"
1468
-checksum = "9d5ef59c35c7472ce5e1b6c5924b87585143d1fc2cf39eae0009bba6c4df62f1"
1469
-
1470
-[[package]]
1471
-name = "protobuf-codegen"
1472
-version = "3.0.0-alpha.2"
1466
+version = "3.1.0"
1473
 source = "registry+https://github.com/rust-lang/crates.io-index"
1467
 source = "registry+https://github.com/rust-lang/crates.io-index"
1474
-checksum = "89100ee819f69b77a4cab389fec9dd155a305af4c615e6413ec1ef9341f333ef"
1468
+checksum = "4ee4a7d8b91800c8f167a6268d1a1026607368e1adc84e98fe044aeb905302f7"
1475
 dependencies = [
1469
 dependencies = [
1476
- "anyhow",
1477
- "protobuf",
1478
- "protobuf-parse",
1470
+ "bytes",
1471
+ "once_cell",
1472
+ "protobuf-support",
1479
  "thiserror",
1473
  "thiserror",
1480
 ]
1474
 ]
1481
 
1475
 
1482
 [[package]]
1476
 [[package]]
1483
-name = "protobuf-codegen-pure"
1484
-version = "3.0.0-alpha.2"
1477
+name = "protobuf-codegen"
1478
+version = "3.1.0"
1485
 source = "registry+https://github.com/rust-lang/crates.io-index"
1479
 source = "registry+https://github.com/rust-lang/crates.io-index"
1486
-checksum = "79453e74d08190551e821533ee42c447f9e21ca26f83520e120e6e8af27f6879"
1480
+checksum = "07b893e5e7d3395545d5244f8c0d33674025bd566b26c03bfda49b82c6dec45e"
1487
 dependencies = [
1481
 dependencies = [
1488
  "anyhow",
1482
  "anyhow",
1483
+ "once_cell",
1489
  "protobuf",
1484
  "protobuf",
1490
- "protobuf-codegen",
1491
  "protobuf-parse",
1485
  "protobuf-parse",
1486
+ "regex",
1487
+ "tempfile",
1492
  "thiserror",
1488
  "thiserror",
1493
 ]
1489
 ]
1494
 
1490
 
1495
 [[package]]
1491
 [[package]]
1496
 name = "protobuf-parse"
1492
 name = "protobuf-parse"
1497
-version = "3.0.0-alpha.2"
1493
+version = "3.1.0"
1498
 source = "registry+https://github.com/rust-lang/crates.io-index"
1494
 source = "registry+https://github.com/rust-lang/crates.io-index"
1499
-checksum = "c265ffc69976efc3056955b881641add3186ad0be893ef10622482d80d1d2b68"
1495
+checksum = "9b1447dd751c434cc1b415579837ebd0411ed7d67d465f38010da5d7cd33af4d"
1500
 dependencies = [
1496
 dependencies = [
1501
  "anyhow",
1497
  "anyhow",
1498
+ "indexmap",
1499
+ "log",
1502
  "protobuf",
1500
  "protobuf",
1503
- "protoc",
1501
+ "protobuf-support",
1504
  "tempfile",
1502
  "tempfile",
1505
  "thiserror",
1503
  "thiserror",
1504
+ "which",
1506
 ]
1505
 ]
1507
 
1506
 
1508
 [[package]]
1507
 [[package]]
1509
-name = "protoc"
1510
-version = "3.0.0-alpha.2"
1508
+name = "protobuf-support"
1509
+version = "3.1.0"
1511
 source = "registry+https://github.com/rust-lang/crates.io-index"
1510
 source = "registry+https://github.com/rust-lang/crates.io-index"
1512
-checksum = "1f1f8b318a54d18fbe542513331e058f4f8ce6502e542e057c50c7e5e803fdab"
1511
+checksum = "8ca157fe12fc7ee2e315f2f735e27df41b3d97cdd70ea112824dac1ffb08ee1c"
1513
 dependencies = [
1512
 dependencies = [
1514
- "anyhow",
1515
- "log",
1516
  "thiserror",
1513
  "thiserror",
1517
- "which",
1518
 ]
1514
 ]
1519
 
1515
 
1520
 [[package]]
1516
 [[package]]
@@ -2197,10 +2193,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
2197
 
2193
 
2198
 [[package]]
2194
 [[package]]
2199
 name = "tokio"
2195
 name = "tokio"
2200
-version = "1.18.2"
2196
+version = "1.20.0"
2201
 source = "registry+https://github.com/rust-lang/crates.io-index"
2197
 source = "registry+https://github.com/rust-lang/crates.io-index"
2202
-checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
2198
+checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e"
2203
 dependencies = [
2199
 dependencies = [
2200
+ "autocfg",
2204
  "bytes",
2201
  "bytes",
2205
  "libc",
2202
  "libc",
2206
  "memchr",
2203
  "memchr",
@@ -2284,11 +2281,9 @@ checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
2284
 dependencies = [
2281
 dependencies = [
2285
  "bytes",
2282
  "bytes",
2286
  "futures-core",
2283
  "futures-core",
2287
- "futures-io",
2288
  "futures-sink",
2284
  "futures-sink",
2289
  "log",
2285
  "log",
2290
  "pin-project-lite",
2286
  "pin-project-lite",
2291
- "slab",
2292
  "tokio",
2287
  "tokio",
2293
 ]
2288
 ]
2294
 
2289
 
@@ -2300,9 +2295,13 @@ checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764"
2300
 dependencies = [
2295
 dependencies = [
2301
  "bytes",
2296
  "bytes",
2302
  "futures-core",
2297
  "futures-core",
2298
+ "futures-io",
2303
  "futures-sink",
2299
  "futures-sink",
2300
+ "futures-util",
2304
  "pin-project-lite",
2301
  "pin-project-lite",
2302
+ "slab",
2305
  "tokio",
2303
  "tokio",
2304
+ "tracing",
2306
 ]
2305
 ]
2307
 
2306
 
2308
 [[package]]
2307
 [[package]]

+ 5 - 5
libs/hbb_common/Cargo.toml

@@ -7,11 +7,11 @@ edition = "2018"
7
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
 
8
 
9
 [dependencies]
9
 [dependencies]
10
-protobuf = "3.0.0-alpha.2"
11
-tokio = { version = "1.15", features = ["full"] }
12
-tokio-util = { version = "0.6", features = ["full"] }
10
+protobuf = { version = "3.1", features = ["with-bytes"] }
11
+tokio = { version = "1.20", features = ["full"] }
12
+tokio-util = { version = "0.7", features = ["full"] }
13
 futures = "0.3"
13
 futures = "0.3"
14
-bytes = "1.1"
14
+bytes = "1.2"
15
 log = "0.4"
15
 log = "0.4"
16
 env_logger = "0.9"
16
 env_logger = "0.9"
17
 socket2 = { version = "0.3", features = ["reuseport"] }
17
 socket2 = { version = "0.3", features = ["reuseport"] }
@@ -38,7 +38,7 @@ mac_address = "1.1"
38
 quic = []
38
 quic = []
39
 
39
 
40
 [build-dependencies]
40
 [build-dependencies]
41
-protobuf-codegen-pure = "3.0.0-alpha.2"
41
+protobuf-codegen = "3.1"
42
 
42
 
43
 [target.'cfg(target_os = "windows")'.dependencies]
43
 [target.'cfg(target_os = "windows")'.dependencies]
44
 winapi = { version = "0.3", features = ["winuser"] }
44
 winapi = { version = "0.3", features = ["winuser"] }

+ 6 - 1
libs/hbb_common/build.rs

@@ -1,9 +1,14 @@
1
 fn main() {
1
 fn main() {
2
     std::fs::create_dir_all("src/protos").unwrap();
2
     std::fs::create_dir_all("src/protos").unwrap();
3
-    protobuf_codegen_pure::Codegen::new()
3
+    protobuf_codegen::Codegen::new()
4
+        .pure()
4
         .out_dir("src/protos")
5
         .out_dir("src/protos")
5
         .inputs(&["protos/rendezvous.proto", "protos/message.proto"])
6
         .inputs(&["protos/rendezvous.proto", "protos/message.proto"])
6
         .include("protos")
7
         .include("protos")
8
+        .customize(
9
+            protobuf_codegen::Customize::default()
10
+            .tokio_bytes(true)
11
+        )
7
         .run()
12
         .run()
8
         .expect("Codegen failed.");
13
         .expect("Codegen failed.");
9
 }
14
 }

+ 1 - 2
src/common.rs

@@ -3,10 +3,9 @@ use hbb_common::{anyhow::Context, log, ResultType};
3
 use ini::Ini;
3
 use ini::Ini;
4
 use sodiumoxide::crypto::sign;
4
 use sodiumoxide::crypto::sign;
5
 use std::{
5
 use std::{
6
-    collections::HashMap,
7
     io::prelude::*,
6
     io::prelude::*,
8
     io::Read,
7
     io::Read,
9
-    net::{IpAddr, SocketAddr},
8
+    net::SocketAddr,
10
     time::{Instant, SystemTime},
9
     time::{Instant, SystemTime},
11
 };
10
 };
12
 
11
 

+ 3 - 19
src/database.rs

@@ -8,9 +8,7 @@ use std::{ops::DerefMut, str::FromStr};
8
 //use sqlx::postgres::PgPoolOptions;
8
 //use sqlx::postgres::PgPoolOptions;
9
 //use sqlx::mysql::MySqlPoolOptions;
9
 //use sqlx::mysql::MySqlPoolOptions;
10
 
10
 
11
-pub(crate) type DB = sqlx::Sqlite;
12
 pub(crate) type MapValue = serde_json::map::Map<String, Value>;
11
 pub(crate) type MapValue = serde_json::map::Map<String, Value>;
13
-pub(crate) type MapStr = std::collections::HashMap<String, String>;
14
 type Pool = deadpool::managed::Pool<DbPool>;
12
 type Pool = deadpool::managed::Pool<DbPool>;
15
 
13
 
16
 pub struct DbPool {
14
 pub struct DbPool {
@@ -107,13 +105,6 @@ impl Database {
107
         .await?)
105
         .await?)
108
     }
106
     }
109
 
107
 
110
-    pub async fn get_peer_id(&self, guid: &[u8]) -> ResultType<Option<String>> {
111
-        Ok(sqlx::query!("select id from peer where guid = ?", guid)
112
-            .fetch_optional(self.pool.get().await?.deref_mut())
113
-            .await?
114
-            .map(|x| x.id))
115
-    }
116
-
117
     #[inline]
108
     #[inline]
118
     pub async fn get_conn(&self) -> ResultType<deadpool::managed::Object<DbPool>> {
109
     pub async fn get_conn(&self) -> ResultType<deadpool::managed::Object<DbPool>> {
119
         Ok(self.pool.get().await?)
110
         Ok(self.pool.get().await?)
@@ -135,8 +126,8 @@ impl Database {
135
     pub async fn insert_peer(
126
     pub async fn insert_peer(
136
         &self,
127
         &self,
137
         id: &str,
128
         id: &str,
138
-        uuid: &Vec<u8>,
139
-        pk: &Vec<u8>,
129
+        uuid: &[u8],
130
+        pk: &[u8],
140
         info: &str,
131
         info: &str,
141
     ) -> ResultType<Vec<u8>> {
132
     ) -> ResultType<Vec<u8>> {
142
         let guid = uuid::Uuid::new_v4().as_bytes().to_vec();
133
         let guid = uuid::Uuid::new_v4().as_bytes().to_vec();
@@ -157,7 +148,7 @@ impl Database {
157
         &self,
148
         &self,
158
         guid: &Vec<u8>,
149
         guid: &Vec<u8>,
159
         id: &str,
150
         id: &str,
160
-        pk: &Vec<u8>,
151
+        pk: &[u8],
161
         info: &str,
152
         info: &str,
162
     ) -> ResultType<()> {
153
     ) -> ResultType<()> {
163
         sqlx::query!(
154
         sqlx::query!(
@@ -209,13 +200,6 @@ mod tests {
209
     }
200
     }
210
 }
201
 }
211
 
202
 
212
-#[inline]
213
-pub fn guid2str(guid: &Vec<u8>) -> String {
214
-    let mut bytes = [0u8; 16];
215
-    bytes[..].copy_from_slice(&guid);
216
-    uuid::Uuid::from_bytes(bytes).to_string()
217
-}
218
-
219
 pub(crate) fn get_str(v: &Value) -> Option<&str> {
203
 pub(crate) fn get_str(v: &Value) -> Option<&str> {
220
     match v {
204
     match v {
221
         Value::String(v) => {
205
         Value::String(v) => {

+ 9 - 14
src/peer.rs

@@ -4,6 +4,7 @@ use hbb_common::{
4
     log,
4
     log,
5
     rendezvous_proto::*,
5
     rendezvous_proto::*,
6
     tokio::sync::{Mutex, RwLock},
6
     tokio::sync::{Mutex, RwLock},
7
+    bytes::Bytes,
7
     ResultType,
8
     ResultType,
8
 };
9
 };
9
 use serde_derive::{Deserialize, Serialize};
10
 use serde_derive::{Deserialize, Serialize};
@@ -25,13 +26,12 @@ pub(crate) struct PeerInfo {
25
     pub(crate) ip: String,
26
     pub(crate) ip: String,
26
 }
27
 }
27
 
28
 
28
-#[derive(Clone, Debug)]
29
 pub(crate) struct Peer {
29
 pub(crate) struct Peer {
30
     pub(crate) socket_addr: SocketAddr,
30
     pub(crate) socket_addr: SocketAddr,
31
     pub(crate) last_reg_time: Instant,
31
     pub(crate) last_reg_time: Instant,
32
     pub(crate) guid: Vec<u8>,
32
     pub(crate) guid: Vec<u8>,
33
-    pub(crate) uuid: Vec<u8>,
34
-    pub(crate) pk: Vec<u8>,
33
+    pub(crate) uuid: Bytes,
34
+    pub(crate) pk: Bytes,
35
     pub(crate) user: Option<Vec<u8>>,
35
     pub(crate) user: Option<Vec<u8>>,
36
     pub(crate) info: PeerInfo,
36
     pub(crate) info: PeerInfo,
37
     pub(crate) disabled: bool,
37
     pub(crate) disabled: bool,
@@ -44,8 +44,8 @@ impl Default for Peer {
44
             socket_addr: "0.0.0.0:0".parse().unwrap(),
44
             socket_addr: "0.0.0.0:0".parse().unwrap(),
45
             last_reg_time: get_expired_time(),
45
             last_reg_time: get_expired_time(),
46
             guid: Vec::new(),
46
             guid: Vec::new(),
47
-            uuid: Vec::new(),
48
-            pk: Vec::new(),
47
+            uuid: Bytes::new(),
48
+            pk: Bytes::new(),
49
             info: Default::default(),
49
             info: Default::default(),
50
             user: None,
50
             user: None,
51
             disabled: false,
51
             disabled: false,
@@ -93,8 +93,8 @@ impl PeerMap {
93
         id: String,
93
         id: String,
94
         peer: LockPeer,
94
         peer: LockPeer,
95
         addr: SocketAddr,
95
         addr: SocketAddr,
96
-        uuid: Vec<u8>,
97
-        pk: Vec<u8>,
96
+        uuid: Bytes,
97
+        pk: Bytes,
98
         ip: String,
98
         ip: String,
99
     ) -> register_pk_response::Result {
99
     ) -> register_pk_response::Result {
100
         log::info!("update_pk {} {:?} {:?} {:?}", id, addr, uuid, pk);
100
         log::info!("update_pk {} {:?} {:?} {:?}", id, addr, uuid, pk);
@@ -139,8 +139,8 @@ impl PeerMap {
139
             if let Ok(Some(v)) = self.db.get_peer(id).await {
139
             if let Ok(Some(v)) = self.db.get_peer(id).await {
140
                 let peer = Peer {
140
                 let peer = Peer {
141
                     guid: v.guid,
141
                     guid: v.guid,
142
-                    uuid: v.uuid,
143
-                    pk: v.pk,
142
+                    uuid: v.uuid.into(),
143
+                    pk: v.pk.into(),
144
                     user: v.user,
144
                     user: v.user,
145
                     info: serde_json::from_str::<PeerInfo>(&v.info).unwrap_or_default(),
145
                     info: serde_json::from_str::<PeerInfo>(&v.info).unwrap_or_default(),
146
                     disabled: v.status == Some(0),
146
                     disabled: v.status == Some(0),
@@ -177,9 +177,4 @@ impl PeerMap {
177
     pub(crate) async fn is_in_memory(&self, id: &str) -> bool {
177
     pub(crate) async fn is_in_memory(&self, id: &str) -> bool {
178
         self.map.read().await.contains_key(id)
178
         self.map.read().await.contains_key(id)
179
     }
179
     }
180
-
181
-    #[inline]
182
-    pub(crate) async fn remove(&self, id: &str) {
183
-        self.map.write().await.remove(id);
184
-    }
185
 }
180
 }

+ 1 - 1
src/relay_server.rs

@@ -420,7 +420,7 @@ async fn make_pair_(stream: impl StreamTrait, addr: SocketAddr, key: &str, limit
420
     let mut stream = stream;
420
     let mut stream = stream;
421
     if let Ok(Some(Ok(bytes))) = timeout(30_000, stream.recv()).await {
421
     if let Ok(Some(Ok(bytes))) = timeout(30_000, stream.recv()).await {
422
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
422
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
423
-            if let Some(rendezvous_message::Union::request_relay(rf)) = msg_in.union {
423
+            if let Some(rendezvous_message::Union::RequestRelay(rf)) = msg_in.union {
424
                 if !key.is_empty() && rf.licence_key != key {
424
                 if !key.is_empty() && rf.licence_key != key {
425
                     return;
425
                     return;
426
                 }
426
                 }

+ 50 - 37
src/rendezvous_server.rs

@@ -89,7 +89,12 @@ enum LoopFailure {
89
 
89
 
90
 impl RendezvousServer {
90
 impl RendezvousServer {
91
     #[tokio::main(flavor = "multi_thread")]
91
     #[tokio::main(flavor = "multi_thread")]
92
-    pub async fn start(port: i32, serial: i32, key: &str, rmem: usize) -> ResultType<()> {
92
+    pub async fn start(
93
+        port: i32,
94
+        serial: i32,
95
+        key: &str,
96
+        rmem: usize,
97
+    ) -> ResultType<()> {
93
         let (key, sk) = Self::get_server_sk(key);
98
         let (key, sk) = Self::get_server_sk(key);
94
         let addr = format!("0.0.0.0:{}", port);
99
         let addr = format!("0.0.0.0:{}", port);
95
         let addr2 = format!("0.0.0.0:{}", port - 1);
100
         let addr2 = format!("0.0.0.0:{}", port - 1);
@@ -138,7 +143,6 @@ impl RendezvousServer {
138
         log::info!("local-ip: {:?}", rs.inner.local_ip);
143
         log::info!("local-ip: {:?}", rs.inner.local_ip);
139
         std::env::set_var("PORT_FOR_API", port.to_string());
144
         std::env::set_var("PORT_FOR_API", port.to_string());
140
         rs.parse_relay_servers(&get_arg("relay-servers"));
145
         rs.parse_relay_servers(&get_arg("relay-servers"));
141
-        let pm = rs.pm.clone();
142
         let mut listener = new_listener(&addr, false).await?;
146
         let mut listener = new_listener(&addr, false).await?;
143
         let mut listener2 = new_listener(&addr2, false).await?;
147
         let mut listener2 = new_listener(&addr2, false).await?;
144
         let mut listener3 = new_listener(&addr3, false).await?;
148
         let mut listener3 = new_listener(&addr3, false).await?;
@@ -299,7 +303,7 @@ impl RendezvousServer {
299
     ) -> ResultType<()> {
303
     ) -> ResultType<()> {
300
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
304
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
301
             match msg_in.union {
305
             match msg_in.union {
302
-                Some(rendezvous_message::Union::register_peer(rp)) => {
306
+                Some(rendezvous_message::Union::RegisterPeer(rp)) => {
303
                     // B registered
307
                     // B registered
304
                     if rp.id.len() > 0 {
308
                     if rp.id.len() > 0 {
305
                         log::trace!("New peer registered: {:?} {:?}", &rp.id, &addr);
309
                         log::trace!("New peer registered: {:?} {:?}", &rp.id, &addr);
@@ -315,7 +319,7 @@ impl RendezvousServer {
315
                         }
319
                         }
316
                     }
320
                     }
317
                 }
321
                 }
318
-                Some(rendezvous_message::Union::register_pk(rk)) => {
322
+                Some(rendezvous_message::Union::RegisterPk(rk)) => {
319
                     if rk.uuid.is_empty() || rk.pk.is_empty() {
323
                     if rk.uuid.is_empty() || rk.pk.is_empty() {
320
                         return Ok(());
324
                         return Ok(());
321
                     }
325
                     }
@@ -402,7 +406,7 @@ impl RendezvousServer {
402
                     });
406
                     });
403
                     socket.send(&msg_out, addr).await?
407
                     socket.send(&msg_out, addr).await?
404
                 }
408
                 }
405
-                Some(rendezvous_message::Union::punch_hole_request(ph)) => {
409
+                Some(rendezvous_message::Union::PunchHoleRequest(ph)) => {
406
                     if self.pm.is_in_memory(&ph.id).await {
410
                     if self.pm.is_in_memory(&ph.id).await {
407
                         self.handle_udp_punch_hole_request(addr, ph, key).await?;
411
                         self.handle_udp_punch_hole_request(addr, ph, key).await?;
408
                     } else {
412
                     } else {
@@ -414,13 +418,13 @@ impl RendezvousServer {
414
                         });
418
                         });
415
                     }
419
                     }
416
                 }
420
                 }
417
-                Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
421
+                Some(rendezvous_message::Union::PunchHoleSent(phs)) => {
418
                     self.handle_hole_sent(phs, addr, Some(socket)).await?;
422
                     self.handle_hole_sent(phs, addr, Some(socket)).await?;
419
                 }
423
                 }
420
-                Some(rendezvous_message::Union::local_addr(la)) => {
424
+                Some(rendezvous_message::Union::LocalAddr(la)) => {
421
                     self.handle_local_addr(la, addr, Some(socket)).await?;
425
                     self.handle_local_addr(la, addr, Some(socket)).await?;
422
                 }
426
                 }
423
-                Some(rendezvous_message::Union::configure_update(mut cu)) => {
427
+                Some(rendezvous_message::Union::ConfigureUpdate(mut cu)) => {
424
                     if addr.ip() == ADDR_127 && cu.serial > self.inner.serial {
428
                     if addr.ip() == ADDR_127 && cu.serial > self.inner.serial {
425
                         let mut inner: Inner = (*self.inner).clone();
429
                         let mut inner: Inner = (*self.inner).clone();
426
                         inner.serial = cu.serial;
430
                         inner.serial = cu.serial;
@@ -441,7 +445,7 @@ impl RendezvousServer {
441
                         );
445
                         );
442
                     }
446
                     }
443
                 }
447
                 }
444
-                Some(rendezvous_message::Union::software_update(su)) => {
448
+                Some(rendezvous_message::Union::SoftwareUpdate(su)) => {
445
                     if !self.inner.version.is_empty() && su.url != self.inner.version {
449
                     if !self.inner.version.is_empty() && su.url != self.inner.version {
446
                         let mut msg_out = RendezvousMessage::new();
450
                         let mut msg_out = RendezvousMessage::new();
447
                         msg_out.set_software_update(SoftwareUpdate {
451
                         msg_out.set_software_update(SoftwareUpdate {
@@ -468,7 +472,7 @@ impl RendezvousServer {
468
     ) -> bool {
472
     ) -> bool {
469
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
473
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
470
             match msg_in.union {
474
             match msg_in.union {
471
-                Some(rendezvous_message::Union::punch_hole_request(ph)) => {
475
+                Some(rendezvous_message::Union::PunchHoleRequest(ph)) => {
472
                     // there maybe several attempt, so sink can be none
476
                     // there maybe several attempt, so sink can be none
473
                     if let Some(sink) = sink.take() {
477
                     if let Some(sink) = sink.take() {
474
                         self.tcp_punch.lock().await.insert(addr, sink);
478
                         self.tcp_punch.lock().await.insert(addr, sink);
@@ -476,24 +480,24 @@ impl RendezvousServer {
476
                     allow_err!(self.handle_tcp_punch_hole_request(addr, ph, &key, ws).await);
480
                     allow_err!(self.handle_tcp_punch_hole_request(addr, ph, &key, ws).await);
477
                     return true;
481
                     return true;
478
                 }
482
                 }
479
-                Some(rendezvous_message::Union::request_relay(mut rf)) => {
483
+                Some(rendezvous_message::Union::RequestRelay(mut rf)) => {
480
                     // there maybe several attempt, so sink can be none
484
                     // there maybe several attempt, so sink can be none
481
                     if let Some(sink) = sink.take() {
485
                     if let Some(sink) = sink.take() {
482
                         self.tcp_punch.lock().await.insert(addr, sink);
486
                         self.tcp_punch.lock().await.insert(addr, sink);
483
                     }
487
                     }
484
                     if let Some(peer) = self.pm.get_in_memory(&rf.id).await {
488
                     if let Some(peer) = self.pm.get_in_memory(&rf.id).await {
485
                         let mut msg_out = RendezvousMessage::new();
489
                         let mut msg_out = RendezvousMessage::new();
486
-                        rf.socket_addr = AddrMangle::encode(addr);
490
+                        rf.socket_addr = AddrMangle::encode(addr).into();
487
                         msg_out.set_request_relay(rf);
491
                         msg_out.set_request_relay(rf);
488
                         let peer_addr = peer.read().await.socket_addr;
492
                         let peer_addr = peer.read().await.socket_addr;
489
                         self.tx.send(Data::Msg(msg_out, peer_addr)).ok();
493
                         self.tx.send(Data::Msg(msg_out, peer_addr)).ok();
490
                     }
494
                     }
491
                     return true;
495
                     return true;
492
                 }
496
                 }
493
-                Some(rendezvous_message::Union::relay_response(mut rr)) => {
497
+                Some(rendezvous_message::Union::RelayResponse(mut rr)) => {
494
                     let addr_b = AddrMangle::decode(&rr.socket_addr);
498
                     let addr_b = AddrMangle::decode(&rr.socket_addr);
495
                     rr.socket_addr = Default::default();
499
                     rr.socket_addr = Default::default();
496
-                    let id = rr.get_id();
500
+                    let id = rr.id();
497
                     if !id.is_empty() {
501
                     if !id.is_empty() {
498
                         let pk = self.get_pk(&rr.version, id.to_owned()).await;
502
                         let pk = self.get_pk(&rr.version, id.to_owned()).await;
499
                         rr.set_pk(pk);
503
                         rr.set_pk(pk);
@@ -510,13 +514,13 @@ impl RendezvousServer {
510
                     msg_out.set_relay_response(rr);
514
                     msg_out.set_relay_response(rr);
511
                     allow_err!(self.send_to_tcp_sync(msg_out, addr_b).await);
515
                     allow_err!(self.send_to_tcp_sync(msg_out, addr_b).await);
512
                 }
516
                 }
513
-                Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
517
+                Some(rendezvous_message::Union::PunchHoleSent(phs)) => {
514
                     allow_err!(self.handle_hole_sent(phs, addr, None).await);
518
                     allow_err!(self.handle_hole_sent(phs, addr, None).await);
515
                 }
519
                 }
516
-                Some(rendezvous_message::Union::local_addr(la)) => {
520
+                Some(rendezvous_message::Union::LocalAddr(la)) => {
517
                     allow_err!(self.handle_local_addr(la, addr, None).await);
521
                     allow_err!(self.handle_local_addr(la, addr, None).await);
518
                 }
522
                 }
519
-                Some(rendezvous_message::Union::test_nat_request(tar)) => {
523
+                Some(rendezvous_message::Union::TestNatRequest(tar)) => {
520
                     let mut msg_out = RendezvousMessage::new();
524
                     let mut msg_out = RendezvousMessage::new();
521
                     let mut res = TestNatResponse {
525
                     let mut res = TestNatResponse {
522
                         port: addr.port() as _,
526
                         port: addr.port() as _,
@@ -531,7 +535,7 @@ impl RendezvousServer {
531
                     msg_out.set_test_nat_response(res);
535
                     msg_out.set_test_nat_response(res);
532
                     Self::send_to_sink(sink, msg_out).await;
536
                     Self::send_to_sink(sink, msg_out).await;
533
                 }
537
                 }
534
-                Some(rendezvous_message::Union::register_pk(_rk)) => {
538
+                Some(rendezvous_message::Union::RegisterPk(_)) => {
535
                     let res = register_pk_response::Result::NOT_SUPPORT;
539
                     let res = register_pk_response::Result::NOT_SUPPORT;
536
                     let mut msg_out = RendezvousMessage::new();
540
                     let mut msg_out = RendezvousMessage::new();
537
                     msg_out.set_register_pk_response(RegisterPkResponse {
541
                     msg_out.set_register_pk_response(RegisterPkResponse {
@@ -607,7 +611,7 @@ impl RendezvousServer {
607
         );
611
         );
608
         let mut msg_out = RendezvousMessage::new();
612
         let mut msg_out = RendezvousMessage::new();
609
         let mut p = PunchHoleResponse {
613
         let mut p = PunchHoleResponse {
610
-            socket_addr: AddrMangle::encode(addr),
614
+            socket_addr: AddrMangle::encode(addr).into(),
611
             pk: self.get_pk(&phs.version, phs.id).await,
615
             pk: self.get_pk(&phs.version, phs.id).await,
612
             relay_server: phs.relay_server.clone(),
616
             relay_server: phs.relay_server.clone(),
613
             ..Default::default()
617
             ..Default::default()
@@ -714,7 +718,7 @@ impl RendezvousServer {
714
                         _ => false,
718
                         _ => false,
715
                     },
719
                     },
716
                 };
720
                 };
717
-            let socket_addr = AddrMangle::encode(addr);
721
+            let socket_addr = AddrMangle::encode(addr).into();
718
             if same_intranet {
722
             if same_intranet {
719
                 log::debug!(
723
                 log::debug!(
720
                     "Fetch local addr {:?} {:?} request from {:?}",
724
                     "Fetch local addr {:?} {:?} request from {:?}",
@@ -858,7 +862,7 @@ impl RendezvousServer {
858
         self.relay_servers = self.relay_servers0.clone();
862
         self.relay_servers = self.relay_servers0.clone();
859
     }
863
     }
860
 
864
 
861
-    fn get_relay_server(&self, pa: IpAddr, pb: IpAddr) -> String {
865
+    fn get_relay_server(&self, _pa: IpAddr, _pb: IpAddr) -> String {
862
         if self.relay_servers.is_empty() {
866
         if self.relay_servers.is_empty() {
863
             return "".to_owned();
867
             return "".to_owned();
864
         } else if self.relay_servers.len() == 1 {
868
         } else if self.relay_servers.len() == 1 {
@@ -1029,7 +1033,7 @@ impl RendezvousServer {
1029
             let mut stream = stream;
1033
             let mut stream = stream;
1030
             if let Some(Ok(bytes)) = stream.next_timeout(30_000).await {
1034
             if let Some(Ok(bytes)) = stream.next_timeout(30_000).await {
1031
                 if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
1035
                 if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
1032
-                    if let Some(rendezvous_message::Union::test_nat_request(_)) = msg_in.union {
1036
+                    if let Some(rendezvous_message::Union::TestNatRequest(_)) = msg_in.union {
1033
                         let mut msg_out = RendezvousMessage::new();
1037
                         let mut msg_out = RendezvousMessage::new();
1034
                         msg_out.set_test_nat_response(TestNatResponse {
1038
                         msg_out.set_test_nat_response(TestNatResponse {
1035
                             port: addr.port() as _,
1039
                             port: addr.port() as _,
@@ -1042,12 +1046,21 @@ impl RendezvousServer {
1042
         });
1046
         });
1043
     }
1047
     }
1044
 
1048
 
1045
-    async fn handle_listener(&self, stream: TcpStream, addr: SocketAddr, key: &str, ws: bool) {
1049
+    async fn handle_listener(
1050
+        &self,
1051
+        stream: TcpStream,
1052
+        addr: SocketAddr,
1053
+        key: &str,
1054
+        ws: bool,
1055
+    ) {
1046
         log::debug!("Tcp connection from {:?}, ws: {}", addr, ws);
1056
         log::debug!("Tcp connection from {:?}, ws: {}", addr, ws);
1047
         let mut rs = self.clone();
1057
         let mut rs = self.clone();
1048
         let key = key.to_owned();
1058
         let key = key.to_owned();
1049
         tokio::spawn(async move {
1059
         tokio::spawn(async move {
1050
-            allow_err!(rs.handle_listener_inner(stream, addr, &key, ws).await);
1060
+            allow_err!(
1061
+                rs.handle_listener_inner(stream, addr, &key, ws)
1062
+                    .await
1063
+            );
1051
         });
1064
         });
1052
     }
1065
     }
1053
 
1066
 
@@ -1067,7 +1080,10 @@ impl RendezvousServer {
1067
             while let Ok(Some(Ok(msg))) = timeout(30_000, b.next()).await {
1080
             while let Ok(Some(Ok(msg))) = timeout(30_000, b.next()).await {
1068
                 match msg {
1081
                 match msg {
1069
                     tungstenite::Message::Binary(bytes) => {
1082
                     tungstenite::Message::Binary(bytes) => {
1070
-                        if !self.handle_tcp(&bytes, &mut sink, addr, key, ws).await {
1083
+                        if !self
1084
+                            .handle_tcp(&bytes, &mut sink, addr, key, ws)
1085
+                            .await
1086
+                        {
1071
                             break;
1087
                             break;
1072
                         }
1088
                         }
1073
                     }
1089
                     }
@@ -1078,7 +1094,10 @@ impl RendezvousServer {
1078
             let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
1094
             let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
1079
             sink = Some(Sink::TcpStream(a));
1095
             sink = Some(Sink::TcpStream(a));
1080
             while let Ok(Some(Ok(bytes))) = timeout(30_000, b.next()).await {
1096
             while let Ok(Some(Ok(bytes))) = timeout(30_000, b.next()).await {
1081
-                if !self.handle_tcp(&bytes, &mut sink, addr, key, ws).await {
1097
+                if !self
1098
+                    .handle_tcp(&bytes, &mut sink, addr, key, ws)
1099
+                    .await
1100
+                {
1082
                     break;
1101
                     break;
1083
                 }
1102
                 }
1084
             }
1103
             }
@@ -1091,13 +1110,13 @@ impl RendezvousServer {
1091
     }
1110
     }
1092
 
1111
 
1093
     #[inline]
1112
     #[inline]
1094
-    async fn get_pk(&mut self, version: &str, id: String) -> Vec<u8> {
1113
+    async fn get_pk(&mut self, version: &str, id: String) -> Bytes {
1095
         if version.is_empty() || self.inner.sk.is_none() {
1114
         if version.is_empty() || self.inner.sk.is_none() {
1096
-            Vec::new()
1115
+            Bytes::new()
1097
         } else {
1116
         } else {
1098
             match self.pm.get(&id).await {
1117
             match self.pm.get(&id).await {
1099
                 Some(peer) => {
1118
                 Some(peer) => {
1100
-                    let pk = peer.read().await.pk.clone();
1119
+                    let pk = peer.read().await.pk.clone().into();
1101
                     sign::sign(
1120
                     sign::sign(
1102
                         &hbb_common::message_proto::IdPk {
1121
                         &hbb_common::message_proto::IdPk {
1103
                             id,
1122
                             id,
@@ -1108,8 +1127,9 @@ impl RendezvousServer {
1108
                         .unwrap_or_default(),
1127
                         .unwrap_or_default(),
1109
                         &self.inner.sk.as_ref().unwrap(),
1128
                         &self.inner.sk.as_ref().unwrap(),
1110
                     )
1129
                     )
1130
+                    .into()
1111
                 }
1131
                 }
1112
-                _ => Vec::new(),
1132
+                _ => Bytes::new(),
1113
             }
1133
             }
1114
         }
1134
         }
1115
     }
1135
     }
@@ -1213,13 +1233,6 @@ async fn test_hbbs(addr: SocketAddr) -> ResultType<()> {
1213
     }
1233
     }
1214
 }
1234
 }
1215
 
1235
 
1216
-#[inline]
1217
-fn distance(a: &(i32, i32), b: &(i32, i32)) -> i32 {
1218
-    let dx = a.0 - b.0;
1219
-    let dy = a.1 - b.1;
1220
-    dx * dx + dy * dy
1221
-}
1222
-
1223
 #[inline]
1236
 #[inline]
1224
 async fn send_rk_res(
1237
 async fn send_rk_res(
1225
     socket: &mut FramedSocket,
1238
     socket: &mut FramedSocket,