|
|
@@ -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 {
|