Skip to content

Commit d60e394

Browse files
sebasanblasmrthitipaullj1
authored
clean ID (#1)
* fix: It base64 error if use with WifiManager * fix: the device is not work after reconnect wifi * Remove logging * Add debug back in, but make default "no log" * Fix complete annihilation of storage on new pair - Might fix Mixiaoxiao#103, Mixiaoxiao#139, Mixiaoxiao#147, Mixiaoxiao#184, Mixiaoxiao#198 - Also adds changes by @ruleechen - Also adds changes by @thiti-y * Fix incorrect access of global var --------- Co-authored-by: thiti yamsung <[email protected]> Co-authored-by: Paul Jordan <[email protected]>
1 parent 8a8e1a0 commit d60e394

File tree

7 files changed

+90
-112
lines changed

7 files changed

+90
-112
lines changed

src/arduino_homekit_server.cpp

Lines changed: 18 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <wolfssl/wolfcrypt/hash.h> //wc_sha512
1515

1616
#include "constants.h"
17-
#include "base64.h"
17+
#include "base64_util.h"
1818
#include "pairing.h"
1919
#include "storage.h"
2020
#include "query_params.h"
@@ -524,27 +524,21 @@ void write(client_context_t *context, byte *data, int data_size) {
524524
CLIENT_ERROR(context, "The socket is null! (or is closed)");
525525
return;
526526
}
527+
if (context->disconnect) {
528+
context->error_write = true;
529+
return;
530+
}
527531
if (context->error_write) {
528532
CLIENT_ERROR(context, "Abort write data since error_write.");
529533
return;
530534
}
531535
int write_size = context->socket->write(data, data_size);
532536
CLIENT_DEBUG(context, "Sending data of size %d", data_size);
533537
if (write_size != data_size) {
534-
CLIENT_ERROR(context, "socket.write, data_size=%d, write_size=%d", data_size, write_size);
535538
context->error_write = true;
536-
// Error write when :
537-
// 1. remote client is disconnected
538-
// 2. data_size is larger than the tcp internal send buffer
539-
// But We has limited the data_size to 538, and TCP_SND_BUF = 1072. (See the comments on HOMEKIT_JSONBUFFER_SIZE)
540-
// So we believe here is disconnected.
541-
context->disconnect = true;
542-
homekit_server_close_client(context->server, context);
543-
// We consider the socket is 'closed' when error in writing (eg. the remote client is disconnected, NO tcp ack receive).
544-
// Closing the socket causes memory-leak if some data has not been sent (the write_buffer did not free)
545-
// To fix this memory-leak, add tcp_abandon(_pcb, 0); in ClientContext.h of ESP8266WiFi-library.
539+
context->socket->keepAlive(1, 1, 1); // fast disconnected internally in 1 second.
540+
CLIENT_ERROR(context, "socket.write, data_size=%d, write_size=%d", data_size, write_size);
546541
}
547-
548542
}
549543

550544
int client_send_encrypted_(client_context_t *context,
@@ -2699,9 +2693,6 @@ void homekit_server_on_reset(client_context_t *context) {
26992693

27002694
homekit_server_reset();
27012695
send_204_response(context);
2702-
2703-
//vTaskDelay(3000 / portTICK_PERIOD_MS);
2704-
27052696
homekit_system_restart();
27062697
}
27072698

@@ -3141,28 +3132,30 @@ void homekit_mdns_init(homekit_server_t *server) {
31413132

31423133
homekit_accessory_t *accessory = server->config->accessories[0];
31433134
homekit_service_t *accessory_info = homekit_service_by_type(accessory,
3144-
HOMEKIT_SERVICE_ACCESSORY_INFORMATION);
3135+
HOMEKIT_SERVICE_ACCESSORY_INFORMATION);
31453136
if (!accessory_info) {
31463137
ERROR("Invalid accessory declaration: no Accessory Information service");
31473138
return;
31483139
}
31493140

31503141
homekit_characteristic_t *name = homekit_service_characteristic_by_type(accessory_info,
3151-
HOMEKIT_CHARACTERISTIC_NAME);
3142+
HOMEKIT_CHARACTERISTIC_NAME);
3143+
31523144
if (!name) {
31533145
ERROR("Invalid accessory declaration: " "no Name characteristic in AccessoryInfo service");
31543146
return;
31553147
}
3156-
3148+
31573149
homekit_characteristic_t *model = homekit_service_characteristic_by_type(accessory_info,
3158-
HOMEKIT_CHARACTERISTIC_MODEL);
3150+
HOMEKIT_CHARACTERISTIC_MODEL);
3151+
31593152
if (!model) {
31603153
ERROR("Invalid accessory declaration: " "no Model characteristic in AccessoryInfo service");
31613154
return;
31623155
}
31633156

31643157
if (homekit_mdns_started) {
3165-
MDNS.close();
3158+
// MDNS.close();
31663159
MDNS.begin(name->value.string_value, staIP);
31673160
INFO("MDNS restart: %s, IP: %s", name->value.string_value, staIP.toString().c_str());
31683161
MDNS.announce();
@@ -3176,7 +3169,7 @@ void homekit_mdns_init(homekit_server_t *server) {
31763169
INFO("MDNS begin: %s, IP: %s", name->value.string_value, staIP.toString().c_str());
31773170

31783171
MDNSResponder::hMDNSService mdns_service = MDNS.addService(name->value.string_value,
3179-
HOMEKIT_MDNS_SERVICE, HOMEKIT_MDNS_PROTO, HOMEKIT_SERVER_PORT);
3172+
HOMEKIT_MDNS_SERVICE, HOMEKIT_MDNS_PROTO, HOMEKIT_SERVER_PORT);
31803173
// Set a service specific callback for dynamic service TXT items.
31813174
// The callback is called, whenever service TXT items are needed for the given service.
31823175
MDNS.setDynamicServiceTxtCallback(mdns_service,
@@ -3207,31 +3200,6 @@ void homekit_mdns_init(homekit_server_t *server) {
32073200
//MDNS.addServiceTxt(HAP_SERVICE, HOMEKIT_MDNS_PROTO, "sf", (server->paired) ? "0" : "1");
32083201
MDNS.addServiceTxt(mdns_service, "ci", String(server->config->category).c_str());
32093202

3210-
/*
3211-
// accessory model name (required)
3212-
homekit_mdns_add_txt("md", "%s", model->value.string_value);
3213-
// protocol version (required)
3214-
homekit_mdns_add_txt("pv", "1.0");
3215-
// device ID (required)
3216-
// should be in format XX:XX:XX:XX:XX:XX, otherwise devices will ignore it
3217-
homekit_mdns_add_txt("id", "%s", server->accessory_id);
3218-
// current configuration number (required)
3219-
homekit_mdns_add_txt("c#", "%d", server->config->config_number);
3220-
// current state number (required)
3221-
homekit_mdns_add_txt("s#", "1");
3222-
// feature flags (required if non-zero)
3223-
// bit 0 - supports HAP pairing. required for all HomeKit accessories
3224-
// bits 1-7 - reserved
3225-
homekit_mdns_add_txt("ff", "0");
3226-
// status flags
3227-
// bit 0 - not paired
3228-
// bit 1 - not configured to join WiFi
3229-
// bit 2 - problem detected on accessory
3230-
// bits 3-7 - reserved
3231-
homekit_mdns_add_txt("sf", "%d", (server->paired) ? 0 : 1);
3232-
// accessory category identifier
3233-
homekit_mdns_add_txt("ci", "%d", server->config->category);*/
3234-
32353203
if (server->config->setupId) {
32363204
DEBUG("Accessory Setup ID = %s", server->config->setupId);
32373205

@@ -3255,8 +3223,6 @@ void homekit_mdns_init(homekit_server_t *server) {
32553223
MDNS.announce();
32563224
MDNS.update();
32573225
homekit_mdns_started = true;
3258-
//INFO("MDNS ok! Open your \"Home\" app, click \"Add or Scan Accessory\""
3259-
// " and \"I Don't Have a Code\". \nThis Accessory will show on your iOS device.");
32603226
}
32613227

32623228
// Used to update the config_number ("c#" value of Bonjour)
@@ -3351,19 +3317,9 @@ void homekit_server_init(homekit_server_config_t *config) {
33513317
//homekit_server_task(server);
33523318
INFO("Starting server");
33533319

3354-
int r = homekit_storage_init();
3355-
if (r == 0) {
3356-
r = homekit_storage_load_accessory_id(server->accessory_id);
3357-
3358-
if (!r)
3359-
r = homekit_storage_load_accessory_key(&server->accessory_key);
3360-
}
3361-
3362-
if (r) {
3363-
if (r < 0) {
3364-
INFO("Resetting HomeKit storage");
3365-
homekit_storage_reset();
3366-
}
3320+
if (homekit_storage_init() != 0 ||
3321+
homekit_storage_load_accessory_id(server->accessory_id) != 0 ||
3322+
homekit_storage_load_accessory_key(&server->accessory_key) != 0) {
33673323

33683324
homekit_accessory_id_generate(server->accessory_id);
33693325
homekit_storage_save_accessory_id(server->accessory_id);

src/arduino_homekit_server.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ extern "C" {
1111
#endif
1212

1313
#include "constants.h"
14-
#include "base64.h"
14+
#include "base64_util.h"
1515
#include "crypto.h"
1616
#include "pairing.h"
1717
#include "storage.h"

src/base64.c renamed to src/base64_util.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "base64.h"
1+
#include "base64_util.h"
22

33
static unsigned char base64_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
44

File renamed without changes.

src/homekit_debug.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ typedef unsigned char byte;
1919
#define HOMEKIT_LOG_DEBUG 3
2020

2121
#ifndef HOMEKIT_LOG_LEVEL
22-
#define HOMEKIT_LOG_LEVEL HOMEKIT_LOG_INFO
22+
#define HOMEKIT_LOG_LEVEL HOMEKIT_NO_LOG
2323
#endif
2424

2525
#define HOMEKIT_PRINTF XPGM_PRINTF

0 commit comments

Comments
 (0)