altos: Require callsign match in packet code
authorKeith Packard <keithp@keithp.com>
Wed, 28 Sep 2011 06:50:43 +0000 (23:50 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 27 Mar 2012 02:20:14 +0000 (19:20 -0700)
Ignore packets with mismatching callsigns to avoid accidental
connections between devices controlled by different stations.

As a special case, if the device is configured with the default
callsign (N0CALL), then let anyone connect. This allows configuration
of new devices without needing to change the ground station callsign.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_packet.c

index f502d67c598295672f1ad73540300f3da747ca2a..7eeb07108f2504285983839bafa294bc55fb01cc 100644 (file)
@@ -68,6 +68,15 @@ ao_packet_recv(void)
        if (!(ao_rx_packet.status & PKT_APPEND_STATUS_1_CRC_OK))
                return 0;
 
+       /* Accept packets with matching call signs, or any packet if
+        * our callsign hasn't been configured
+        */
+       if (ao_xmemcmp(ao_rx_packet.packet.callsign,
+                      ao_config.callsign,
+                      AO_MAX_CALLSIGN) != 0 &&
+           ao_xmemcmp(ao_config.callsign, CODE_TO_XDATA("N0CALL"), 7) != 0)
+               return 0;
+
        /* SYN packets carry no data */
        if (ao_rx_packet.packet.len == AO_PACKET_SYN) {
                rx_seq = ao_rx_packet.packet.seq;