From 120dc1a9afcfc5efb5705044b4aa1d110872035f Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Mon, 7 Aug 2023 18:36:05 -0600 Subject: [PATCH] Fix gateway field setup for uplink --- src/gateway.rs | 9 ++++++--- src/packet.rs | 6 +++--- src/packet_router/mod.rs | 1 - 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/gateway.rs b/src/gateway.rs index 6a7901ac..1d3dcde4 100644 --- a/src/gateway.rs +++ b/src/gateway.rs @@ -1,6 +1,6 @@ use crate::{ - beaconer, packet, packet_router, region_watcher, sync, PacketDown, PacketUp, RegionParams, - Result, Settings, + beaconer, packet, packet_router, region_watcher, sync, PacketDown, PacketUp, PublicKey, + RegionParams, Result, Settings, }; use beacon::Beacon; use lorawan::PHYPayload; @@ -60,6 +60,7 @@ impl MessageSender { } pub struct Gateway { + public_key: PublicKey, messages: MessageReceiver, uplinks: packet_router::MessageSender, beacons: beaconer::MessageSender, @@ -79,7 +80,9 @@ impl Gateway { beacons: beaconer::MessageSender, ) -> Result { let region_params = region_watcher::current_value(®ion_watch); + let public_key = settings.keypair.public_key().clone(); let gateway = Gateway { + public_key, messages, uplinks, beacons, @@ -136,7 +139,7 @@ impl Gateway { info!(%mac, %addr, "disconnected packet forwarder") } Event::PacketReceived(rxpk, _gateway_mac) => { - match PacketUp::from_rxpk(rxpk, self.region_params.region) { + match PacketUp::from_rxpk(rxpk, &self.public_key, self.region_params.region) { Ok(packet) if packet.is_potential_beacon() => { self.handle_potential_beacon(packet).await; } diff --git a/src/packet.rs b/src/packet.rs index ea67447b..f2dd3b50 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -1,4 +1,4 @@ -use crate::{error::DecodeError, Error, Region, Result}; +use crate::{error::DecodeError, Error, PublicKey, Region, Result}; use helium_proto::services::{ poc_lora, router::{PacketRouterPacketDownV1, PacketRouterPacketUpV1}, @@ -88,7 +88,7 @@ impl TryFrom for poc_lora::LoraWitnessReportReqV1 { } impl PacketUp { - pub fn from_rxpk(rxpk: push_data::RxPk, region: Region) -> Result { + pub fn from_rxpk(rxpk: push_data::RxPk, gateway: &PublicKey, region: Region) -> Result { if rxpk.get_crc_status() != &CRC::OK { return Err(DecodeError::invalid_crc()); } @@ -105,7 +105,7 @@ impl PacketUp { snr: rxpk.get_snr(), region: region.into(), hold_time: 0, - gateway: vec![], + gateway: gateway.into(), signature: vec![], }; Ok(Self(packet)) diff --git a/src/packet_router/mod.rs b/src/packet_router/mod.rs index 24cdc669..9542e5ed 100644 --- a/src/packet_router/mod.rs +++ b/src/packet_router/mod.rs @@ -258,7 +258,6 @@ pub async fn mk_uplink( use std::ops::Deref; let mut uplink: PacketRouterPacketUpV1 = packet.deref().into(); uplink.hold_time = packet.hold_time().as_millis() as u64; - uplink.gateway = keypair.public_key().into(); uplink.signature = sign(keypair, uplink.encode_to_vec()).await?; let envelope = envelope_up_v1::Data::Packet(uplink); Ok(envelope)