Parcourir la source

* repeater, DISCOVER_REQ, flags lowest bit now for 'prefix_only' responses

Scott Powell il y a 9 mois
Parent
commit
1520f4d28e
2 fichiers modifiés avec 9 ajouts et 8 suppressions
  1. 7 7
      docs/payloads.md
  2. 2 1
      examples/simple_repeater/MyMesh.cpp

+ 7 - 7
docs/payloads.md

@@ -199,12 +199,12 @@ The plaintext contained in the ciphertext matches the format described in [plain
 
 ## DISCOVER_REQ (sub_type)
 
-| Field        | Size (bytes)    | Description                                |
-|--------------|-----------------|--------------------------------------------|
-| flags        | 1               | 0x8 (upper 4 bits)                         |
-| type_filter  | 1               | bit for each ADV_TYPE_*                    |
-| tag          | 4               | randomly generate by sender                |
-| since        | 4               | (optional) epoch timestamp (0 by default)  |
+| Field        | Size (bytes)    | Description                                  |
+|--------------|-----------------|----------------------------------------------|
+| flags        | 1               | 0x8 (upper 4 bits), prefix_only (lowest bit) |
+| type_filter  | 1               | bit for each ADV_TYPE_*                      |
+| tag          | 4               | randomly generate by sender                  |
+| since        | 4               | (optional) epoch timestamp (0 by default)    |
 
 ## DISCOVER_RESP (sub_type)
 
@@ -213,7 +213,7 @@ The plaintext contained in the ciphertext matches the format described in [plain
 | flags        | 1               | 0x9 (upper 4 bits), node_type (lower 4)    |
 | snr          | 1               | signed, SNR*4                              |
 | tag          | 4               | reflected back from DISCOVER_REQ           |
-| pubkey       | 32              | node's ID                                  |
+| pubkey       | 8 or 32         | node's ID (or prefix)                      |
 
 
 # Custom packet

+ 2 - 1
examples/simple_repeater/MyMesh.cpp

@@ -636,12 +636,13 @@ void MyMesh::onControlDataRecv(mesh::Packet* packet) {
     }
 
     if ((filter & (1 << ADV_TYPE_REPEATER)) != 0 && _prefs.discovery_mod_timestamp >= since) {
+      bool prefix_only = packet->payload[0] & 1;
       uint8_t data[6 + PUB_KEY_SIZE];
       data[0] = CTL_TYPE_NODE_DISCOVER_RESP | ADV_TYPE_REPEATER;   // low 4-bits for node type
       data[1] = packet->_snr;   // let sender know the inbound SNR ( x 4)
       memcpy(&data[2], &tag, 4);     // include tag from request, for client to match to
       memcpy(&data[6], self_id.pub_key, PUB_KEY_SIZE);
-      auto resp = createControlData(data, sizeof(data));
+      auto resp = createControlData(data, prefix_only ? 6 + 8 : 6 + PUB_KEY_SIZE);
       if (resp) {
         sendZeroHop(resp, getRetransmitDelay(resp)*4);  // apply random delay (widened x4), as multiple nodes can respond to this
       }