Branch data Line data Source code
1 : : #include <cstring>
2 : :
3 : : #include "esp_log.h"
4 : :
5 : : #include "message_router.hpp"
6 : :
7 : : static const char* TAG = "MessageRouter";
8 : :
9 : 16 : MessageRouter::MessageRouter(
10 : : IDiscoveryManager& discovery_manager,
11 : : ITxManager& tx_manager,
12 : : IHeartbeatManager& heartbeat_manager,
13 : 16 : IPairingManager& pairing_manager)
14 : 16 : : discovery_manager_(discovery_manager)
15 : 16 : , tx_manager_(tx_manager)
16 : 16 : , heartbeat_manager_(heartbeat_manager)
17 : 16 : , pairing_manager_(pairing_manager)
18 : :
19 : : {
20 : 16 : }
21 : :
22 : 15 : void MessageRouter::handle_packet(const DecodedRxPacket& decoded)
23 : : {
24 [ + + + + : 15 : switch (decoded.header.msg_type) {
+ + + + ]
25 : 2 : case MessageType::PAIR_REQUEST:
26 [ + + ]: 2 : if (decoded.raw.len < sizeof(PairRequest)) {
27 : : ESP_LOGW(TAG, "Malformed PAIR_REQUEST: len %d < %d", (int)decoded.raw.len, (int)sizeof(PairRequest));
28 : : return;
29 : : }
30 : 1 : pairing_manager_.handle_request(decoded);
31 : 1 : break;
32 : 2 : case MessageType::PAIR_RESPONSE:
33 [ + + ]: 2 : if (decoded.raw.len < sizeof(PairResponse)) {
34 : : ESP_LOGW(TAG, "Malformed PAIR_RESPONSE: len %d < %d", (int)decoded.raw.len, (int)sizeof(PairResponse));
35 : : return;
36 : : }
37 : 1 : pairing_manager_.handle_response(decoded);
38 : 1 : break;
39 : 2 : case MessageType::HEARTBEAT:
40 [ + + ]: 2 : if (decoded.raw.len < sizeof(HeartbeatMessage)) {
41 : : ESP_LOGW(TAG, "Malformed HEARTBEAT: len %d < %d", (int)decoded.raw.len, (int)sizeof(HeartbeatMessage));
42 : : return;
43 : : }
44 : 1 : heartbeat_manager_.handle_request(decoded);
45 : 1 : break;
46 : :
47 : 2 : case MessageType::HEARTBEAT_RESPONSE:
48 : 2 : {
49 [ + + ]: 2 : if (decoded.raw.len < sizeof(HeartbeatResponse)) {
50 : : ESP_LOGW(
51 : : TAG, "Malformed HEARTBEAT_RESPONSE: len %d < %d", (int)decoded.raw.len, (int)sizeof(HeartbeatResponse));
52 : : return;
53 : : }
54 : 1 : heartbeat_manager_.handle_response(decoded);
55 : 1 : break;
56 : : }
57 : 2 : case MessageType::ACK:
58 [ + + ]: 2 : if (decoded.raw.len < sizeof(AckMessage)) {
59 : : ESP_LOGW(TAG, "Malformed ACK: len %d < %d", (int)decoded.raw.len, (int)sizeof(AckMessage));
60 : : return;
61 : : }
62 : 1 : tx_manager_.handle_ack(decoded);
63 : 1 : break;
64 : 2 : case MessageType::CHANNEL_SCAN_PROBE:
65 [ + + ]: 2 : if (decoded.raw.len < sizeof(MessageHeader)) {
66 : : ESP_LOGW(
67 : : TAG, "Malformed CHANNEL_SCAN_PROBE: len %d < %d", (int)decoded.raw.len, (int)sizeof(MessageHeader));
68 : : return;
69 : : }
70 : 1 : discovery_manager_.handle_scan_probe(decoded);
71 : 1 : break;
72 : 2 : case MessageType::CHANNEL_SCAN_RESPONSE:
73 [ + + ]: 2 : if (decoded.raw.len < sizeof(MessageHeader)) {
74 : : ESP_LOGW(
75 : : TAG, "Malformed CHANNEL_SCAN_RESPONSE: len %d < %d", (int)decoded.raw.len, (int)sizeof(MessageHeader));
76 : : return;
77 : : }
78 : 1 : discovery_manager_.handle_scan_response(decoded);
79 : 1 : break;
80 : :
81 : : default:
82 : : break;
83 : : }
84 : : }
|