14
14
#include < wolfssl/wolfcrypt/hash.h> // wc_sha512
15
15
16
16
#include " constants.h"
17
- #include " base64 .h"
17
+ #include " base64_util .h"
18
18
#include " pairing.h"
19
19
#include " storage.h"
20
20
#include " query_params.h"
@@ -524,27 +524,21 @@ void write(client_context_t *context, byte *data, int data_size) {
524
524
CLIENT_ERROR (context, " The socket is null! (or is closed)" );
525
525
return ;
526
526
}
527
+ if (context->disconnect ) {
528
+ context->error_write = true ;
529
+ return ;
530
+ }
527
531
if (context->error_write ) {
528
532
CLIENT_ERROR (context, " Abort write data since error_write." );
529
533
return ;
530
534
}
531
535
int write_size = context->socket ->write (data, data_size);
532
536
CLIENT_DEBUG (context, " Sending data of size %d" , data_size);
533
537
if (write_size != data_size) {
534
- CLIENT_ERROR (context, " socket.write, data_size=%d, write_size=%d" , data_size, write_size);
535
538
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);
546
541
}
547
-
548
542
}
549
543
550
544
int client_send_encrypted_ (client_context_t *context,
@@ -2699,9 +2693,6 @@ void homekit_server_on_reset(client_context_t *context) {
2699
2693
2700
2694
homekit_server_reset ();
2701
2695
send_204_response (context);
2702
-
2703
- // vTaskDelay(3000 / portTICK_PERIOD_MS);
2704
-
2705
2696
homekit_system_restart ();
2706
2697
}
2707
2698
@@ -3141,28 +3132,30 @@ void homekit_mdns_init(homekit_server_t *server) {
3141
3132
3142
3133
homekit_accessory_t *accessory = server->config ->accessories [0 ];
3143
3134
homekit_service_t *accessory_info = homekit_service_by_type (accessory,
3144
- HOMEKIT_SERVICE_ACCESSORY_INFORMATION);
3135
+ HOMEKIT_SERVICE_ACCESSORY_INFORMATION);
3145
3136
if (!accessory_info) {
3146
3137
ERROR (" Invalid accessory declaration: no Accessory Information service" );
3147
3138
return ;
3148
3139
}
3149
3140
3150
3141
homekit_characteristic_t *name = homekit_service_characteristic_by_type (accessory_info,
3151
- HOMEKIT_CHARACTERISTIC_NAME);
3142
+ HOMEKIT_CHARACTERISTIC_NAME);
3143
+
3152
3144
if (!name) {
3153
3145
ERROR (" Invalid accessory declaration: " " no Name characteristic in AccessoryInfo service" );
3154
3146
return ;
3155
3147
}
3156
-
3148
+
3157
3149
homekit_characteristic_t *model = homekit_service_characteristic_by_type (accessory_info,
3158
- HOMEKIT_CHARACTERISTIC_MODEL);
3150
+ HOMEKIT_CHARACTERISTIC_MODEL);
3151
+
3159
3152
if (!model) {
3160
3153
ERROR (" Invalid accessory declaration: " " no Model characteristic in AccessoryInfo service" );
3161
3154
return ;
3162
3155
}
3163
3156
3164
3157
if (homekit_mdns_started) {
3165
- MDNS.close ();
3158
+ // MDNS.close();
3166
3159
MDNS.begin (name->value .string_value , staIP);
3167
3160
INFO (" MDNS restart: %s, IP: %s" , name->value .string_value , staIP.toString ().c_str ());
3168
3161
MDNS.announce ();
@@ -3176,7 +3169,7 @@ void homekit_mdns_init(homekit_server_t *server) {
3176
3169
INFO (" MDNS begin: %s, IP: %s" , name->value .string_value , staIP.toString ().c_str ());
3177
3170
3178
3171
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);
3180
3173
// Set a service specific callback for dynamic service TXT items.
3181
3174
// The callback is called, whenever service TXT items are needed for the given service.
3182
3175
MDNS.setDynamicServiceTxtCallback (mdns_service,
@@ -3207,31 +3200,6 @@ void homekit_mdns_init(homekit_server_t *server) {
3207
3200
// MDNS.addServiceTxt(HAP_SERVICE, HOMEKIT_MDNS_PROTO, "sf", (server->paired) ? "0" : "1");
3208
3201
MDNS.addServiceTxt (mdns_service, " ci" , String (server->config ->category ).c_str ());
3209
3202
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
-
3235
3203
if (server->config ->setupId ) {
3236
3204
DEBUG (" Accessory Setup ID = %s" , server->config ->setupId );
3237
3205
@@ -3255,8 +3223,6 @@ void homekit_mdns_init(homekit_server_t *server) {
3255
3223
MDNS.announce ();
3256
3224
MDNS.update ();
3257
3225
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.");
3260
3226
}
3261
3227
3262
3228
// Used to update the config_number ("c#" value of Bonjour)
@@ -3351,19 +3317,9 @@ void homekit_server_init(homekit_server_config_t *config) {
3351
3317
// homekit_server_task(server);
3352
3318
INFO (" Starting server" );
3353
3319
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 ) {
3367
3323
3368
3324
homekit_accessory_id_generate (server->accessory_id );
3369
3325
homekit_storage_save_accessory_id (server->accessory_id );
0 commit comments