rustdesk лет назад: 4
Родитель
Сommit
a10bb34f6e
5 измененных файлов с 36 добавлено и 31 удалено
  1. 1 1
      Cargo.lock
  2. 1 1
      Cargo.toml
  3. 5 5
      mod.rs
  4. 10 7
      src/relay_server.rs
  5. 19 17
      src/rendezvous_server.rs

+ 1 - 1
Cargo.lock

@@ -528,7 +528,7 @@ dependencies = [
528
 
528
 
529
 [[package]]
529
 [[package]]
530
 name = "hbbs"
530
 name = "hbbs"
531
-version = "1.0.0"
531
+version = "1.1.3"
532
 dependencies = [
532
 dependencies = [
533
  "cc",
533
  "cc",
534
  "clap",
534
  "clap",

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
1
 [package]
1
 [package]
2
 name = "hbbs"
2
 name = "hbbs"
3
-version = "1.0.0"
3
+version = "1.1.3"
4
 authors = ["open-trade <info@opentradesolutions.com>"]
4
 authors = ["open-trade <info@opentradesolutions.com>"]
5
 edition = "2018"
5
 edition = "2018"
6
 build= "build.rs"
6
 build= "build.rs"

+ 5 - 5
mod.rs

@@ -8,12 +8,12 @@ lazy_static::lazy_static! {
8
     static ref STOP: Arc<Mutex<bool>> = Arc::new(Mutex::new(true));
8
     static ref STOP: Arc<Mutex<bool>> = Arc::new(Mutex::new(true));
9
 }
9
 }
10
 
10
 
11
-pub fn bootstrap(license: &str, host: &str) {
11
+pub fn bootstrap(key: &str, host: &str) {
12
     let port = rendezvous_server::DEFAULT_PORT;
12
     let port = rendezvous_server::DEFAULT_PORT;
13
     let addr = format!("0.0.0.0:{}", port);
13
     let addr = format!("0.0.0.0:{}", port);
14
     let addr2 = format!("0.0.0.0:{}", port.parse::<i32>().unwrap_or(0) - 1);
14
     let addr2 = format!("0.0.0.0:{}", port.parse::<i32>().unwrap_or(0) - 1);
15
     let relay_servers: Vec<String> = vec![format!("{}:{}", host, relay_server::DEFAULT_PORT)];
15
     let relay_servers: Vec<String> = vec![format!("{}:{}", host, relay_server::DEFAULT_PORT)];
16
-    let tmp_license = license.to_owned();
16
+    let tmp_key = key.to_owned();
17
     std::thread::spawn(move || {
17
     std::thread::spawn(move || {
18
         allow_err!(rendezvous_server::RendezvousServer::start(
18
         allow_err!(rendezvous_server::RendezvousServer::start(
19
             &addr,
19
             &addr,
@@ -22,15 +22,15 @@ pub fn bootstrap(license: &str, host: &str) {
22
             0,
22
             0,
23
             Default::default(),
23
             Default::default(),
24
             Default::default(),
24
             Default::default(),
25
-            &tmp_license,
25
+            &tmp_key,
26
             STOP.clone(),
26
             STOP.clone(),
27
         ));
27
         ));
28
     });
28
     });
29
-    let tmp_license = license.to_owned();
29
+    let tmp_key = key.to_owned();
30
     std::thread::spawn(move || {
30
     std::thread::spawn(move || {
31
         allow_err!(relay_server::start(
31
         allow_err!(relay_server::start(
32
             relay_server::DEFAULT_PORT,
32
             relay_server::DEFAULT_PORT,
33
-            &tmp_license,
33
+            &tmp_key,
34
             STOP.clone()
34
             STOP.clone()
35
         ));
35
         ));
36
     });
36
     });

+ 10 - 7
src/relay_server.rs

@@ -24,7 +24,10 @@ lazy_static::lazy_static! {
24
 pub const DEFAULT_PORT: &'static str = "21117";
24
 pub const DEFAULT_PORT: &'static str = "21117";
25
 
25
 
26
 #[tokio::main(basic_scheduler)]
26
 #[tokio::main(basic_scheduler)]
27
-pub async fn start(port: &str, license: &str, stop: Arc<Mutex<bool>>) -> ResultType<()> {
27
+pub async fn start(port: &str, key: &str, stop: Arc<Mutex<bool>>) -> ResultType<()> {
28
+    if !key.is_empty() {
29
+        log::info!("Key: {}", key);
30
+    }
28
     let addr = format!("0.0.0.0:{}", port);
31
     let addr = format!("0.0.0.0:{}", port);
29
     log::info!("Listening on tcp {}", addr);
32
     log::info!("Listening on tcp {}", addr);
30
     let mut listener = new_listener(addr, false).await?;
33
     let mut listener = new_listener(addr, false).await?;
@@ -34,18 +37,18 @@ pub async fn start(port: &str, license: &str, stop: Arc<Mutex<bool>>) -> ResultT
34
             continue;
37
             continue;
35
         }
38
         }
36
         log::info!("Start");
39
         log::info!("Start");
37
-        io_loop(&mut listener, license, stop.clone()).await;
40
+        io_loop(&mut listener, key, stop.clone()).await;
38
     }
41
     }
39
 }
42
 }
40
 
43
 
41
-async fn io_loop(listener: &mut TcpListener, license: &str, stop: Arc<Mutex<bool>>) {
44
+async fn io_loop(listener: &mut TcpListener, key: &str, stop: Arc<Mutex<bool>>) {
42
     let mut timer = interval(Duration::from_millis(100));
45
     let mut timer = interval(Duration::from_millis(100));
43
     loop {
46
     loop {
44
         tokio::select! {
47
         tokio::select! {
45
             Ok((stream, addr)) = listener.accept() => {
48
             Ok((stream, addr)) = listener.accept() => {
46
-                let license = license.to_owned();
49
+                let key = key.to_owned();
47
                 tokio::spawn(async move {
50
                 tokio::spawn(async move {
48
-                    make_pair(FramedStream::from(stream), addr, &license).await.ok();
51
+                    make_pair(FramedStream::from(stream), addr, &key).await.ok();
49
                 });
52
                 });
50
             }
53
             }
51
             _ = timer.tick() => {
54
             _ = timer.tick() => {
@@ -58,12 +61,12 @@ async fn io_loop(listener: &mut TcpListener, license: &str, stop: Arc<Mutex<bool
58
     }
61
     }
59
 }
62
 }
60
 
63
 
61
-async fn make_pair(stream: FramedStream, addr: SocketAddr, license: &str) -> ResultType<()> {
64
+async fn make_pair(stream: FramedStream, addr: SocketAddr, key: &str) -> ResultType<()> {
62
     let mut stream = stream;
65
     let mut stream = stream;
63
     if let Some(Ok(bytes)) = stream.next_timeout(30_000).await {
66
     if let Some(Ok(bytes)) = stream.next_timeout(30_000).await {
64
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
67
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
65
             if let Some(rendezvous_message::Union::request_relay(rf)) = msg_in.union {
68
             if let Some(rendezvous_message::Union::request_relay(rf)) = msg_in.union {
66
-                if !license.is_empty() && rf.licence_key != license {
69
+                if !key.is_empty() && rf.licence_key != key {
67
                     return Ok(());
70
                     return Ok(());
68
                 }
71
                 }
69
                 if !rf.uuid.is_empty() {
72
                 if !rf.uuid.is_empty() {

+ 19 - 17
src/rendezvous_server.rs

@@ -162,9 +162,12 @@ impl RendezvousServer {
162
         serial: i32,
162
         serial: i32,
163
         rendezvous_servers: Vec<String>,
163
         rendezvous_servers: Vec<String>,
164
         software_url: String,
164
         software_url: String,
165
-        license: &str,
165
+        key: &str,
166
         stop: Arc<Mutex<bool>>,
166
         stop: Arc<Mutex<bool>>,
167
     ) -> ResultType<()> {
167
     ) -> ResultType<()> {
168
+        if !key.is_empty() {
169
+            log::info!("Key: {}", key);
170
+        }
168
         log::info!("Listening on tcp/udp {}", addr);
171
         log::info!("Listening on tcp/udp {}", addr);
169
         log::info!("Listening on tcp {}, extra port for NAT test", addr2);
172
         log::info!("Listening on tcp {}, extra port for NAT test", addr2);
170
         log::info!("relay-servers={:?}", relay_servers);
173
         log::info!("relay-servers={:?}", relay_servers);
@@ -197,7 +200,7 @@ impl RendezvousServer {
197
                 &mut listener,
200
                 &mut listener,
198
                 &mut listener2,
201
                 &mut listener2,
199
                 &mut socket,
202
                 &mut socket,
200
-                license,
203
+                key,
201
                 stop.clone(),
204
                 stop.clone(),
202
             )
205
             )
203
             .await;
206
             .await;
@@ -210,7 +213,7 @@ impl RendezvousServer {
210
         listener: &mut TcpListener,
213
         listener: &mut TcpListener,
211
         listener2: &mut TcpListener,
214
         listener2: &mut TcpListener,
212
         socket: &mut FramedSocket,
215
         socket: &mut FramedSocket,
213
-        license: &str,
216
+        key: &str,
214
         stop: Arc<Mutex<bool>>,
217
         stop: Arc<Mutex<bool>>,
215
     ) {
218
     ) {
216
         let mut timer = interval(Duration::from_millis(100));
219
         let mut timer = interval(Duration::from_millis(100));
@@ -226,7 +229,7 @@ impl RendezvousServer {
226
                     allow_err!(socket.send(&msg, addr).await);
229
                     allow_err!(socket.send(&msg, addr).await);
227
                 }
230
                 }
228
                 Some(Ok((bytes, addr))) = socket.next() => {
231
                 Some(Ok((bytes, addr))) = socket.next() => {
229
-                    allow_err!(self.handle_msg(&bytes, addr, socket, license).await);
232
+                    allow_err!(self.handle_msg(&bytes, addr, socket, key).await);
230
                 }
233
                 }
231
                 Ok((stream, addr)) = listener2.accept() => {
234
                 Ok((stream, addr)) = listener2.accept() => {
232
                     let stream = FramedStream::from(stream);
235
                     let stream = FramedStream::from(stream);
@@ -251,7 +254,7 @@ impl RendezvousServer {
251
                     let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
254
                     let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
252
                     let tcp_punch = self.tcp_punch.clone();
255
                     let tcp_punch = self.tcp_punch.clone();
253
                     let mut rs = self.clone();
256
                     let mut rs = self.clone();
254
-                    let license = license.to_owned();
257
+                    let key = key.to_owned();
255
                     tokio::spawn(async move {
258
                     tokio::spawn(async move {
256
                         let mut sender = Some(a);
259
                         let mut sender = Some(a);
257
                         while let Ok(Some(Ok(bytes))) = timeout(30_000, b.next()).await {
260
                         while let Ok(Some(Ok(bytes))) = timeout(30_000, b.next()).await {
@@ -262,7 +265,7 @@ impl RendezvousServer {
262
                                         if let Some(sender) = sender.take() {
265
                                         if let Some(sender) = sender.take() {
263
                                             tcp_punch.lock().unwrap().insert(addr, sender);
266
                                             tcp_punch.lock().unwrap().insert(addr, sender);
264
                                         }
267
                                         }
265
-                                        allow_err!(rs.handle_tcp_punch_hole_request(addr, ph, &license).await);
268
+                                        allow_err!(rs.handle_tcp_punch_hole_request(addr, ph, &key).await);
266
                                     }
269
                                     }
267
                                     Some(rendezvous_message::Union::request_relay(mut rf)) => {
270
                                     Some(rendezvous_message::Union::request_relay(mut rf)) => {
268
                                         // there maybe several attempt, so sender can be none
271
                                         // there maybe several attempt, so sender can be none
@@ -342,7 +345,7 @@ impl RendezvousServer {
342
         bytes: &BytesMut,
345
         bytes: &BytesMut,
343
         addr: SocketAddr,
346
         addr: SocketAddr,
344
         socket: &mut FramedSocket,
347
         socket: &mut FramedSocket,
345
-        license: &str,
348
+        key: &str,
346
     ) -> ResultType<()> {
349
     ) -> ResultType<()> {
347
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
350
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
348
             match msg_in.union {
351
             match msg_in.union {
@@ -392,14 +395,13 @@ impl RendezvousServer {
392
                 }
395
                 }
393
                 Some(rendezvous_message::Union::punch_hole_request(ph)) => {
396
                 Some(rendezvous_message::Union::punch_hole_request(ph)) => {
394
                     if self.pm.is_in_memory(&ph.id) {
397
                     if self.pm.is_in_memory(&ph.id) {
395
-                        self.handle_udp_punch_hole_request(addr, ph, license)
396
-                            .await?;
398
+                        self.handle_udp_punch_hole_request(addr, ph, key).await?;
397
                     } else {
399
                     } else {
398
                         // not in memory, fetch from db with spawn in case blocking me
400
                         // not in memory, fetch from db with spawn in case blocking me
399
                         let mut me = self.clone();
401
                         let mut me = self.clone();
400
-                        let license = license.to_owned();
402
+                        let key = key.to_owned();
401
                         tokio::spawn(async move {
403
                         tokio::spawn(async move {
402
-                            allow_err!(me.handle_udp_punch_hole_request(addr, ph, &license).await);
404
+                            allow_err!(me.handle_udp_punch_hole_request(addr, ph, &key).await);
403
                         });
405
                         });
404
                     }
406
                     }
405
                 }
407
                 }
@@ -572,9 +574,9 @@ impl RendezvousServer {
572
         &mut self,
574
         &mut self,
573
         addr: SocketAddr,
575
         addr: SocketAddr,
574
         ph: PunchHoleRequest,
576
         ph: PunchHoleRequest,
575
-        license: &str,
577
+        key: &str,
576
     ) -> ResultType<(RendezvousMessage, Option<SocketAddr>)> {
578
     ) -> ResultType<(RendezvousMessage, Option<SocketAddr>)> {
577
-        if !license.is_empty() && ph.licence_key != license {
579
+        if !key.is_empty() && ph.licence_key != key {
578
             let mut msg_out = RendezvousMessage::new();
580
             let mut msg_out = RendezvousMessage::new();
579
             msg_out.set_punch_hole_response(PunchHoleResponse {
581
             msg_out.set_punch_hole_response(PunchHoleResponse {
580
                 failure: punch_hole_response::Failure::LICENCE_MISMATCH.into(),
582
                 failure: punch_hole_response::Failure::LICENCE_MISMATCH.into(),
@@ -686,9 +688,9 @@ impl RendezvousServer {
686
         &mut self,
688
         &mut self,
687
         addr: SocketAddr,
689
         addr: SocketAddr,
688
         ph: PunchHoleRequest,
690
         ph: PunchHoleRequest,
689
-        license: &str,
691
+        key: &str,
690
     ) -> ResultType<()> {
692
     ) -> ResultType<()> {
691
-        let (msg, to_addr) = self.handle_punch_hole_request(addr, ph, license).await?;
693
+        let (msg, to_addr) = self.handle_punch_hole_request(addr, ph, key).await?;
692
         if let Some(addr) = to_addr {
694
         if let Some(addr) = to_addr {
693
             self.tx.send((msg, addr))?;
695
             self.tx.send((msg, addr))?;
694
         } else {
696
         } else {
@@ -702,9 +704,9 @@ impl RendezvousServer {
702
         &mut self,
704
         &mut self,
703
         addr: SocketAddr,
705
         addr: SocketAddr,
704
         ph: PunchHoleRequest,
706
         ph: PunchHoleRequest,
705
-        license: &str,
707
+        key: &str,
706
     ) -> ResultType<()> {
708
     ) -> ResultType<()> {
707
-        let (msg, to_addr) = self.handle_punch_hole_request(addr, ph, license).await?;
709
+        let (msg, to_addr) = self.handle_punch_hole_request(addr, ph, key).await?;
708
         self.tx.send((
710
         self.tx.send((
709
             msg,
711
             msg,
710
             match to_addr {
712
             match to_addr {