From 24eb6afbe9913c490b1c44f679e0cd2a9cd3adbe Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 21 Jan 2016 16:47:50 +1100 Subject: [PATCH] GCS_MAVLink: provide signing streams and accept_unsigned callback --- libraries/GCS_MAVLink/GCS.h | 2 ++ libraries/GCS_MAVLink/GCS_Signing.cpp | 35 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/libraries/GCS_MAVLink/GCS.h b/libraries/GCS_MAVLink/GCS.h index b30ae73171..dbefaa3865 100644 --- a/libraries/GCS_MAVLink/GCS.h +++ b/libraries/GCS_MAVLink/GCS.h @@ -309,6 +309,8 @@ private: static DataFlash_Class *dataflash_p; mavlink_signing_t signing; + static mavlink_signing_streams_t signing_streams; + static StorageAccess _signing_storage; // a vehicle can optionally snoop on messages for other systems diff --git a/libraries/GCS_MAVLink/GCS_Signing.cpp b/libraries/GCS_MAVLink/GCS_Signing.cpp index 2f9aad62c5..135ebd46c0 100644 --- a/libraries/GCS_MAVLink/GCS_Signing.cpp +++ b/libraries/GCS_MAVLink/GCS_Signing.cpp @@ -34,6 +34,9 @@ struct SigningKey { uint8_t secret_key[32]; }; +// shared signing_streams structure +mavlink_signing_streams_t GCS_MAVLINK::signing_streams; + bool GCS_MAVLINK::signing_key_save(const struct SigningKey &key) { if (_signing_storage.size() < sizeof(key)) { @@ -74,6 +77,36 @@ void GCS_MAVLINK::handle_setup_signing(const mavlink_message_t *msg) } +/* + callback to accept unsigned (or incorrectly signed) packets + */ +extern "C" { + +static const struct { + uint8_t dialect; + uint16_t msgId; +} accept_list[] = { + { MAVLINK_MSG_ID_RADIO_STATUS_TUPLE } +}; + +static bool accept_unsigned_callback(const mavlink_status_t *status, + uint8_t dialect, uint16_t msgId) +{ + if (status == mavlink_get_channel_status(MAVLINK_COMM_0)) { + // always accept channel 0, assumed to be secure channel. This + // is USB on PX4 boards + return true; + } + for (uint8_t i=0; isigning = &signing; + status->signing_streams = &signing_streams; }