|
@@ -18,7 +18,7 @@
|
|
|
#define LORA_BW 125
|
|
#define LORA_BW 125
|
|
|
#endif
|
|
#endif
|
|
|
#ifndef LORA_SF
|
|
#ifndef LORA_SF
|
|
|
- #define LORA_SF 10
|
|
|
|
|
|
|
+ #define LORA_SF 9
|
|
|
#endif
|
|
#endif
|
|
|
#ifndef LORA_CR
|
|
#ifndef LORA_CR
|
|
|
#define LORA_CR 5
|
|
#define LORA_CR 5
|
|
@@ -62,13 +62,6 @@ class MyMesh : public mesh::Mesh {
|
|
|
bool got_adv = false;
|
|
bool got_adv = false;
|
|
|
|
|
|
|
|
protected:
|
|
protected:
|
|
|
- int searchPeersByHash(const uint8_t* hash) override {
|
|
|
|
|
- if (got_adv && server_id.isHashMatch(hash)) {
|
|
|
|
|
- return 1;
|
|
|
|
|
- }
|
|
|
|
|
- return 0; // not found
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
void onAdvertRecv(mesh::Packet* packet, const mesh::Identity& id, uint32_t timestamp, const uint8_t* app_data, size_t app_data_len) override {
|
|
void onAdvertRecv(mesh::Packet* packet, const mesh::Identity& id, uint32_t timestamp, const uint8_t* app_data, size_t app_data_len) override {
|
|
|
if (memcmp(app_data, "repeater:", 9) == 0) {
|
|
if (memcmp(app_data, "repeater:", 9) == 0) {
|
|
|
Serial.println("Received advertisement from a repeater!");
|
|
Serial.println("Received advertisement from a repeater!");
|
|
@@ -115,19 +108,31 @@ protected:
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void onPeerDataRecv(mesh::Packet* packet, uint8_t type, int sender_idx, uint8_t* data, size_t len) override {
|
|
|
|
|
|
|
+ int searchPeersByHash(const uint8_t* hash) override {
|
|
|
|
|
+ if (got_adv && server_id.isHashMatch(hash)) {
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ return 0; // not found
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void getPeerSharedSecret(uint8_t* dest_secret, int peer_idx) override {
|
|
|
|
|
+ // lookup pre-calculated shared_secret
|
|
|
|
|
+ memcpy(dest_secret, server_secret, PUB_KEY_SIZE);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void onPeerDataRecv(mesh::Packet* packet, uint8_t type, int sender_idx, const uint8_t* secret, uint8_t* data, size_t len) override {
|
|
|
if (type == PAYLOAD_TYPE_RESPONSE) {
|
|
if (type == PAYLOAD_TYPE_RESPONSE) {
|
|
|
handleResponse(data, len);
|
|
handleResponse(data, len);
|
|
|
|
|
|
|
|
if (packet->isRouteFlood()) {
|
|
if (packet->isRouteFlood()) {
|
|
|
// let server know path TO here, so they can use sendDirect() for future ping responses
|
|
// let server know path TO here, so they can use sendDirect() for future ping responses
|
|
|
- mesh::Packet* path = createPathReturn(server_id, server_secret, packet->path, packet->path_len, 0, NULL, 0);
|
|
|
|
|
|
|
+ mesh::Packet* path = createPathReturn(server_id, secret, packet->path, packet->path_len, 0, NULL, 0);
|
|
|
if (path) sendFlood(path);
|
|
if (path) sendFlood(path);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void onPeerPathRecv(mesh::Packet* packet, int sender_idx, uint8_t* path, uint8_t path_len, uint8_t extra_type, uint8_t* extra, uint8_t extra_len) override {
|
|
|
|
|
|
|
+ void onPeerPathRecv(mesh::Packet* packet, int sender_idx, const uint8_t* secret, uint8_t* path, uint8_t path_len, uint8_t extra_type, uint8_t* extra, uint8_t extra_len) override {
|
|
|
// must be from server_id
|
|
// must be from server_id
|
|
|
Serial.printf("PATH to repeater, path_len=%d\n", (uint32_t) path_len);
|
|
Serial.printf("PATH to repeater, path_len=%d\n", (uint32_t) path_len);
|
|
|
|
|
|
|
@@ -135,7 +140,7 @@ protected:
|
|
|
|
|
|
|
|
if (packet->isRouteFlood()) {
|
|
if (packet->isRouteFlood()) {
|
|
|
// send a reciprocal return path to sender, but send DIRECTLY!
|
|
// send a reciprocal return path to sender, but send DIRECTLY!
|
|
|
- mesh::Packet* rpath = createPathReturn(server_id, server_secret, packet->path, packet->path_len, 0, NULL, 0);
|
|
|
|
|
|
|
+ mesh::Packet* rpath = createPathReturn(server_id, secret, packet->path, packet->path_len, 0, NULL, 0);
|
|
|
if (rpath) sendDirect(rpath, path, path_len);
|
|
if (rpath) sendDirect(rpath, path, path_len);
|
|
|
}
|
|
}
|
|
|
|
|
|