]> code.octet-stream.net Git - m17rt/blobdiff - m17app/src/reflector.rs
Make netclient work against mrefd
[m17rt] / m17app / src / reflector.rs
index 9b383f72f5cea62a8a534c42a4baaf823b752f00..b5825bb584922ad7b552e2f2bcfe431fbe959133 100644 (file)
@@ -2,9 +2,9 @@ use std::{
     io::{self, Read, Write},
     net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs, UdpSocket},
     sync::{
     io::{self, Read, Write},
     net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs, UdpSocket},
     sync::{
+        Arc, Mutex,
         atomic::{AtomicBool, Ordering},
         mpsc::{self, Receiver, Sender},
         atomic::{AtomicBool, Ordering},
         mpsc::{self, Receiver, Sender},
-        Arc, Mutex,
     },
     thread,
     time::Duration,
     },
     thread,
     time::Duration,
@@ -79,8 +79,9 @@ impl Write for ReflectorClientTnc {
     fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
         let mut kiss = self.kiss_buffer.lock().unwrap();
         let rem = kiss.buf_remaining();
     fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
         let mut kiss = self.kiss_buffer.lock().unwrap();
         let rem = kiss.buf_remaining();
-        let sz = buf.len().max(rem.len());
+        let sz = buf.len().min(rem.len());
         rem[0..sz].copy_from_slice(&buf[0..sz]);
         rem[0..sz].copy_from_slice(&buf[0..sz]);
+        kiss.did_write(sz);
         if let Some(frame) = kiss.next_frame() {
             if Ok(KissCommand::DataFrame) == frame.command() && frame.port() == Ok(PORT_STREAM) {
                 let mut payload = [0u8; 30];
         if let Some(frame) = kiss.next_frame() {
             if Ok(KissCommand::DataFrame) == frame.command() && frame.port() == Ok(PORT_STREAM) {
                 let mut payload = [0u8; 30];
@@ -196,6 +197,8 @@ fn spawn_runner(
                     config.clone(),
                     status.clone(),
                 );
                     config.clone(),
                     status.clone(),
                 );
+                // Cool off a bit if connect rejected, etc.
+                thread::sleep(Duration::from_secs(10));
             }
         }
         status.lock().unwrap().status_changed(TncStatus::Closed);
             }
         }
         status.lock().unwrap().status_changed(TncStatus::Closed);
@@ -217,7 +220,7 @@ fn run_single_conn(
     };
 
     let mut connect = Connect::new();
     };
 
     let mut connect = Connect::new();
-    connect.set_address(config.local_callsign.address().to_owned());
+    connect.set_address(config.local_callsign.address());
     connect.set_module(config.module);
     let _ = socket.send_to(connect.as_bytes(), dest);
     let mut converter = VoiceToRf::new();
     connect.set_module(config.module);
     let _ = socket.send_to(connect.as_bytes(), dest);
     let mut converter = VoiceToRf::new();
@@ -263,12 +266,7 @@ fn run_single_conn(
                 }
                 ServerMessage::Ping(_ping) => {
                     let mut pong = Pong::new();
                 }
                 ServerMessage::Ping(_ping) => {
                     let mut pong = Pong::new();
-                    pong.set_address(
-                        M17Address::from_callsign("VK7XT")
-                            .unwrap()
-                            .address()
-                            .clone(),
-                    );
+                    pong.set_address(config.local_callsign.address());
                     if socket.send_to(pong.as_bytes(), dest).is_err() {
                         break;
                     }
                     if socket.send_to(pong.as_bytes(), dest).is_err() {
                         break;
                     }