From 3c20baf05cdb73a94afa8ed0a7f3cc3f7014912a Mon Sep 17 00:00:00 2001
From: Stephen D <webmaster@scd31.com>
Date: Sat, 9 Dec 2023 12:02:58 -0400
Subject: [PATCH] update to latest ham-cats

---
 Cargo.lock  | 76 ++++++++++++++++++++++++++---------------------------
 src/gate.rs |  5 ++--
 src/util.rs | 41 ++++++++++++++++-------------
 3 files changed, 64 insertions(+), 58 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 16cf146..2a585e8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -43,9 +43,9 @@ dependencies = [
 
 [[package]]
 name = "anstream"
-version = "0.6.4"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
 dependencies = [
  "anstyle",
  "anstyle-parse",
@@ -63,30 +63,30 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
 
 [[package]]
 name = "anstyle-parse"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
 dependencies = [
  "utf8parse",
 ]
 
 [[package]]
 name = "anstyle-query"
-version = "1.0.0"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
 dependencies = [
  "anstyle",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -319,9 +319,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.4.10"
+version = "4.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
+checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -329,9 +329,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.4.9"
+version = "4.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
+checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
 dependencies = [
  "anstream",
  "anstyle",
@@ -448,9 +448,9 @@ dependencies = [
 
 [[package]]
 name = "deranged"
-version = "0.3.9"
+version = "0.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc"
 dependencies = [
  "powerfmt",
  "serde",
@@ -630,8 +630,8 @@ dependencies = [
 
 [[package]]
 name = "ham-cats"
-version = "0.1.0"
-source = "git+https://gitlab.scd31.com/cats/ham-cats#2662fd88ededffad2598ece932a58e1049325aaa"
+version = "0.2.0"
+source = "git+https://gitlab.scd31.com/cats/ham-cats#79ba39217c85f023b8571d789f279e96eac548b8"
 dependencies = [
  "arrayvec",
  "bitvec",
@@ -695,9 +695,9 @@ dependencies = [
 
 [[package]]
 name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
 dependencies = [
  "bytes",
  "http",
@@ -834,9 +834,9 @@ dependencies = [
 
 [[package]]
 name = "itoa"
-version = "1.0.9"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
 
 [[package]]
 name = "js-sys"
@@ -906,9 +906,9 @@ dependencies = [
 
 [[package]]
 name = "mio"
-version = "0.8.9"
+version = "0.8.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
 dependencies = [
  "libc",
  "wasi",
@@ -966,9 +966,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 
 [[package]]
 name = "openssl-probe"
@@ -1231,9 +1231,9 @@ dependencies = [
 
 [[package]]
 name = "ring"
-version = "0.17.6"
+version = "0.17.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
 dependencies = [
  "cc",
  "getrandom",
@@ -1266,9 +1266,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 
 [[package]]
 name = "rustix"
-version = "0.38.26"
+version = "0.38.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a"
+checksum = "bfeae074e687625746172d639330f1de242a178bf3189b51e35a7a21573513ac"
 dependencies = [
  "bitflags 2.4.1",
  "errno",
@@ -1279,9 +1279,9 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.21.9"
+version = "0.21.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
 dependencies = [
  "log",
  "ring",
@@ -1594,9 +1594,9 @@ dependencies = [
 
 [[package]]
 name = "tokio"
-version = "1.34.0"
+version = "1.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
 dependencies = [
  "backtrace",
  "bytes",
@@ -1808,9 +1808,9 @@ dependencies = [
 
 [[package]]
 name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
 
 [[package]]
 name = "unicode-ident"
@@ -2091,9 +2091,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
 
 [[package]]
 name = "winnow"
-version = "0.5.19"
+version = "0.5.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff"
 dependencies = [
  "memchr",
 ]
diff --git a/src/gate.rs b/src/gate.rs
index c94f20a..1dd83d4 100644
--- a/src/gate.rs
+++ b/src/gate.rs
@@ -9,6 +9,7 @@ use anyhow::{anyhow, Context};
 use async_stream::stream;
 use half::f16;
 use ham_cats::buffer::Buffer;
+use ham_cats::identity::Identity;
 use ham_cats::whisker::NodeInfoBuilder;
 use ham_cats::{
     packet::Packet,
@@ -216,7 +217,7 @@ pub async fn packet_handler(
                 }
             }
 
-            match packet.should_digipeat(&callsign, ssid) {
+            match packet.should_digipeat(Identity::new(&callsign, ssid)) {
                 Ok(()) => {
                     if let Err(e) = packet.append_to_route(&callsign, ssid, Some(rssi)) {
                         eprintln!(
@@ -321,7 +322,7 @@ pub async fn felinet_receive_once(
             .ok()
             .and_then(|_| Packet::semi_decode(buf).ok())
         {
-            if pkt.should_digipeat(callsign, ssid).is_ok() {
+            if pkt.should_digipeat(Identity::new(callsign, ssid)).is_ok() {
                 print_packet(&pkt, None);
 
                 let mut buf2 = [0; MAX_PACKET_LEN];
diff --git a/src/util.rs b/src/util.rs
index bf07211..4dff884 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -2,8 +2,9 @@ use crate::radio::MAX_PACKET_LEN;
 use anyhow::anyhow;
 use colored::{Color, Colorize};
 use ham_cats::{
+    identity::Identity,
     packet::Packet,
-    whisker::{Route, RouteIdentity, RouteNode},
+    whisker::{PastHop, Route, RouteHop},
 };
 
 pub fn print_packet(pkt: &Packet<MAX_PACKET_LEN>, rssi: Option<f64>) {
@@ -35,16 +36,21 @@ pub fn print_packet(pkt: &Packet<MAX_PACKET_LEN>, rssi: Option<f64>) {
         let r_str = route
             .iter()
             .map(|rn| match rn {
-                ham_cats::whisker::RouteNode::Internet => "[NET]".to_string(),
-                ham_cats::whisker::RouteNode::Identity(ident) => {
-                    let s = if ident.is_future() { "*" } else { "" };
+                RouteHop::Internet => "[NET]".to_string(),
+                RouteHop::Past(past_hop) => {
+                    let ident = past_hop.identity();
                     let rc = ident.callsign();
                     let rs = ident.ssid();
-                    let rssi = match ident.rssi() {
-                        Some(x) => format!("[{x:.1} dbm]"),
+                    let rssi = match past_hop.rssi() {
+                        Some(x) => format!(" [{x:.1} dbm]"),
                         None => "".to_string(),
                     };
-                    format!("{rc}-{rs}{s} {rssi}")
+                    format!("{rc}-{rs}{rssi}")
+                }
+                RouteHop::Future(ident) => {
+                    let rc = ident.callsign();
+                    let rs = ident.ssid();
+                    format!("{rc}-{rs}*")
                 }
             })
             .collect::<Vec<String>>()
@@ -146,7 +152,7 @@ pub fn append_internet_to_packet_route(
     let mut route = packet.route().unwrap_or(Route::new(0));
 
     let first_future = route.iter().find_map(|rn| match rn {
-        RouteNode::Identity(ident) if ident.is_future() => Some((ident.callsign(), ident.ssid())),
+        RouteHop::Future(ident) => Some((ident.callsign(), ident.ssid())),
         _ => None,
     });
 
@@ -154,28 +160,27 @@ pub fn append_internet_to_packet_route(
         if rc == callsign && rs == ssid {
             // we can just do the normal thing
             // since we're replacing the existing future node, this should never fail, unless we run out of byte space
-            route.append_node(callsign, ssid, Some(rssi)).ok()?;
+            route
+                .append_hop(PastHop::new(Identity::new(callsign, ssid), Some(rssi)))
+                .ok()?;
         } else {
             // rip off all the futures and add ourselves
             let mut new_route = Route::new(route.max_hops);
             for r in route.iter() {
                 match r {
-                    RouteNode::Internet => new_route.push_internet()?,
-                    RouteNode::Identity(ident) => {
-                        if ident.is_future() {
-                            break;
-                        }
-
-                        new_route.push_callsign(ident);
+                    RouteHop::Internet => new_route.push_internet()?,
+                    RouteHop::Past(past) => {
+                        new_route.push_past(past)?;
                     }
+                    RouteHop::Future(_) => break,
                 }
             }
 
             route = new_route;
-            route.push_callsign(RouteIdentity::new(callsign, ssid, Some(rssi), false));
+            route.push_past(PastHop::new(Identity::new(callsign, ssid), Some(rssi)))?;
         }
     } else {
-        route.push_callsign(RouteIdentity::new(callsign, ssid, Some(rssi), false))?;
+        route.push_past(PastHop::new(Identity::new(callsign, ssid), Some(rssi)))?;
     }
 
     route.push_internet()?;
-- 
GitLab