rustdesk 4 years ago
parent
commit
a10bb34f6e
5 changed files with 36 additions and 31 deletions
  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 529
 [[package]]
530 530
 name = "hbbs"
531
-version = "1.0.0"
531
+version = "1.1.3"
532 532
 dependencies = [
533 533
  "cc",
534 534
  "clap",

+ 1 - 1
Cargo.toml

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

+ 5 - 5
mod.rs

@@ -8,12 +8,12 @@ lazy_static::lazy_static! {
8 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 12
     let port = rendezvous_server::DEFAULT_PORT;
13 13
     let addr = format!("0.0.0.0:{}", port);
14 14
     let addr2 = format!("0.0.0.0:{}", port.parse::<i32>().unwrap_or(0) - 1);
15 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 17
     std::thread::spawn(move || {
18 18
         allow_err!(rendezvous_server::RendezvousServer::start(
19 19
             &addr,
@@ -22,15 +22,15 @@ pub fn bootstrap(license: &str, host: &str) {
22 22
             0,
23 23
             Default::default(),
24 24
             Default::default(),
25
-            &tmp_license,
25
+            &tmp_key,
26 26
             STOP.clone(),
27 27
         ));
28 28
     });
29
-    let tmp_license = license.to_owned();
29
+    let tmp_key = key.to_owned();
30 30
     std::thread::spawn(move || {
31 31
         allow_err!(relay_server::start(
32 32
             relay_server::DEFAULT_PORT,
33
-            &tmp_license,
33
+            &tmp_key,
34 34
             STOP.clone()
35 35
         ));
36 36
     });

+ 10 - 7
src/relay_server.rs

@@ -24,7 +24,10 @@ lazy_static::lazy_static! {
24 24
 pub const DEFAULT_PORT: &'static str = "21117";
25 25
 
26 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 31
     let addr = format!("0.0.0.0:{}", port);
29 32
     log::info!("Listening on tcp {}", addr);
30 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 37
             continue;
35 38
         }
36 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 45
     let mut timer = interval(Duration::from_millis(100));
43 46
     loop {
44 47
         tokio::select! {
45 48
             Ok((stream, addr)) = listener.accept() => {
46
-                let license = license.to_owned();
49
+                let key = key.to_owned();
47 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 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 65
     let mut stream = stream;
63 66
     if let Some(Ok(bytes)) = stream.next_timeout(30_000).await {
64 67
         if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) {
65 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 70
                     return Ok(());
68 71
                 }
69 72
                 if !rf.uuid.is_empty() {

+ 19 - 17
src/rendezvous_server.rs

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