13 Commits

Author SHA1 Message Date
4ac270475b added image validation and signature 2021-01-10 14:03:50 +01:00
0f38c893d9 cleanup 2021-01-09 17:41:40 +01:00
f1fb982e21 fix: https and first ota process 2021-01-08 23:08:07 +01:00
1ff0de1f49 https image ota 2021-01-08 20:12:03 +01:00
d8c9239ed7 extract server image version and unit tests 2021-01-07 23:10:36 +01:00
c985ee6031 added test cases for image start offset and fix 2021-01-07 17:10:25 +01:00
13cbb310b4 cleanup 2021-01-06 23:04:05 +01:00
076c4b62fc image start offset 2021-01-06 18:10:12 +01:00
91edfa0c63 added https_client and menuconfig 2021-01-05 12:15:26 +01:00
d570ce8cc7 fix component include 2021-01-02 10:57:03 +01:00
563a7b19a8 added test-framework 2021-01-02 00:30:13 +01:00
fb5924cff1 fixing savepointer for strok 2021-01-01 21:15:58 +01:00
47f9d72aea fn check app version 2021-01-01 01:25:40 +01:00
26 changed files with 1368 additions and 165 deletions

5
.gitignore vendored
View File

@ -52,3 +52,8 @@ Module.symvers
Mkfile.old
dkms.conf
build/
test/build/
*.old

View File

@ -3,4 +3,4 @@
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(internal_communication)
project(mesh_ota)

View File

@ -3,6 +3,6 @@
# project subdirectory.
#
PROJECT_NAME := internal_communication
PROJECT_NAME := mesh_ota
include $(IDF_PATH)/make/project.mk

View File

@ -0,0 +1,7 @@
idf_component_register(SRCS "https_client.c" "mesh_ota.c"
INCLUDE_DIRS "include"
REQUIRES nvs_flash
esp_http_client
bootloader_support
app_update
log)

View File

View File

@ -0,0 +1,292 @@
#include "https_client.h"
static const char *TAG = "https_client";
static const char *REQUEST = "GET " CONFIG_OTA_HTTPS_URL " HTTP/1.1\r\n"
"Host: "CONFIG_OTA_HTTPS_SERVER_COMMON_NAME"\r\n"
"User-Agent: esp-idf/1.0 esp32\r\n"
"Authorization: Basic " CONFIG_OTA_HTTPS_AUTH "\r\n"
"\r\n";
static HTTPS_Client_t sHTTPS_ClientConfig;
https_client_ret_t https_clientInitEmbedTLS();
https_client_ret_t https_clientConnectToServer();
https_client_ret_t https_clientValidateServer();
https_client_ret_t https_clientSendRequest();
https_client_ret_t https_clientInitialize()
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
i32RetHTTPClient = https_clientInitEmbedTLS();
if(i32RetHTTPClient == HTTPS_CLIENT_OK)
{
i32RetHTTPClient = https_clientConnectToServer();
}
if(i32RetHTTPClient == HTTPS_CLIENT_OK)
{
i32RetHTTPClient = https_clientValidateServer();
}
if(i32RetHTTPClient == HTTPS_CLIENT_OK)
{
i32RetHTTPClient = https_clientSendRequest();
}
switch (i32RetHTTPClient)
{
case HTTPS_CLIENT_ERROR_INIT_EMBEDTLS:
ESP_LOGE(TAG, "Unable to initialize EmbedTLS");
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
break;
case HTTPS_CLIENT_ERROR_INIT_CONNECT_TWO_SERVER:
ESP_LOGE(TAG, "Unable to connect to server");
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
break;
case HTTPS_CLIENT_ERROR_INIT_VALIDATE_SERVER:
ESP_LOGE(TAG, "Unable to validate the server");
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
break;
case HTTPS_CLIENT_ERROR_INIT_SEND_REQUEST:
ESP_LOGE(TAG, "Unable to send request to server");
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
break;
case HTTPS_CLIENT_OK:
ESP_LOGI(TAG, "HTTPS Client successfully initialized");
i32RetHTTPClient = HTTPS_CLIENT_OK;
break;
default:
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
ESP_LOGE(TAG, "Unknown error while init https client");
break;
}
return i32RetHTTPClient;
}
https_client_ret_t https_clientRetrieveData(char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32BytesRead)
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetRetrieveData = ESP_OK;
bool bRetriveData = true;
bzero(pu8Data, *pu32DataLenght);
*pu32BytesRead = 0U;
while (bRetriveData)
{
//Reading HTTP response
i32RetRetrieveData = mbedtls_ssl_read(&sHTTPS_ClientConfig.ssl, (unsigned char *)(pu8Data+(*pu32BytesRead)), ((*pu32DataLenght)-(*pu32BytesRead)));
if(i32RetRetrieveData > 0)
{
//Data received
*pu32BytesRead = *pu32BytesRead + i32RetRetrieveData;
if(*pu32DataLenght > 0)
{
//buffer not full yet --> read some more
bRetriveData = true;
}
else
{
//buffer full --> stop reading
bRetriveData = false;
}
}
if(i32RetRetrieveData == 0)
{
//all data read --> stop reading
bRetriveData = false;
pu32BytesRead = 0;
}
if(i32RetRetrieveData == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)
{
//connection is going to be closed
i32RetHTTPClient = HTTPS_CLIENT_ERROR;
bRetriveData = false;
}
}
return i32RetHTTPClient;
}
https_client_ret_t https_clientDeinitialize()
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
i32RetHTTPClient = mbedtls_ssl_close_notify(&sHTTPS_ClientConfig.ssl); //close session
if(i32RetHTTPClient != ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_ssl_close_notify returned 0x%x", i32RetHTTPClient);
}
mbedtls_ssl_session_reset(&sHTTPS_ClientConfig.ssl); //reset embedssl
mbedtls_net_free(&sHTTPS_ClientConfig.server_fd); //free ram
return i32RetHTTPClient;
}
https_client_ret_t https_clientInitEmbedTLS() {
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetEmbedTLS = ESP_OK;
mbedtls_ssl_init(&sHTTPS_ClientConfig.ssl);
mbedtls_x509_crt_init(&sHTTPS_ClientConfig.cacert);
mbedtls_ctr_drbg_init(&sHTTPS_ClientConfig.ctr_drbg);
mbedtls_ssl_config_init(&sHTTPS_ClientConfig.conf);
mbedtls_entropy_init(&sHTTPS_ClientConfig.entropy);
i32RetEmbedTLS = mbedtls_ctr_drbg_seed(&sHTTPS_ClientConfig.ctr_drbg, mbedtls_entropy_func, &sHTTPS_ClientConfig.entropy, NULL, 0);
if(i32RetEmbedTLS!= ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", i32RetEmbedTLS);
}
if(i32RetEmbedTLS == ESP_OK)
{
//Attaching the certificate bundle
i32RetEmbedTLS = esp_crt_bundle_attach(&sHTTPS_ClientConfig.conf);
if(i32RetEmbedTLS != ESP_OK)
{
ESP_LOGE(TAG, "esp_crt_bundle_attach returned 0x%x\n\n", i32RetEmbedTLS);
}
}
if(i32RetEmbedTLS == ESP_OK)
{
//Setting hostname for TLS session.
i32RetEmbedTLS = mbedtls_ssl_set_hostname(&sHTTPS_ClientConfig.ssl, CONFIG_OTA_HTTPS_SERVER_COMMON_NAME);
// Hostname set here should match CN in server certificate
if(i32RetEmbedTLS != ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_ssl_set_hostname returned 0x%x", i32RetEmbedTLS);
}
}
if(i32RetEmbedTLS == ESP_OK)
{
//Setting up the SSL/TLS structure
i32RetEmbedTLS = mbedtls_ssl_config_defaults(&sHTTPS_ClientConfig.conf,
MBEDTLS_SSL_IS_CLIENT,
MBEDTLS_SSL_TRANSPORT_STREAM,
MBEDTLS_SSL_PRESET_DEFAULT);
if(i32RetEmbedTLS != ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_ssl_config_defaults returned %d", i32RetEmbedTLS);
}
}
if(i32RetEmbedTLS == ESP_OK)
{
mbedtls_ssl_conf_authmode(&sHTTPS_ClientConfig.conf, MBEDTLS_SSL_VERIFY_REQUIRED);
mbedtls_ssl_conf_ca_chain(&sHTTPS_ClientConfig.conf, &sHTTPS_ClientConfig.cacert, NULL);
mbedtls_ssl_conf_rng(&sHTTPS_ClientConfig.conf, mbedtls_ctr_drbg_random, &sHTTPS_ClientConfig.ctr_drbg);
i32RetEmbedTLS = mbedtls_ssl_setup(&sHTTPS_ClientConfig.ssl, &sHTTPS_ClientConfig.conf);
if(i32RetEmbedTLS != ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x\n\n", i32RetEmbedTLS);
}
}
if(i32RetEmbedTLS == ESP_OK)
{
mbedtls_net_init(&sHTTPS_ClientConfig.server_fd);
}
if (i32RetEmbedTLS != ESP_OK)
{
i32RetHTTPClient = HTTPS_CLIENT_ERROR_INIT_EMBEDTLS;
}
return i32RetHTTPClient;
}
https_client_ret_t https_clientConnectToServer()
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetServerConnect = ESP_OK;
//Connecting to server
i32RetServerConnect = mbedtls_net_connect(&sHTTPS_ClientConfig.server_fd, CONFIG_OTA_HTTPS_SERVER_COMMON_NAME, CONFIG_OTA_HTTPS_SERVER_PORT, MBEDTLS_NET_PROTO_TCP);
if (i32RetServerConnect != ESP_OK)
{
ESP_LOGE(TAG, "mbedtls_net_connect returned %x", i32RetServerConnect);
}
if(i32RetServerConnect == ESP_OK)
{
mbedtls_ssl_set_bio(&sHTTPS_ClientConfig.ssl, &sHTTPS_ClientConfig.server_fd, mbedtls_net_send, mbedtls_net_recv, NULL);
//Performing the SSL/TLS handshake
while ((i32RetServerConnect = mbedtls_ssl_handshake(&sHTTPS_ClientConfig.ssl)) != 0)
{
if ((i32RetServerConnect != MBEDTLS_ERR_SSL_WANT_READ) && (i32RetServerConnect != MBEDTLS_ERR_SSL_WANT_WRITE))
{
ESP_LOGE(TAG, "mbedtls_ssl_handshake returned 0x%x", i32RetServerConnect);
}
}
}
if(i32RetServerConnect != ESP_OK)
{
i32RetHTTPClient = HTTPS_CLIENT_ERROR_INIT_CONNECT_TWO_SERVER;
}
return i32RetHTTPClient;
}
https_client_ret_t https_clientValidateServer()
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetValidateServer = ESP_OK;
//Verifying peer X.509 certificate
if ((i32RetValidateServer = mbedtls_ssl_get_verify_result(&sHTTPS_ClientConfig.ssl)) != 0)
{
ESP_LOGE(TAG, "Failed to verify peer certificate!");
}
if(i32RetValidateServer != ESP_OK)
{
i32RetHTTPClient = HTTPS_CLIENT_ERROR_INIT_VALIDATE_SERVER;
}
return i32RetHTTPClient;
}
https_client_ret_t https_clientSendRequest()
{
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetSendRequest = ESP_OK;
uint32_t u32WrittenBytes = 0;
bool bWrite = true; //flag to stop loop
//Writing HTTP request
while((u32WrittenBytes < strlen(REQUEST)) && bWrite)
{
i32RetSendRequest = mbedtls_ssl_write(&sHTTPS_ClientConfig.ssl,
(const unsigned char *)REQUEST + u32WrittenBytes,
strlen(REQUEST) - u32WrittenBytes);
if (i32RetSendRequest >= 0)
{
//bytes written
u32WrittenBytes += i32RetSendRequest;
} else if (i32RetSendRequest != MBEDTLS_ERR_SSL_WANT_WRITE && i32RetSendRequest != MBEDTLS_ERR_SSL_WANT_READ) {
ESP_LOGE(TAG, "mbedtls_ssl_write returned 0x%x", i32RetSendRequest);
bWrite = false;
}
}
if(bWrite == false)
{
i32RetHTTPClient = HTTPS_CLIENT_ERROR_INIT_SEND_REQUEST;
}
return i32RetHTTPClient;
}

View File

@ -0,0 +1,75 @@
#ifndef H_HTTPS_CLIENT
#define H_HTTPS_CLIENT
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_netif.h"
#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include "lwip/netdb.h"
#include "lwip/dns.h"
#include "mbedtls/platform.h"
#include "mbedtls/net_sockets.h"
#include "mbedtls/esp_debug.h"
#include "mbedtls/ssl.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/error.h"
#include "mbedtls/certs.h"
#include "esp_crt_bundle.h"
#ifndef CONFIG_OTA_HTTPS_URL
#define CONFIG_OTA_HTTPS_URL "https://exmaple.com/theImage.bin"
#endif
#ifndef CONFIG_OTA_HTTPS_SERVER_PORT
#define CONFIG_OTA_HTTPS_SERVER_PORT "443"
#endif
#ifndef CONFIG_OTA_HTTPS_AUTH
#define CONFIG_OTA_HTTPS_AUTH "base64(user:password)"
#endif
#ifndef CONFIG_OTA_HTTPS_SERVER_COMMON_NAME
#define CONFIG_OTA_HTTPS_SERVER_COMMON_NAME "exmaple.com"
#endif
#define HTTPS_CLIENT_OK 0
#define HTTPS_CLIENT_ERROR -1
#define HTTPS_CLIENT_ERROR_INIT_EMBEDTLS -2
#define HTTPS_CLIENT_ERROR_INIT_CONNECT_TWO_SERVER -3
#define HTTPS_CLIENT_ERROR_INIT_VALIDATE_SERVER -4
#define HTTPS_CLIENT_ERROR_INIT_SEND_REQUEST -5
struct HTTPS_Client
{
mbedtls_entropy_context entropy;
mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_ssl_context ssl;
mbedtls_x509_crt cacert;
mbedtls_ssl_config conf;
mbedtls_net_context server_fd;
};
typedef int32_t https_client_ret_t;
typedef struct HTTPS_Client HTTPS_Client_t;
https_client_ret_t https_clientInitialize();
https_client_ret_t https_clientRetrieveData(char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32BytesRead);
https_client_ret_t https_clientDeinitialize();
#endif /* H_HTTPS_CLIENT */

View File

@ -0,0 +1,22 @@
#ifndef H_MESH_OTA
#define H_MESH_OTA
#include <string.h>
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_mesh.h"
#include "esp_mesh_internal.h"
#include "nvs_flash.h"
#include "driver/gpio.h"
#include "esp_ota_ops.h"
#include "esp_partition.h"
#include "https_client.h"
bool bNewerVersion(const char* pu8Local, const char* pu8Remote);
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber);
esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset);
#endif /* H_MESH_OTA */

View File

@ -0,0 +1,128 @@
#include "mesh_ota.h"
/*
* 999.999.999
* Return true if remote version is newer (higher) than local version
*/
bool bNewerVersion(const char* pu8Local, const char* pu8Remote)
{
char u8LocalTmp[12]; //local version
char u8RemoteTmp[12]; //remote version
char* pu8saveptrLocal; //context for strok_r
char* pu8saveptrRemote; //context for strok_r
bool bReturn = false; //flag to stop loop
uint8_t u8Index = 0; //numbers counter in version string
strcpy(u8LocalTmp, pu8Local); //copy in tmp
strcpy(u8RemoteTmp, pu8Remote); //copy in tmp
char* pu8TokenLocal = strtok_r(u8LocalTmp, ".", &pu8saveptrLocal); //split tokens
char* pu8TokenRemote = strtok_r(u8RemoteTmp, ".", &pu8saveptrRemote); //split tokens
while( (u8Index <= 2) && (bReturn == false)) //loop through tokens
{
u8Index++;
if(atoi(pu8TokenLocal) < atoi(pu8TokenRemote))
{
bReturn = true; //version number difference --> stop loop
}
pu8TokenLocal = strtok_r(NULL, ".", &pu8saveptrLocal); //split tokens
pu8TokenRemote = strtok_r(NULL, ".", &pu8saveptrRemote); //split tokens
}
return bReturn;
}
esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset)
{
/*
Offset value
0 = 0xE9 (first byte in image --> magic byte)
48 = first digit of version number
*/
esp_err_t errReturn = ESP_OK;
bool bImageStartOffsetFound = false;
uint32_t u32DataIndex = 0;
uint32_t u32FirstDotOffset = 0;
uint32_t u32SecondDotOffset = 0;
uint8_t u8FirstDotIndex = 0;
uint8_t u8SecondDotIndex = 0;
*pu32StartOffset = 0U; //reset offset to zero
while((u32DataIndex < *pu32DataLenght) && (bImageStartOffsetFound == false))
{
//search for magic byte
if(pu8Data[u32DataIndex] == 0xe9)
{
//magic byte found
while ((u8FirstDotIndex < 3) && (u32FirstDotOffset == 0))
{
//search first dot in version number
if((u32DataIndex+49+u8FirstDotIndex) < *pu32DataLenght)
{
if((pu8Data[(u32DataIndex+49+u8FirstDotIndex)] == 0x2e))
{
//first dot found
u32FirstDotOffset = (u32DataIndex+49+u8FirstDotIndex);
}
}
u8FirstDotIndex++;
}
while ((u8SecondDotIndex < 3) && (u32SecondDotOffset == 0) && (u32FirstDotOffset != 0))
{
//search first dot in version number
if((u32FirstDotOffset+(u8SecondDotIndex+2)) < *pu32DataLenght)
{
if((pu8Data[(u32FirstDotOffset+(u8SecondDotIndex+2))] == 0x2e))
{
//second dot found
u32SecondDotOffset = (u32FirstDotOffset+(u8SecondDotIndex+2));
}
}
u8SecondDotIndex++;
}
if((u32FirstDotOffset != 0) && (u32SecondDotOffset != 0))
{
//image start found based on magic byte and version number systax
*pu32StartOffset = u32DataIndex; //store image start offset
bImageStartOffsetFound = true;
}
else
{
// this is propably not the magic byte --> reset
u32FirstDotOffset = 0;
u32SecondDotOffset = 0;
u8FirstDotIndex = 0;
u8SecondDotIndex = 0;
}
}
u32DataIndex++;
}
if(bImageStartOffsetFound == false)
{
errReturn = ESP_ERR_NOT_FOUND;
}
return errReturn;
}
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber)
{
uint32_t u32StartOffset;
esp_err_t err = ESP_OK;
strcpy(pc8RemoteVersionNumber, "999.999.999"); //init value
err = errFindImageStart(pu8Data, pu32DataLenght, &u32StartOffset); //get image start offset
if(err == ESP_OK)
{
//image found
strncpy(pc8RemoteVersionNumber, pu8Data+(u32StartOffset+48), 11); //copy version number
pc8RemoteVersionNumber[12] = '\0';
}
return err;
}

View File

@ -0,0 +1,3 @@
idf_component_register(SRC_DIRS "."
INCLUDE_DIRS "."
REQUIRES cmock mesh_ota)

View File

@ -0,0 +1,7 @@
# This is the minimal test component makefile.
#
# The following line is needed to force the linker to include all the object
# files into the application, even if the functions in these object files
# are not referenced from outside (which is usually the case for unit tests).
#
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive

View File

@ -0,0 +1,171 @@
#ifndef H_TEST_IMAGE_HEX
#define H_TEST_IMAGE_HEX
//with http response + 0.0.1
char dataWithHttpRespone0_0_1[] =
{
0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x2f, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x32, 0xd, 0xa, 0x44,
0x61, 0x74, 0x65, 0x3a, 0x20, 0x54, 0x68, 0x75, 0x2c, 0x20, 0x30, 0x37, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x33, 0x3a, 0x34, 0x38, 0x3a, 0x32, 0x36, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x31, 0x31, 0x34, 0x31, 0x30, 0x30, 0xd, 0xa, 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x3a, 0x20, 0x53, 0x61, 0x74, 0x2c,
0x20, 0x30, 0x32, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x32, 0x30, 0x3a, 0x34, 0x31, 0x3a, 0x31, 0x31, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b,
0x65, 0x65, 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0xd, 0xa, 0x45, 0x54, 0x61, 0x67, 0x3a, 0x20, 0x22, 0x35, 0x66, 0x66, 0x30, 0x64, 0x61, 0x36, 0x37, 0x2d, 0x31, 0x30, 0x66, 0x66, 0x66, 0x34, 0x22, 0xd, 0xa, 0x53, 0x74, 0x72, 0x69,
0x63, 0x74, 0x2d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, 0x3d, 0x33, 0x31, 0x35, 0x33, 0x36, 0x30, 0x30, 0x30, 0xd,
0xa, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0xd, 0xa, 0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xe4, 0x55, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x31, 0x30, 0x3a, 0x32, 0x37, 0x3a, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x32, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0xaa, 0xfc, 0x75, 0xd4, 0x9e, 0xd8, 0x9, 0xc1, 0x11, 0x49, 0x59, 0xa4, 0xbb, 0x16,
0xb8, 0x74, 0x14, 0xee, 0x2, 0xe7, 0x82, 0xe6, 0x2b, 0x96, 0x19, 0xb7, 0xe8, 0x2f, 0x41, 0x9e, 0x7e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29,
0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b, 0x30,
0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61,
0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61,
0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70,
0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20,
0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46,
0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x5f, 0x75,
0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f, 0x68, 0x6f, 0x6d,
0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74
};
//without http response + 0.0.1
char dataWithoutHttpRespone0_0_1[] =
{
0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xe4, 0x55, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x31, 0x30, 0x3a, 0x32, 0x37, 0x3a, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x32, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0xaa, 0xfc, 0x75, 0xd4, 0x9e, 0xd8, 0x9, 0xc1, 0x11, 0x49, 0x59, 0xa4, 0xbb, 0x16,
0xb8, 0x74, 0x14, 0xee, 0x2, 0xe7, 0x82, 0xe6, 0x2b, 0x96, 0x19, 0xb7, 0xe8, 0x2f, 0x41, 0x9e, 0x7e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29,
0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b, 0x30,
0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61,
0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61,
0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70,
0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20,
0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46,
0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x5f, 0x75,
0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f, 0x68, 0x6f, 0x6d,
0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74
};
//without http response + 9999.999.999
char dataWithoutHttpRespone999_999_999[] =
{
0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xec, 0x44, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x34, 0x3a, 0x35, 0x39, 0x3a, 0x33, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x36, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x75, 0xf1, 0xa7, 0x5d, 0x78, 0xac, 0xe3, 0x63, 0x3f, 0x1a, 0x81, 0x90, 0x34, 0x2c,
0xf7, 0xb3, 0x33, 0x63, 0xa4, 0x7c, 0x1e, 0x98, 0xf6, 0x74, 0xd0, 0xcf, 0xdc, 0x51, 0x68, 0x15, 0xcd, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b,
0x30, 0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74,
0x61, 0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72,
0x65, 0x61, 0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26,
0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65,
0x78, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f,
0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
};
//with http response + 999.999.999
char dataWithHttpRespone999_999_999[] =
{
0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x2f, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x32, 0xd, 0xa, 0x44,
0x61, 0x74, 0x65, 0x3a, 0x20, 0x54, 0x68, 0x75, 0x2c, 0x20, 0x30, 0x37, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x35, 0x3a, 0x31, 0x33, 0x3a, 0x32, 0x39, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x31, 0x31, 0x34, 0x31, 0x30, 0x30, 0xd, 0xa, 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x3a, 0x20, 0x57, 0x65, 0x64, 0x2c,
0x20, 0x30, 0x36, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x33, 0x3a, 0x35, 0x39, 0x3a, 0x35, 0x33, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b,
0x65, 0x65, 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0xd, 0xa, 0x45, 0x54, 0x61, 0x67, 0x3a, 0x20, 0x22, 0x35, 0x66, 0x66, 0x35, 0x63, 0x32, 0x35, 0x39, 0x2d, 0x31, 0x30, 0x66, 0x66, 0x66, 0x34, 0x22, 0xd, 0xa, 0x53, 0x74, 0x72, 0x69,
0x63, 0x74, 0x2d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, 0x3d, 0x33, 0x31, 0x35, 0x33, 0x36, 0x30, 0x30, 0x30, 0xd,
0xa, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0xd, 0xa, 0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xec, 0x44, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x34, 0x3a, 0x35, 0x39, 0x3a, 0x33, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x36, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x75, 0xf1, 0xa7, 0x5d, 0x78, 0xac, 0xe3, 0x63, 0x3f, 0x1a, 0x81, 0x90, 0x34, 0x2c,
0xf7, 0xb3, 0x33, 0x63, 0xa4, 0x7c, 0x1e, 0x98, 0xf6, 0x74, 0xd0, 0xcf, 0xdc, 0x51, 0x68, 0x15, 0xcd, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b,
0x30, 0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74,
0x61, 0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72,
0x65, 0x61, 0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26,
0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65,
0x78, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f,
0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
};
//with http response + 999.9.999
char dataWithHttpRespone999_9_999[] =
{
0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x2f, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x32, 0xd, 0xa, 0x44,
0x61, 0x74, 0x65, 0x3a, 0x20, 0x54, 0x68, 0x75, 0x2c, 0x20, 0x30, 0x37, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x35, 0x3a, 0x31, 0x33, 0x3a, 0x32, 0x39, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x34, 0x31, 0x30, 0x30, 0xd, 0xa, 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x3a, 0x20, 0x57, 0x65, 0x64, 0x2c,
0x20, 0x30, 0x36, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x33, 0x3a, 0x35, 0x39, 0x3a, 0x35, 0x33, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b,
0x65, 0x65, 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0xd, 0xa, 0x45, 0x54, 0x61, 0x67, 0x3a, 0x20, 0x22, 0x35, 0x66, 0x66, 0x35, 0x63, 0x32, 0x35, 0x39, 0x2d, 0x31, 0x30, 0x66, 0x66, 0x66, 0x34, 0x22, 0xd, 0xa, 0x53, 0x74, 0x72, 0x69,
0x63, 0x74, 0x2d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, 0x3d, 0x33, 0x31, 0x35, 0x33, 0x36, 0x30, 0x30, 0x30, 0xd,
0xa, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0xd, 0xa, 0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xec, 0x44, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x34, 0x3a, 0x35, 0x39, 0x3a, 0x33, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x36, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x75, 0xf1, 0xa7, 0x5d, 0x78, 0xac, 0xe3, 0x63, 0x3f, 0x1a, 0x81, 0x90, 0x34, 0x2c,
0xf7, 0xb3, 0x33, 0x63, 0xa4, 0x7c, 0x1e, 0x98, 0xf6, 0x74, 0xd0, 0xcf, 0xdc, 0x51, 0x68, 0x15, 0xcd, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b,
0x30, 0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74,
0x61, 0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72,
0x65, 0x61, 0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26,
0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65,
0x78, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f,
0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
};
//with http response + 999.99.999
char dataWithHttpRespone999_99_999[] =
{
0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x2f, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x32, 0xd, 0xa, 0x44,
0x61, 0x74, 0x65, 0x3a, 0x20, 0x54, 0x68, 0x75, 0x2c, 0x20, 0x30, 0x37, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x35, 0x3a, 0x31, 0x33, 0x3a, 0x32, 0x39, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x31, 0x31, 0x34, 0x31, 0x30, 0x30, 0xd, 0xa, 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x3a, 0x20, 0x57, 0x65, 0x64, 0x2c,
0x20, 0x30, 0x36, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x32, 0x31, 0x20, 0x31, 0x33, 0x3a, 0x35, 0x39, 0x3a, 0x35, 0x33, 0x20, 0x47, 0x4d, 0x54, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b,
0x65, 0x65, 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0xd, 0xa, 0x45, 0x54, 0x61, 0x67, 0x3a, 0x20, 0x22, 0x35, 0x66, 0x66, 0x35, 0x63, 0x32, 0x35, 0x39, 0x2d, 0x31, 0x30, 0x66, 0x66, 0x66, 0x34, 0x22, 0xd, 0xa, 0x53, 0x74, 0x72, 0x69,
0x63, 0x74, 0x2d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, 0x3d, 0x33, 0x31, 0x35, 0x33, 0x36, 0x30, 0x30, 0x30, 0xd,
0xa, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd, 0xa, 0xd, 0xa, 0xe9, 0x7, 0x2, 0x20, 0x5c, 0x12, 0x8, 0x40, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x40, 0x3f, 0xec, 0x44, 0x3, 0x0, 0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x2e, 0x39, 0x39, 0x39, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x6f, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x34, 0x3a, 0x35, 0x39, 0x3a, 0x33, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x61, 0x6e, 0x20, 0x20, 0x36, 0x20, 0x32, 0x30, 0x32, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x34, 0x2e, 0x33, 0x2d, 0x64,
0x65, 0x76, 0x2d, 0x31, 0x39, 0x30, 0x31, 0x2d, 0x67, 0x31, 0x37, 0x38, 0x62, 0x31, 0x32, 0x32, 0x63, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x75, 0xf1, 0xa7, 0x5d, 0x78, 0xac, 0xe3, 0x63, 0x3f, 0x1a, 0x81, 0x90, 0x34, 0x2c,
0xf7, 0xb3, 0x33, 0x63, 0xa4, 0x7c, 0x1e, 0x98, 0xf6, 0x74, 0xd0, 0xcf, 0xdc, 0x51, 0x68, 0x15, 0xcd, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x61, 0x72, 0x67, 0x73, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x21, 0x1b, 0x5b,
0x30, 0x6d, 0xa, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64, 0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74,
0x61, 0x73, 0x6b, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26, 0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x72,
0x65, 0x61, 0x64, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x21, 0x22, 0x0, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x63, 0x0, 0x0, 0x1b, 0x5b, 0x30, 0x3b, 0x33, 0x31, 0x6d, 0x45, 0x20, 0x28, 0x25, 0x64,
0x29, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x25, 0x73, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x21, 0x1b, 0x5b, 0x30, 0x6d, 0xa, 0x0, 0x0, 0x0, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x26, 0x26,
0x20, 0x22, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x21, 0x22, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65,
0x78, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x0, 0x0, 0x74, 0x6c, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x2f,
0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
};
#endif /* H_TEST_IMAGE_HEX */

View File

@ -0,0 +1,223 @@
#include <limits.h>
#include "unity.h"
#include "mesh_ota.h"
#include "test_image_hex.h"
// ### ### ### distinguish newer image version ### ### ###
TEST_CASE("Remote got patch", "[distinguish newer image version]")
{
char versionLocal[] = "1.2.3"; //current running image
char versionRemote[] = "1.2.4"; //image from server
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Remote got minor", "[distinguish newer image version]")
{
char versionLocal[] = "1.2.3"; //current running image
char versionRemote[] = "1.3.3"; //image from server
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Remote got major", "[distinguish newer image version]")
{
char versionLocal[] = "1.2.3"; //current running image
char versionRemote[] = "2.2.3"; //image from server
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Local got patch", "[distinguish newer image version]")
{
char versionLocal[] = "1.2.4"; //current running image
char versionRemote[] = "1.2.3"; //image from server
TEST_ASSERT_FALSE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Local got minor", "[distinguish newer image version]")
{
char versionLocal[] = "1.3.3"; //current running image
char versionRemote[] = "1.2.3"; //image from server
TEST_ASSERT_FALSE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Local got major", "[distinguish newer image version]")
{
char versionLocal[] = "2.2.3"; //current running image
char versionRemote[] = "1.2.3"; //image from server
TEST_ASSERT_FALSE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Remote got alpha and patch", "[distinguish newer image version]")
{
char versionLocal[] = "2.2.3"; //current running image
char versionRemote[] = "a2.2.4"; //image from server
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
TEST_CASE("Remote got max", "[distinguish newer image version]")
{
char versionLocal[] = "2.2.3"; //current running image
char versionRemote[] = "999.999.999"; //image from server
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
// ### ### ### find start offset in firmware image ### ### ###
TEST_CASE("with http response + 0.0.1", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithHttpRespone0_0_1)/sizeof(dataWithHttpRespone0_0_1[0]);
esp_err_t err = errFindImageStart(dataWithHttpRespone0_0_1, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(305, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("without http response + 0.0.1", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithoutHttpRespone0_0_1)/sizeof(dataWithoutHttpRespone0_0_1[0]);
esp_err_t err = errFindImageStart(dataWithoutHttpRespone0_0_1, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(0, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("with http response + 999.999.999", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithHttpRespone999_999_999)/sizeof(dataWithHttpRespone999_999_999[0]);
esp_err_t err = errFindImageStart(dataWithHttpRespone999_999_999, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(305, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("without http response + 999.999.999", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithoutHttpRespone999_999_999)/sizeof(dataWithoutHttpRespone999_999_999[0]);
esp_err_t err = errFindImageStart(dataWithoutHttpRespone999_999_999, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(0, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("with http response + 999.9.999", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithHttpRespone999_9_999)/sizeof(dataWithHttpRespone999_9_999[0]);
esp_err_t err = errFindImageStart(dataWithHttpRespone999_9_999, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(302, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("with http response + 999.99.999", "[find start offset in firmware image]")
{
uint32_t u32StartOffset;
uint32_t u32DataLenght = sizeof(dataWithHttpRespone999_99_999)/sizeof(dataWithHttpRespone999_99_999[0]);
esp_err_t err = errFindImageStart(dataWithHttpRespone999_99_999, &u32DataLenght, &u32StartOffset);
if(err == ESP_OK)
{
TEST_ASSERT_EQUAL_INT(299, u32StartOffset);
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
// ### ### ### distinguish newer image version ### ### ###
TEST_CASE("extract version 0.0.1", "[extract image version number]")
{
char versionLocal[] = "0.0.0"; //current running image
char versionRemote[12];//image from server
uint32_t u32DataLenght = sizeof(dataWithHttpRespone0_0_1)/sizeof(dataWithHttpRespone0_0_1[0]);
esp_err_t err = errExtractVersionNumber(dataWithHttpRespone0_0_1, &u32DataLenght, versionRemote);
if(err == ESP_OK)
{
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("extract version 999.999.999", "[extract image version number]")
{
char versionLocal[] = "0.0.0"; //current running image
char versionRemote[12];//image from server
uint32_t u32DataLenght = sizeof(dataWithHttpRespone999_999_999)/sizeof(dataWithHttpRespone999_999_999[0]);
esp_err_t err = errExtractVersionNumber(dataWithHttpRespone999_999_999, &u32DataLenght, versionRemote);
if(err == ESP_OK)
{
TEST_ASSERT_TRUE( bNewerVersion(versionLocal, versionRemote) );
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}
TEST_CASE("extract version 999.99.999", "[extract image version number]")
{
char versionLocal[] = "999.100.999"; //current running image
char versionRemote[12];//image from server
uint32_t u32DataLenght = sizeof(dataWithHttpRespone999_99_999)/sizeof(dataWithHttpRespone999_99_999[0]);
esp_err_t err = errExtractVersionNumber(dataWithHttpRespone999_99_999, &u32DataLenght, versionRemote);
if(err == ESP_OK)
{
TEST_ASSERT_FALSE( bNewerVersion(versionLocal, versionRemote) );
}
else
{
TEST_ASSERT_EQUAL_INT(ESP_OK, err);
}
}

View File

@ -1,2 +1,2 @@
idf_component_register(SRCS "mesh_main.c"
idf_component_register(SRCS "main.c"
INCLUDE_DIRS ".")

View File

@ -1,4 +1,4 @@
menu "Example Configuration"
menu "Mesh OTA Configuration"
choice
bool "Mesh Topology"
@ -124,22 +124,17 @@ menu "Example Configuration"
help
Authentication mode.
config WIFI_AUTH_OPEN
bool "WIFI_AUTH_OPEN"
config WIFI_AUTH_WPA_PSK
bool "WIFI_AUTH_WPA_PSK"
config WIFI_AUTH_WPA2_PSK
bool "WIFI_AUTH_WPA2_PSK"
config WIFI_AUTH_WPA_WPA2_PSK
bool "WIFI_AUTH_WPA_WPA2_PSK"
config WIFI_AUTH_WPA2_ENTERPRISE
bool "WIFI_AUTH_WPA2_ENTERPRISE"
endchoice
config MESH_AP_AUTHMODE
int
default 0 if WIFI_AUTH_OPEN
default 2 if WIFI_AUTH_WPA_PSK
default 3 if WIFI_AUTH_WPA2_PSK
default 4 if WIFI_AUTH_WPA_WPA2_PSK
default 5 if WIFI_AUTH_WPA2_ENTERPRISE
help
Mesh AP authentication mode.
@ -162,4 +157,29 @@ menu "Example Configuration"
default 50
help
The number of devices over the network(max: 300).
config OTA_HTTPS_SERVER_COMMON_NAME
string "Common name OTA server"
default "exmaple.com"
help
Fully Qualified Domain Name used in the certificate.
config OTA_HTTPS_SERVER_PORT
string "Server port"
default "443"
help
HTTPS webserver port
config OTA_HTTPS_URL
string "URL to ota image"
default "https://exmaple.com/theImage.bin"
help
Uniform Resource Locator to the image file
config OTA_HTTPS_AUTH
string "HTTPS authentication"
default "base64(user:password)"
help
HTTPS basic auth using base64 decoded "user:password"
endmenu

View File

@ -11,13 +11,11 @@
#include "esp_ota_ops.h"
#include "esp_partition.h"
#include "mesh_ota.h"
#define RX_SIZE (1234)
#define TX_SIZE (1234)
static const char *MESH_TAG = "mesh_main";
static const uint8_t MESH_ID[6] = { 0x77, 0x77, 0x77, 0x77, 0x77, 0x77};
static uint8_t tx_buf[TX_SIZE] = { 0, };
@ -28,8 +26,10 @@ static uint8_t ownMAC[6];
static int mesh_layer = -1;
static esp_netif_t *netif_sta = NULL;
struct ota_mesh_packet {
enum ota_mesh_packet_type {
struct ota_mesh_packet
{
enum ota_mesh_packet_type
{
APP_Version_Request,
APP_Version_Response,
OTA_Data,
@ -40,8 +40,6 @@ struct ota_mesh_packet {
uint8_t au8Payload[1024];
};
/*******************************************************
* Function Declarations
*******************************************************/
@ -52,7 +50,6 @@ esp_err_t esp_mesh_send_packet(mesh_addr_t* dest, struct ota_mesh_packet* packet
* Function Definitions
*******************************************************/
esp_err_t esp_mesh_ota_send(mesh_addr_t* dest)
{
esp_err_t err = ESP_OK;
@ -61,7 +58,8 @@ esp_err_t esp_mesh_ota_send(mesh_addr_t* dest)
const esp_partition_t * currentPartition = esp_ota_get_boot_partition();
if((*currentPartition).subtype == 0) {
if((*currentPartition).subtype == 0)
{
int data_read = 0;
@ -157,14 +155,13 @@ esp_err_t esp_mesh_ota_receive(mesh_addr_t* dest, struct ota_mesh_packet* packet
return err;
}
//returns true if MAC address is equal
bool esp_mesh_check_MAC_Equality(uint8_t* aMAC, uint8_t* bMAC)
{
for (uint8_t index = 0; index < 6; index++)
{
if(aMAC[index] != bMAC[index]) {
if(aMAC[index] != bMAC[index])
{
return false;
}
}
@ -216,10 +213,12 @@ void esp_mesh_p2p_rx_main(void *arg)
data.data = rx_buf;
data.size = RX_SIZE;
while (true) {
while (true)
{
data.size = RX_SIZE;
err = esp_mesh_recv(&from, &data, portMAX_DELAY, &flag, NULL, 0);
if (err != ESP_OK || !data.size) {
if (err != ESP_OK || !data.size)
{
ESP_LOGE(MESH_TAG, "err:0x%x, size:%d", err, data.size);
continue;
}
@ -266,7 +265,8 @@ void esp_mesh_p2p_rx_main(void *arg)
esp_err_t esp_mesh_comm_p2p_start(void)
{
static bool is_comm_p2p_started = false;
if (!is_comm_p2p_started) {
if (!is_comm_p2p_started)
{
is_comm_p2p_started = true;
xTaskCreate(esp_mesh_p2p_rx_main, "MPRX", 7000, NULL, 5, NULL);
}
@ -279,8 +279,10 @@ void mesh_event_handler(void *arg, esp_event_base_t event_base,
mesh_addr_t id = {0,};
static uint16_t last_layer = 0;
switch (event_id) {
case MESH_EVENT_STARTED: {
switch (event_id)
{
case MESH_EVENT_STARTED:
{
esp_mesh_get_id(&id);
ESP_LOGI(MESH_TAG, "<MESH_EVENT_MESH_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
is_mesh_connected = false;
@ -480,13 +482,99 @@ void ip_event_handler(void *arg, esp_event_base_t event_base,
}
static void test(void *pvParameters)
{
esp_err_t err;
uint32_t u32BufferLenght = 1024U;
char buffer[1024U];
uint32_t u32BytesRead = 0;
char pcRemoteVersionNumber[12];
const esp_partition_t * currentPartition;
const esp_partition_t * otaPartition;
static esp_ota_handle_t otaHandle;
uint32_t u32StartOffset;
esp_app_desc_t otaPartitionDesc;
ESP_LOGI(MESH_TAG, "Hello World");
currentPartition = esp_ota_get_boot_partition();
ESP_LOGI(MESH_TAG, "Type: %d", (*currentPartition).subtype);
ESP_LOGI(MESH_TAG, "Start address: %d", (*currentPartition).address);
ESP_LOGI(MESH_TAG, "Size: %d", (*currentPartition).size);
ESP_LOGI(MESH_TAG, "Encrypted: %d", (*currentPartition).encrypted);
esp_app_desc_t curPartitionDesc;
err = esp_ota_get_partition_description(currentPartition, &curPartitionDesc);
ESP_ERROR_CHECK(err);
ESP_LOGI(MESH_TAG, "currentPartition project_name: %s", (curPartitionDesc).project_name);
ESP_LOGI(MESH_TAG, "currentPartition version: %s", (curPartitionDesc).version);
ESP_LOGI(MESH_TAG, "currentPartition Timestamp: %s %s", (curPartitionDesc).date, (curPartitionDesc).time);
https_clientInitialize();
https_clientRetrieveData(buffer, &u32BufferLenght, &u32BytesRead);
ESP_LOGI(MESH_TAG, "Data received: %i", u32BytesRead);
err = errExtractVersionNumber(buffer, &u32BytesRead, pcRemoteVersionNumber);
if(err == ESP_OK)
{
if(bNewerVersion((curPartitionDesc).version, pcRemoteVersionNumber))
{
ESP_LOGI(MESH_TAG, "Newer Version available");
//write ota
otaPartition= esp_ota_get_next_update_partition(currentPartition);
err = errFindImageStart(buffer, &u32BufferLenght, &u32StartOffset);
ESP_LOGI(MESH_TAG, "first byte offset: %i", u32StartOffset);
ESP_LOGI(MESH_TAG, "first byte: %x", buffer[u32StartOffset]);
err = esp_ota_begin(otaPartition, OTA_SIZE_UNKNOWN, &otaHandle);
ESP_ERROR_CHECK(err);
do
{
ESP_LOGI(MESH_TAG, "OTA-Data written: %i", u32BytesRead);
err = esp_ota_write(otaHandle, (const void*) buffer+u32StartOffset, (u32BytesRead-u32StartOffset));
u32StartOffset = 0U;
https_clientRetrieveData(buffer, &u32BufferLenght, &u32BytesRead);
}
while (u32BytesRead > 0);
err = esp_ota_end(otaHandle);
ESP_ERROR_CHECK(err);
err = esp_ota_get_partition_description(otaPartition, &otaPartitionDesc);
ESP_ERROR_CHECK(err);
ESP_LOGI(MESH_TAG, "otaPartition project_name: %s", (otaPartitionDesc).project_name);
err = esp_ota_set_boot_partition(otaPartition);
ESP_ERROR_CHECK(err);
//esp_restart();
}
else
{
ESP_LOGI(MESH_TAG, "NO newer Version available");
}
}
else
{
ESP_LOGI(MESH_TAG, "errExtractVersionNumber failed: %i", err);
}
https_clientDeinitialize();
ESP_LOGI(MESH_TAG, "\nend of task\n");
while(1)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main(void)
{
ESP_LOGI(MESH_TAG, "hardcoded: 0.0.1");
/*
esp_err_t err;
err = nvs_flash_erase();
if(err != ESP_OK){
ESP_LOGI(MESH_TAG, "Error: %x", err);
while(1){
@ -497,13 +585,6 @@ void app_main(void)
ESP_ERROR_CHECK(nvs_flash_init());
ESP_LOGI(MESH_TAG, "Hello World");
const esp_partition_t * currentPartition = esp_ota_get_boot_partition();
ESP_LOGI(MESH_TAG, "Type: %d", (*currentPartition).subtype);
ESP_LOGI(MESH_TAG, "Start address: %d", (*currentPartition).address);
ESP_LOGI(MESH_TAG, "Size: %d", (*currentPartition).size); //passt
ESP_LOGI(MESH_TAG, "Encrypted: %d", (*currentPartition).encrypted);
/* tcpip initialization */
ESP_ERROR_CHECK(esp_netif_init());
@ -566,41 +647,14 @@ void app_main(void)
esp_mesh_is_root_fixed() ? "root fixed" : "root not fixed",
esp_mesh_get_topology(), esp_mesh_get_topology() ? "(chain)":"(tree)", esp_mesh_is_ps_enabled());
/* START OTA MESH */
//if (esp_mesh_is_root()) {
ESP_LOGI(MESH_TAG, "ROOT NODE");
//https ota
// while(1){
for(;;) {
for(;;)
{
if(gpio_get_level(0) == 0){
break;
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
mesh_addr_t children[CONFIG_MESH_ROUTE_TABLE_SIZE];
uint16_t u16ChildrenSize;
esp_mesh_get_Children(children, &u16ChildrenSize);
ESP_LOGI(MESH_TAG, "ChildrenSize: %i", u16ChildrenSize);
struct ota_mesh_packet packet;
packet.type=APP_Version_Request;
//packet.au8Payload[0] = 42;
for (uint16_t i = 0; i < u16ChildrenSize; i++)
{
ESP_ERROR_CHECK (esp_mesh_send_packet(&children[i], &packet));
}
// }//end while 1
//} // end root node
xTaskCreate(&test, "test_task", 8192, NULL, 5, NULL);
}

View File

@ -3,6 +3,5 @@
nvs, data, nvs, , 0x4000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
factory, app, factory, , 1M,
ota_0, app, ota_0, , 1M,
ota_1, app, ota_1, , 1M,
ota_0, app, ota_0, , 1500K,
ota_1, app, ota_1, , 1500K,

1 # Name, Type, SubType, Offset, Size, Flags
3 nvs, data, nvs, , 0x4000,
4 otadata, data, ota, , 0x2000,
5 phy_init, data, phy, , 0x1000,
6 factory, app, factory, , 1M, ota_0, app, ota_0, , 1500K,
7 ota_0, app, ota_0, , 1M, ota_1, app, ota_1, , 1500K,
ota_1, app, ota_1, , 1M,

View File

@ -31,7 +31,8 @@ CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
CONFIG_APP_COMPILE_TIME_DATE=y
# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
CONFIG_APP_PROJECT_VER_FROM_CONFIG=y
CONFIG_APP_PROJECT_VER="0.0.1"
CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16
# end of Application manager
@ -66,8 +67,16 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
#
# Security features
#
# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
CONFIG_SECURE_SIGNED_ON_BOOT=y
CONFIG_SECURE_SIGNED_ON_UPDATE=y
CONFIG_SECURE_SIGNED_APPS=y
CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT=y
CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME=y
CONFIG_SECURE_SIGNED_ON_BOOT_NO_SECURE_BOOT=y
CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT=y
# CONFIG_SECURE_BOOT is not set
CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y
CONFIG_SECURE_BOOT_SIGNING_KEY="secure_boot_signing_key.pem"
# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
# end of Security features
@ -119,12 +128,12 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_OFFSET=0x8000
CONFIG_PARTITION_TABLE_OFFSET=0x10000
CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
#
# Example Configuration
# Mesh OTA Configuration
#
CONFIG_MESH_TOPO_TREE=y
# CONFIG_MESH_TOPO_CHAIN is not set
@ -141,17 +150,19 @@ CONFIG_MESH_PS_NETWORK_DUTY_APPLIED_ENTIRE=y
CONFIG_MESH_PS_NWK_DUTY_RULE=0
CONFIG_MESH_MAX_LAYER=6
CONFIG_MESH_CHANNEL=13
CONFIG_MESH_ROUTER_SSID="nicht verbunden"
CONFIG_MESH_ROUTER_PASSWD="flamingo"
# CONFIG_WIFI_AUTH_OPEN is not set
# CONFIG_WIFI_AUTH_WPA_PSK is not set
CONFIG_MESH_ROUTER_SSID="labNet"
CONFIG_MESH_ROUTER_PASSWD="12345678"
CONFIG_WIFI_AUTH_WPA2_PSK=y
# CONFIG_WIFI_AUTH_WPA_WPA2_PSK is not set
# CONFIG_WIFI_AUTH_WPA2_ENTERPRISE is not set
CONFIG_MESH_AP_AUTHMODE=3
CONFIG_MESH_AP_PASSWD="MAP_PASSWD"
CONFIG_MESH_AP_PASSWD="qaws1234"
CONFIG_MESH_AP_CONNECTIONS=6
CONFIG_MESH_ROUTE_TABLE_SIZE=50
# end of Example Configuration
CONFIG_OTA_HTTPS_SERVER_COMMON_NAME="ota.hendrikschutter.com"
CONFIG_OTA_HTTPS_SERVER_PORT="443"
CONFIG_OTA_HTTPS_URL="https://ota.hendrikschutter.com/mesh_ota.bin"
CONFIG_OTA_HTTPS_AUTH="b3RhOnB3"
# end of Mesh OTA Configuration
#
# Compiler options
@ -1026,7 +1037,7 @@ CONFIG_WS_BUFFER_SIZE=1024
#
CONFIG_UNITY_ENABLE_FLOAT=y
CONFIG_UNITY_ENABLE_DOUBLE=y
# CONFIG_UNITY_ENABLE_COLOR is not set
CONFIG_UNITY_ENABLE_COLOR=y
CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y
# CONFIG_UNITY_ENABLE_FIXTURE is not set
# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set

View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIPADEvh72EIFEGixpoyTcMq6k3TdS5vYytoCd/aFdcOUoAoGCCqGSM49
AwEHoUQDQgAE3LyvSuovRT0+O9V8fcjvdHT1vaS2RRs6Zh7RKd3LemhOR+ZZ7KmE
7QZiCmbVxMsano1h8rJG0m4PSv/eQ03K8A==
-----END EC PRIVATE KEY-----

16
test/CMakeLists.txt Normal file
View File

@ -0,0 +1,16 @@
# This is the project CMakeLists.txt file for the test subproject
cmake_minimum_required(VERSION 3.5)
# Include the components directory of the main application:
#
set(EXTRA_COMPONENT_DIRS "../components")
# Set the components to include the tests for.
# This can be overriden from CMake cache:
# - when invoking CMake directly: cmake -D TEST_COMPONENTS="xxxxx" ..
# - when using idf.py: idf.py -T xxxxx build
#
set(TEST_COMPONENTS "mesh_ota" CACHE STRING "List of components to test")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(unit_test_mesh_ota)

17
test/Makefile Normal file
View File

@ -0,0 +1,17 @@
#
# This is a project Makefile for the test subproject.
#
PROJECT_NAME := unit_test_mesh_ota
# Include the components directory of the main application:
#
EXTRA_COMPONENT_DIRS := $(realpath ../components)
# Set the components to include the tests for.
# This can be overriden from the command line
# (e.g. 'make TEST_COMPONENTS=xxxx flash monitor')
#
TEST_COMPONENTS ?= mesh_ota
include $(IDF_PATH)/make/project.mk

2
test/main/CMakeLists.txt Normal file
View File

@ -0,0 +1,2 @@
idf_component_register(SRCS "unit_test_mesh_ota.c"
INCLUDE_DIRS ".")

0
test/main/component.mk Normal file
View File

View File

@ -0,0 +1,58 @@
/* Example test application for testable component.
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include "unity.h"
static void print_banner(const char* text);
void app_main(void)
{
/* These are the different ways of running registered tests.
* In practice, only one of them is usually needed.
*
* UNITY_BEGIN() and UNITY_END() calls tell Unity to print a summary
* (number of tests executed/failed/ignored) of tests executed between these calls.
*/
/*
print_banner("Executing one test by its name");
UNITY_BEGIN();
unity_run_test_by_name("Mean of an empty array is zero");
UNITY_END();
print_banner("Running tests with [mean] tag");
UNITY_BEGIN();
unity_run_tests_by_tag("[mean]", false);
UNITY_END();
print_banner("Running tests without [fails] tag");
UNITY_BEGIN();
unity_run_tests_by_tag("[fails]", true);
UNITY_END();
*/
print_banner("Running all the registered tests");
UNITY_BEGIN();
unity_run_all_tests();
UNITY_END();
print_banner("Starting interactive test menu");
/* This function will not return, and will be busy waiting for UART input.
* Make sure that task watchdog is disabled if you use this function.
*/
unity_run_menu();
}
static void print_banner(const char* text)
{
printf("\n#### %s #####\n\n", text);
}

View File

@ -2,6 +2,7 @@
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) Project Configuration
#
CONFIG_IDF_CMAKE=y
CONFIG_IDF_TARGET_ARCH_XTENSA=y
CONFIG_IDF_TARGET="esp32"
CONFIG_IDF_TARGET_ESP32=y
@ -11,8 +12,6 @@ CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000
# SDK tool configuration
#
CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-"
CONFIG_SDK_PYTHON="python"
CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES=y
# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set
# end of SDK tool configuration
@ -75,15 +74,7 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
#
# Serial flasher config
#
CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0"
CONFIG_ESPTOOLPY_BAUD_115200B=y
# CONFIG_ESPTOOLPY_BAUD_230400B is not set
# CONFIG_ESPTOOLPY_BAUD_921600B is not set
# CONFIG_ESPTOOLPY_BAUD_2MB is not set
# CONFIG_ESPTOOLPY_BAUD_OTHER is not set
CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200
CONFIG_ESPTOOLPY_BAUD=115200
CONFIG_ESPTOOLPY_COMPRESSED=y
# CONFIG_ESPTOOLPY_NO_STUB is not set
# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
@ -96,11 +87,11 @@ CONFIG_ESPTOOLPY_FLASHFREQ_40M=y
# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
CONFIG_ESPTOOLPY_FLASHFREQ="40m"
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
CONFIG_ESPTOOLPY_FLASHSIZE="4MB"
CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
CONFIG_ESPTOOLPY_BEFORE_RESET=y
# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
@ -120,36 +111,6 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200
CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
# end of Serial flasher config
#
# Example Configuration
#
CONFIG_MESH_TOPO_TREE=y
# CONFIG_MESH_TOPO_CHAIN is not set
CONFIG_MESH_TOPOLOGY=0
CONFIG_MESH_ENABLE_PS=y
CONFIG_MESH_PS_DEV_DUTY_TYPE_REQUEST=y
# CONFIG_MESH_PS_DEV_DUTY_TYPE_DEMAND is not set
CONFIG_MESH_PS_DEV_DUTY_TYPE=1
CONFIG_MESH_PS_DEV_DUTY=12
CONFIG_MESH_PS_NWK_DUTY=12
CONFIG_MESH_PS_NWK_DUTY_DURATION=-1
CONFIG_MESH_PS_NETWORK_DUTY_APPLIED_ENTIRE=y
# CONFIG_MESH_PS_NETWORK_DUTY_APPLIED_UPLINK is not set
CONFIG_MESH_PS_NWK_DUTY_RULE=0
CONFIG_MESH_MAX_LAYER=6
CONFIG_MESH_CHANNEL=13
CONFIG_MESH_ROUTER_SSID="nicht verbunden"
CONFIG_MESH_ROUTER_PASSWD="flamingo"
# CONFIG_WIFI_AUTH_OPEN is not set
# CONFIG_WIFI_AUTH_WPA_PSK is not set
CONFIG_WIFI_AUTH_WPA2_PSK=y
# CONFIG_WIFI_AUTH_WPA_WPA2_PSK is not set
CONFIG_MESH_AP_AUTHMODE=3
CONFIG_MESH_AP_PASSWD="MAP_PASSWD"
CONFIG_MESH_AP_CONNECTIONS=6
CONFIG_MESH_ROUTE_TABLE_SIZE=50
# end of Example Configuration
#
# Partition Table
#
@ -338,36 +299,6 @@ CONFIG_ESP32_XTAL_FREQ=40
CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5
# end of ESP32-specific
#
# Memory protection
#
CONFIG_ESP32S2_MEMPROT_FEATURE=y
CONFIG_ESP32S2_MEMPROT_FEATURE_LOCK=y
# end of Memory protection
#
# Cache config
#
# end of Cache config
CONFIG_ESP32S2_TRACEMEM_RESERVE_DRAM=0x0
CONFIG_ESP32S2_ULP_COPROC_RESERVE_MEM=0
CONFIG_ESP32S2_DEBUG_OCDAWARE=y
CONFIG_ESP32S2_BROWNOUT_DET=y
CONFIG_ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP=y
#
# Cache config
#
# end of Cache config
CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0
CONFIG_ESP_MAC_ADDR_UNIVERSE_BT_OFFSET=2
CONFIG_ESP32S3_ULP_COPROC_RESERVE_MEM=0
CONFIG_ESP32S3_DEBUG_OCDAWARE=y
CONFIG_ESP32S3_BROWNOUT_DET=y
CONFIG_ESP32S3_ALLOW_RTC_FAST_MEM_AS_HEAP=y
#
# ADC-Calibration
#
@ -395,15 +326,12 @@ CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200
CONFIG_ESP_INT_WDT=y
CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
CONFIG_ESP_INT_WDT_CHECK_CPU1=y
CONFIG_ESP_TASK_WDT=y
# CONFIG_ESP_TASK_WDT_PANIC is not set
CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
# CONFIG_ESP_TASK_WDT is not set
# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_BT_OFFSET=2
CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
# end of Common ESP-related
@ -1054,6 +982,11 @@ CONFIG_SPIFFS_USE_MTIME=y
CONFIG_WS_BUFFER_SIZE=1024
# end of TCP Transport
#
# TinyUSB
#
# end of TinyUSB
#
# Unity unit testing library
#
@ -1112,3 +1045,157 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y
#
# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set
# end of Compatibility options
# Deprecated options for backward compatibility
CONFIG_TOOLPREFIX="xtensa-esp32-elf-"
# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y
# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
CONFIG_LOG_BOOTLOADER_LEVEL=3
# CONFIG_APP_ROLLBACK_ENABLE is not set
# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
# CONFIG_FLASHMODE_QIO is not set
# CONFIG_FLASHMODE_QOUT is not set
CONFIG_FLASHMODE_DIO=y
# CONFIG_FLASHMODE_DOUT is not set
# CONFIG_MONITOR_BAUD_9600B is not set
# CONFIG_MONITOR_BAUD_57600B is not set
CONFIG_MONITOR_BAUD_115200B=y
# CONFIG_MONITOR_BAUD_230400B is not set
# CONFIG_MONITOR_BAUD_921600B is not set
# CONFIG_MONITOR_BAUD_2MB is not set
# CONFIG_MONITOR_BAUD_OTHER is not set
CONFIG_MONITOR_BAUD_OTHER_VAL=115200
CONFIG_MONITOR_BAUD=115200
CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
# CONFIG_CXX_EXCEPTIONS is not set
CONFIG_STACK_CHECK_NONE=y
# CONFIG_STACK_CHECK_NORM is not set
# CONFIG_STACK_CHECK_STRONG is not set
# CONFIG_STACK_CHECK_ALL is not set
# CONFIG_WARN_WRITE_STRINGS is not set
# CONFIG_DISABLE_GCC8_WARNINGS is not set
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_ADC2_DISABLE_DAC=y
# CONFIG_SPIRAM_SUPPORT is not set
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4
# CONFIG_ULP_COPROC_ENABLED is not set
CONFIG_ULP_COPROC_RESERVE_MEM=0
CONFIG_BROWNOUT_DET=y
CONFIG_BROWNOUT_DET_LVL_SEL_0=y
# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set
CONFIG_BROWNOUT_DET_LVL=0
CONFIG_REDUCE_PHY_TX_POWER=y
CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y
# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set
# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set
# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set
# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set
# CONFIG_NO_BLOBS is not set
# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set
CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_MAIN_TASK_STACK_SIZE=3584
CONFIG_IPC_TASK_STACK_SIZE=1024
CONFIG_CONSOLE_UART_DEFAULT=y
# CONFIG_CONSOLE_UART_CUSTOM is not set
# CONFIG_ESP_CONSOLE_UART_NONE is not set
CONFIG_CONSOLE_UART=y
CONFIG_CONSOLE_UART_NUM=0
CONFIG_CONSOLE_UART_BAUDRATE=115200
CONFIG_INT_WDT=y
CONFIG_INT_WDT_TIMEOUT_MS=300
CONFIG_INT_WDT_CHECK_CPU1=y
# CONFIG_TASK_WDT is not set
# CONFIG_EVENT_LOOP_PROFILING is not set
CONFIG_POST_EVENTS_FROM_ISR=y
CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set
CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y
# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP32S2_PANIC_GDBSTUB is not set
CONFIG_TIMER_TASK_STACK_SIZE=3584
# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set
# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set
CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y
CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150
CONFIG_MB_MASTER_DELAY_MS_CONVERT=200
CONFIG_MB_QUEUE_LENGTH=20
CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096
CONFIG_MB_SERIAL_BUF_SIZE=256
CONFIG_MB_SERIAL_TASK_PRIO=10
CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y
CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233
CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20
CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20
CONFIG_MB_CONTROLLER_STACK_SIZE=4096
CONFIG_MB_EVENT_QUEUE_TIMEOUT=20
CONFIG_MB_TIMER_PORT_ENABLED=y
CONFIG_MB_TIMER_GROUP=0
CONFIG_MB_TIMER_INDEX=0
# CONFIG_SUPPORT_STATIC_ALLOCATION is not set
CONFIG_TIMER_TASK_PRIORITY=1
CONFIG_TIMER_TASK_STACK_DEPTH=2048
CONFIG_TIMER_QUEUE_LENGTH=10
# CONFIG_L2_TO_L3_COPY is not set
# CONFIG_USE_ONLY_LWIP_SELECT is not set
CONFIG_ESP_GRATUITOUS_ARP=y
CONFIG_GARP_TMR_INTERVAL=60
CONFIG_TCPIP_RECVMBOX_SIZE=32
CONFIG_TCP_MAXRTX=12
CONFIG_TCP_SYNMAXRTX=12
CONFIG_TCP_MSS=1440
CONFIG_TCP_MSL=60000
CONFIG_TCP_SND_BUF_DEFAULT=5744
CONFIG_TCP_WND_DEFAULT=5744
CONFIG_TCP_RECVMBOX_SIZE=6
CONFIG_TCP_QUEUE_OOSEQ=y
# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set
CONFIG_TCP_OVERSIZE_MSS=y
# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
# CONFIG_TCP_OVERSIZE_DISABLE is not set
CONFIG_UDP_RECVMBOX_SIZE=6
CONFIG_TCPIP_TASK_STACK_SIZE=3072
CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set
CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
# CONFIG_PPP_SUPPORT is not set
CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
CONFIG_ESP32_PTHREAD_STACK_MIN=768
CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y
# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set
# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set
CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
CONFIG_SUPPORT_TERMIOS=y
CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128
# End of deprecated options

1
test/sdkconfig.defaults Normal file
View File

@ -0,0 +1 @@
CONFIG_ESP_TASK_WDT=n