Browse Source

refactor and add failure and register response

open-trade 5 years ago
parent
commit
a21a47a2a6
3 changed files with 81 additions and 17 deletions
  1. 55 0
      Cargo.lock
  2. 1 1
      libs/hbb_common
  3. 25 16
      src/rendezvous_server.rs

+ 55 - 0
Cargo.lock

@@ -33,6 +33,14 @@ name = "bytes"
33 33
 version = "0.5.4"
34 34
 source = "registry+https://github.com/rust-lang/crates.io-index"
35 35
 
36
+[[package]]
37
+name = "cc"
38
+version = "1.0.50"
39
+source = "registry+https://github.com/rust-lang/crates.io-index"
40
+dependencies = [
41
+ "jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
42
+]
43
+
36 44
 [[package]]
37 45
 name = "cfg-if"
38 46
 version = "0.1.10"
@@ -151,6 +159,11 @@ dependencies = [
151 159
  "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
152 160
 ]
153 161
 
162
+[[package]]
163
+name = "glob"
164
+version = "0.3.0"
165
+source = "registry+https://github.com/rust-lang/crates.io-index"
166
+
154 167
 [[package]]
155 168
 name = "hbb_common"
156 169
 version = "0.1.0"
@@ -164,6 +177,7 @@ dependencies = [
164 177
  "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
165 178
  "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
166 179
  "tokio-util 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
180
+ "zstd 0.5.1+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
167 181
 ]
168 182
 
169 183
 [[package]]
@@ -197,6 +211,14 @@ dependencies = [
197 211
  "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
198 212
 ]
199 213
 
214
+[[package]]
215
+name = "jobserver"
216
+version = "0.1.21"
217
+source = "registry+https://github.com/rust-lang/crates.io-index"
218
+dependencies = [
219
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
220
+]
221
+
200 222
 [[package]]
201 223
 name = "kernel32-sys"
202 224
 version = "0.2.2"
@@ -545,12 +567,40 @@ dependencies = [
545 567
  "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
546 568
 ]
547 569
 
570
+[[package]]
571
+name = "zstd"
572
+version = "0.5.1+zstd.1.4.4"
573
+source = "registry+https://github.com/rust-lang/crates.io-index"
574
+dependencies = [
575
+ "zstd-safe 2.0.3+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
576
+]
577
+
578
+[[package]]
579
+name = "zstd-safe"
580
+version = "2.0.3+zstd.1.4.4"
581
+source = "registry+https://github.com/rust-lang/crates.io-index"
582
+dependencies = [
583
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
584
+ "zstd-sys 1.4.15+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
585
+]
586
+
587
+[[package]]
588
+name = "zstd-sys"
589
+version = "1.4.15+zstd.1.4.4"
590
+source = "registry+https://github.com/rust-lang/crates.io-index"
591
+dependencies = [
592
+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
593
+ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
594
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
595
+]
596
+
548 597
 [metadata]
549 598
 "checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
550 599
 "checksum arc-swap 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b8a9123b8027467bce0099fe556c628a53c8d83df0507084c31e9ba2e39aff"
551 600
 "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
552 601
 "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
553 602
 "checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
603
+"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
554 604
 "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
555 605
 "checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
556 606
 "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
@@ -565,9 +615,11 @@ dependencies = [
565 615
 "checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6"
566 616
 "checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27"
567 617
 "checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5"
618
+"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
568 619
 "checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
569 620
 "checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
570 621
 "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
622
+"checksum jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
571 623
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
572 624
 "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
573 625
 "checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018"
@@ -610,3 +662,6 @@ dependencies = [
610 662
 "checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80"
611 663
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
612 664
 "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
665
+"checksum zstd 0.5.1+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c5d978b793ae64375b80baf652919b148f6a496ac8802922d9999f5a553194f"
666
+"checksum zstd-safe 2.0.3+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bee25eac9753cfedd48133fa1736cbd23b774e253d89badbeac7d12b23848d3f"
667
+"checksum zstd-sys 1.4.15+zstd.1.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "89719b034dc22d240d5b407fb0a3fe6d29952c181cff9a9f95c0bd40b4f8f7d8"

+ 1 - 1
libs/hbb_common

@@ -1 +1 @@
1
-Subproject commit 4ecfa0eaf40080ec2e7e75abfab33791a625deb5
1
+Subproject commit 9a2d8c3925eb69c76aba9f798fdc84a40aa68e86

+ 25 - 16
src/rendezvous_server.rs

@@ -45,10 +45,12 @@ impl RendezvousServer {
45 45
             match msg_in.union {
46 46
                 Some(RendezvousMessage_oneof_union::register_peer(rp)) => {
47 47
                     // B registered
48
-                    if rp.hbb_addr.len() > 0 {
49
-                        log::debug!("New peer registered: {:?} {:?}", &rp.hbb_addr, &addr);
50
-                        self.peer_map
51
-                            .insert(rp.hbb_addr, Peer { socket_addr: addr });
48
+                    if rp.id.len() > 0 {
49
+                        log::debug!("New peer registered: {:?} {:?}", &rp.id, &addr);
50
+                        self.peer_map.insert(rp.id, Peer { socket_addr: addr });
51
+                        let mut msg_out = RendezvousMessage::new();
52
+                        msg_out.set_register_peer_response(RegisterPeerResponse::default());
53
+                        socket.send(&msg_out, addr).await?
52 54
                     }
53 55
                 }
54 56
                 Some(RendezvousMessage_oneof_union::punch_hole_request(ph)) => {
@@ -57,7 +59,7 @@ impl RendezvousServer {
57 59
                     // fetch local addrs if in same intranet.
58 60
                     // because punch hole won't work if in the same intranet,
59 61
                     // all routers will drop such self-connections.
60
-                    if let Some(peer) = self.peer_map.get(&ph.hbb_addr) {
62
+                    if let Some(peer) = self.peer_map.get(&ph.id) {
61 63
                         let mut msg_out = RendezvousMessage::new();
62 64
                         let same_intranet = match peer.socket_addr {
63 65
                             SocketAddr::V4(a) => match addr {
@@ -72,19 +74,19 @@ impl RendezvousServer {
72 74
                         let socket_addr = AddrMangle::encode(&addr);
73 75
                         if same_intranet {
74 76
                             log::debug!(
75
-                                "Fetch local addrs {:?} {:?} request from {:?}",
76
-                                &ph.hbb_addr,
77
+                                "Fetch local addr {:?} {:?} request from {:?}",
78
+                                &ph.id,
77 79
                                 &peer.socket_addr,
78 80
                                 &addr
79 81
                             );
80
-                            msg_out.set_fetch_local_addrs(FetchLocalAddrs {
82
+                            msg_out.set_fetch_local_addr(FetchLocalAddr {
81 83
                                 socket_addr,
82 84
                                 ..Default::default()
83 85
                             });
84 86
                         } else {
85 87
                             log::debug!(
86 88
                                 "Punch hole {:?} {:?} request from {:?}",
87
-                                &ph.hbb_addr,
89
+                                &ph.id,
88 90
                                 &peer.socket_addr,
89 91
                                 &addr
90 92
                             );
@@ -94,6 +96,13 @@ impl RendezvousServer {
94 96
                             });
95 97
                         }
96 98
                         socket.send(&msg_out, peer.socket_addr).await?;
99
+                    } else {
100
+                        let mut msg_out = RendezvousMessage::new();
101
+                        msg_out.set_punch_hole_response(PunchHoleResponse {
102
+                            failure: PunchHoleResponse_Failure::ID_NOT_EXIST,
103
+                            ..Default::default()
104
+                        });
105
+                        socket.send(&msg_out, addr).await?
97 106
                     }
98 107
                 }
99 108
                 Some(RendezvousMessage_oneof_union::punch_hole_sent(phs)) => {
@@ -107,13 +116,13 @@ impl RendezvousServer {
107 116
                     });
108 117
                     socket.send(&msg_out, addr_a).await?;
109 118
                 }
110
-                Some(RendezvousMessage_oneof_union::local_addrs(la)) => {
119
+                Some(RendezvousMessage_oneof_union::local_addr(la)) => {
111 120
                     // forward local addrs of B to A
112 121
                     let addr_a = AddrMangle::decode(&la.socket_addr);
113 122
                     log::debug!("Local addrs response to {:?} from {:?}", &addr_a, &addr);
114 123
                     let mut msg_out = RendezvousMessage::new();
115
-                    msg_out.set_local_addrs_response(LocalAddrsResponse {
116
-                        socket_addrs: la.local_addrs,
124
+                    msg_out.set_punch_hole_response(PunchHoleResponse {
125
+                        socket_addr: la.local_addr,
117 126
                         ..Default::default()
118 127
                     });
119 128
                     socket.send(&msg_out, addr_a).await?;
@@ -128,7 +137,7 @@ impl RendezvousServer {
128 137
 #[cfg(test)]
129 138
 mod tests {
130 139
     use super::*;
131
-    use hbb_common::{new_error, tokio};
140
+    use hbb_common::{tokio};
132 141
 
133 142
     #[allow(unused_must_use)]
134 143
     #[tokio::main]
@@ -152,7 +161,7 @@ mod tests {
152 161
         let local_addr_b = socket_b.get_ref().local_addr().unwrap();
153 162
         let mut msg_out = RendezvousMessage::new();
154 163
         msg_out.set_register_peer(RegisterPeer {
155
-            hbb_addr: "123".to_string(),
164
+            id: "123".to_string(),
156 165
             ..Default::default()
157 166
         });
158 167
         socket_b.send(&msg_out, addr_server).await?;
@@ -161,7 +170,7 @@ mod tests {
161 170
         let mut socket_a = FramedSocket::new("127.0.0.1:0").await?;
162 171
         let local_addr_a = socket_a.get_ref().local_addr().unwrap();
163 172
         msg_out.set_punch_hole_request(PunchHoleRequest {
164
-            hbb_addr: "123".to_string(),
173
+            id: "123".to_string(),
165 174
             ..Default::default()
166 175
         });
167 176
         socket_a.send(&msg_out, addr_server).await?;
@@ -204,7 +213,7 @@ mod tests {
204 213
             panic!("failed");
205 214
         }
206 215
 
207
-        Err(new_error("done"))
216
+        Err("done".into())
208 217
     }
209 218
 
210 219
     #[test]