Update to sdk 2.2
Initial commit for
https://github.com/nodemcu/nodemcu-firmware/issues/2225 .
Replay patches from Espressif's repository at
https://github.com/espressif/ESP8266_NONOS_SDK between tags v2.1.0 and
v2.2.0:
0001-sync-from-ccca00f2.patch
Superseded by existing changes, but lines reordered in app/driver/key.c
to minimize divergences.
0002-sync-from-3f38ad5a.patch
Upstream files only
0003-Update-links.patch
Not meaningful to NodeMCU
0004-sync-from-01990ad0.patch
0005-sync-from-cdf6877d.patch
Upstream files only
0006-sync-from-f29e744c.patch
Upstream files only, user_interface.h override non-conflicting
0009-feat-lwip-Move-lwip-source-code-to-third_party-folde.patch
Merged change to lwip/app/espconn_udp.c; rest is just moves or
appears to not apply.
0010-feat-mbedtls-Add-mbedtls-source-code-in-third_party-.patch
Does not apply; we use our own mbedtls
0011-added-C-support.patch
Merged to Makefile
0012-feat-mbedtls-Rebuild-libmbedtls.patch
Already applied
0013-fix-at-Fix-some-bugs-of-AT.patch
Upstream files only
0014-feat-err_t-Redefine-err_t-to-s32_t.patch
Merged to app/include/arch/cc.h and ./app/include/lwip/app/espconn.h;
the rest is upstream files.
0015-fix-wpa-Fix-wpa-wpa2-ptk-gtk-reinstallation-vulnerab.patch
0016-fix-wifi-Remove-group-key-entry-before-connecting-to.patch
0017-feat-lib-Remove-time-function-in-libmain.patch
Upstream files only
0018-feat-espconn-Modification-for-espconn.patch
Merged to app/include/lwip/app/espconn.h,
app/include/lwip/app/espconn_tcp.h, app/lwip/app/espconn.c,
app/lwip/app/espconn_tcp.c
0019-feat-at-Use-new-espconn_recv-to-fix-tcp-server-issue.patch
0020-feat-examples-Update-mqtt-demo-and-auto-bin-generate.patch
Upstream files only
0021-wifi-Add-scan-threshold-and-dwell-time.patch
0022-feat-wifi-Add-country-code-API.patch
0023-feat-wifi-Record-more-information-of-scanned-ap.patch
Upstream files only, user_interface.h override non-conflicting
0024-fix-example-Fix-IoT_Demo-user-sector-error.patch
Upstream files only
0025-fix-lwip-Fix-sequence-number-error-of-RST-ACK.patch
Merged app/lwip/core/tcp_in.c
0026-fix-mbedtls-Fix-memory-leak.patch
Merged app/mbedtls/app/lwIPSocket.c
0027-fix-mbedtls-Fix-call-send-callback-function-failed.patch
Merged app/mbedtls/app/espconn_mbedtls.c
0028-feat-Add-USE_OPTIMIZE_PRINTF-in-third_party-Makefile.patch
Merged app/Makefile
0029-fix-api-Fix-ets_delay_us-declaration.patch
Upstream files only, osapi.h override non-conflicting
0030-fix-wifi-Remove-max_tx_power-in-wifi_country_t-in-li.patch
0031-fix-wifi-Fix-softAP-wrong-behavior-after-call-system.patch
0032-fix-wifi-bugfix-of-scan-fail-after-connected-if-max-.patch
0033-feat-at-Enable-scan-time-scan-type-and-add-scan-resu.patch
0034-feat-at-Add-command-AT-CWCOUNTRY.patch
0035-fix-at-Fix-that-AT-CIPSTART-causes-busy-if-the-serve.patch
Upstream files only
0036-feat-mbedtls-Speed-up-mbedtls-handshake-process.patch
Merged app/mbedtls/app/espconn_mbedtls.c
0037-fix-api-Fix-os_calloc-declaration.patch
Merged app/include/lwip/mem.h; sdk-overrides/include/mem.h
non-conflicting.
0038-fix-mbedtls-Fix-disconnect-callback-function-never-b.patch
Merged app/mbedtls/app/espconn_mbedtls.c; minor revision to logic in
6576af959b
. Whitespace fixes.
0039-feat-at-Add-country-code-start-channel-in-AT-CWCOUNT.patch
0040-fix-net80211-Fix-Null-pointer-in-ieee80211_rfid_locp.patch
Upstream files only
0041-feat-wifi-Add-new-esp_init_data_default-v08-bin.patch
Upstream files only, but impacts Makefile
0042-fix-mbedtls-Fix-load-cert-fail-when-the-private-key-.patch
Merged app/mbedtls/app/espconn_mbedtls.c
0043-fix-wifi-The-start-channel-can-be-any-valid-channel.patch
0044-fix-wifi-Fix-scan-do-not-start-after-connect.patch
0045-feat-wifi-Add-keep-connection-for-station-to-keep-co.patch
0046-feat-at-Update-AT-version-to-1.6.0.0.patch
0047-fix-at-Fix-GSLP-too-long-time.patch
0048-fix-at-Fix-the-message-is-incorrect-when-creating-UD.patch
0049-feat-at-Add-AT-CIPSERVERMAXCONN.patch
Upstream files only
0050-feat-system-Add-softap-distributes-station-ip-event.patch
Upstream files only, user_interface.h override non-conflicting
0051-feat-example-Use-libmbedtls.a-instead-of-libssl.a-in.patch
Upstream files only
0052-feat-mesh-Remove-mesh-support.patch
Upstream files only, but go ahead and remove comment from
ld/nodemcu.ld.
0053-fix-example-Fix-forget-to-add-integer-parameter-when.patch
Upstream files only
0054-fix-mbedtls-Fix-reconnect_callback-is-not-triggered-.patch
Merged app/mbedtls/app/espconn_mbedtls.c
0055-feat-at-Add-AT-SYSMSG-to-enable-some-report-informat.patch
0056-fix-at-Fix-the-incorrect-link-id-when-client-connect.patch
0057-fix-at-Fix-the-bug-that-it-should-be-error-when-the-.patch
0058-fix-smartconfig-Fix-the-smartconfig-scan-time-issue.patch
0059-fix-lwip-Fix-the-bug-of-lwip-output.patch
Upstream files only
0060-fix-lwip-Fix-the-length-of-TCP-data-in-one-packet-is.patch
0061-fix-lwip-Fix-send-TCP-data-with-two-or-more-pbuf.patch
Merged app/lwip/core/tcp_out.c
0062-fix-wifi-Fix-assert-happen-when-smartconfig-start-th.patch
Upstream files only
0063-fix-mbedtls-Fix-memory-leak-when-ESP8266-as-SSL-TLS-.patch
Merged app/mbedtls/app/espconn_mbedtls.c
0064-fix-mbedtls-Fix-already-freed-and-exception-bug-when.patch
Merged app/mbedtls/app/lwIPSocket.c
0065-fix-at-Fix-bug-that-there-is-no-result-when-sending-.patch
0066-feat-example-Add-AT-bin-version.patch
0067-feat-version-Update-version-to-2.2.0-and-add-version.patch
0068-feat-bin-Update-AT-bin-for-SDK-2.2.0.patch
Upstream files only
Apply local changes to build:
app/include/lwip/app/espconn.h pulls changes (and license decl) from
upstream SDK. Makefile is altered to use this file ahead of the
SDK's.
Remove lwip's sntp support, since it was never really wired in anyway.
See https://github.com/nodemcu/nodemcu-firmware/issues/2042 for more
information. Patch Makefile to strip time.o, the consumer of lwip's
sntp functionality, from libmain.a, resulting in much
easier-to-understand error messages.
This has consequences for mbedtls. The simplest thing to do, which is,
impressively, not a change in behavior, is to completely disable TLS
certificate time validation; a later patch can optionally couple this to
RTCTIME support.
Similarly, it happens that the sqlite3 import was calling time(), but
this was not going to work out well for it. Just stub it out to always
return unix timestamp 0, as would have happened anyway.
Changes unprocessed:
0007-sync-from-080c37e1.patch
0008-feat-lib-Compile-some-libraries-with-ffunction-secti.patch
These two make changes to the linker script; perhaps
they are worth porting over, but I have not done so
here.
This is build-tested (ADC, BIT, COLOR_UTILS, CRON, CRYPTO, DHT, ENCODER,
FILE, GPIO, HTTP, I2C, MQTT, NET, NODE, OW, PCM, PERF, PWM, RTCFIFO,
RTCMEM, RTCTIME, SNTP, SPI, SQLITE3, STRUCT, TLS, TMR, UART, WIFI,
WS2812, WS2812_EFFECTS) and boots, but only limited run-time testing has
been performed. Testing done does, however, include having made a few
TLS connections through the HTTP module, so things are not hopelessly
broken, at the very least.
This commit is contained in:
parent
4367e6e9e0
commit
c972d86ea9
29
Makefile
29
Makefile
|
@ -3,7 +3,7 @@
|
|||
.NOTPARALLEL:
|
||||
|
||||
# SDK version NodeMCU is locked to
|
||||
SDK_VER:=2.1.0
|
||||
SDK_VER:=2.2.0
|
||||
|
||||
# no patch: SDK_BASE_VER equals SDK_VER and sdk dir depends on sdk_extracted
|
||||
SDK_BASE_VER:=$(SDK_VER)
|
||||
|
@ -13,13 +13,13 @@ SDK_DIR_DEPENDS:=sdk_extracted
|
|||
#SDK_DIR_DEPENDS:=sdk_patched
|
||||
|
||||
SDK_FILE_VER:=$(SDK_BASE_VER)
|
||||
SDK_FILE_SHA1:=66a4272894dc1bcec19f5f8bf79fee80f60a021b
|
||||
SDK_FILE_SHA1:=8b63f1066d3560ff77f119e8ba30a9c39e7baaad
|
||||
#SDK_PATCH_VER:=$(SDK_VER)_patch_20160704
|
||||
#SDK_PATCH_SHA1:=388d9e91df74e3b49fca126da482cf822cf1ebf1
|
||||
# Ensure we search "our" SDK before the tool-chain's SDK (if any)
|
||||
TOP_DIR:=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))
|
||||
SDK_DIR:=$(TOP_DIR)/sdk/esp_iot_sdk_v$(SDK_VER)
|
||||
CCFLAGS:= -I$(TOP_DIR)/sdk-overrides/include -I$(SDK_DIR)/include
|
||||
CCFLAGS:= -I$(TOP_DIR)/sdk-overrides/include -I$(TOP_DIR)/app/include/lwip/app -I$(SDK_DIR)/include
|
||||
LDFLAGS:= -L$(SDK_DIR)/lib -L$(SDK_DIR)/ld $(LDFLAGS)
|
||||
|
||||
ifdef DEBUG
|
||||
|
@ -39,6 +39,7 @@ ifeq ($(OS),Windows_NT)
|
|||
# It is xcc
|
||||
AR = xt-ar
|
||||
CC = xt-xcc
|
||||
CXX = xt-xcc
|
||||
NM = xt-nm
|
||||
CPP = xt-cpp
|
||||
OBJCOPY = xt-objcopy
|
||||
|
@ -50,6 +51,7 @@ ifeq ($(OS),Windows_NT)
|
|||
CCFLAGS += -ffunction-sections -fno-jump-tables -fdata-sections
|
||||
AR = xtensa-lx106-elf-ar
|
||||
CC = xtensa-lx106-elf-gcc
|
||||
CXX = xtensa-lx106-elf-g++
|
||||
NM = xtensa-lx106-elf-nm
|
||||
CPP = xtensa-lx106-elf-cpp
|
||||
OBJCOPY = xtensa-lx106-elf-objcopy
|
||||
|
@ -77,6 +79,7 @@ else
|
|||
CCFLAGS += -ffunction-sections -fno-jump-tables -fdata-sections
|
||||
AR = xtensa-lx106-elf-ar
|
||||
CC = $(WRAPCC) xtensa-lx106-elf-gcc
|
||||
CXX = $(WRAPCC) xtensa-lx106-elf-g++
|
||||
NM = xtensa-lx106-elf-nm
|
||||
CPP = $(WRAPCC) xtensa-lx106-elf-gcc -E
|
||||
OBJCOPY = xtensa-lx106-elf-objcopy
|
||||
|
@ -104,6 +107,7 @@ ESPTOOL ?= ../tools/esptool.py
|
|||
|
||||
|
||||
CSRCS ?= $(wildcard *.c)
|
||||
CXXSRCS ?= $(wildcard *.cpp)
|
||||
ASRCs ?= $(wildcard *.s)
|
||||
ASRCS ?= $(wildcard *.S)
|
||||
SUBDIRS ?= $(patsubst %/,%,$(dir $(filter-out tools/Makefile,$(wildcard */Makefile))))
|
||||
|
@ -112,10 +116,12 @@ ODIR := .output
|
|||
OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj
|
||||
|
||||
OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
|
||||
$(CXXSRCS:%.cpp=$(OBJODIR)/%.o) \
|
||||
$(ASRCs:%.s=$(OBJODIR)/%.o) \
|
||||
$(ASRCS:%.S=$(OBJODIR)/%.o)
|
||||
|
||||
DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
|
||||
$(CXXSCRS:%.cpp=$(OBJODIR)/%.d) \
|
||||
$(ASRCs:%.s=$(OBJODIR)/%.d) \
|
||||
$(ASRCS:%.S=$(OBJODIR)/%.d)
|
||||
|
||||
|
@ -206,9 +212,11 @@ sdk_patched: sdk_extracted $(TOP_DIR)/sdk/.patched-$(SDK_VER)
|
|||
|
||||
$(TOP_DIR)/sdk/.extracted-$(SDK_BASE_VER): $(TOP_DIR)/cache/v$(SDK_FILE_VER).zip
|
||||
mkdir -p "$(dir $@)"
|
||||
(cd "$(dir $@)" && rm -fr esp_iot_sdk_v$(SDK_VER) ESP8266_NONOS_SDK-$(SDK_VER) && unzip $(TOP_DIR)/cache/v$(SDK_FILE_VER).zip ESP8266_NONOS_SDK-$(SDK_VER)/lib/* ESP8266_NONOS_SDK-$(SDK_VER)/ld/eagle.rom.addr.v6.ld ESP8266_NONOS_SDK-$(SDK_VER)/include/* ESP8266_NONOS_SDK-$(SDK_VER)/bin/esp_init_data_default.bin)
|
||||
(cd "$(dir $@)" && rm -fr esp_iot_sdk_v$(SDK_VER) ESP8266_NONOS_SDK-$(SDK_VER) && unzip $(TOP_DIR)/cache/v$(SDK_FILE_VER).zip ESP8266_NONOS_SDK-$(SDK_VER)/lib/* ESP8266_NONOS_SDK-$(SDK_VER)/ld/eagle.rom.addr.v6.ld ESP8266_NONOS_SDK-$(SDK_VER)/include/* ESP8266_NONOS_SDK-$(SDK_VER)/bin/esp_init_data_default_v05.bin)
|
||||
mv $(dir $@)/ESP8266_NONOS_SDK-$(SDK_VER) $(dir $@)/esp_iot_sdk_v$(SDK_VER)
|
||||
rm -f $(SDK_DIR)/lib/liblwip.a
|
||||
rm -f $(SDK_DIR)/lib/liblwip.a $(SDK_DIR)/lib/libssl.a $(SDK_DIR)/lib/libmbedtls.a
|
||||
ar d $(SDK_DIR)/lib/libmain.a time.o
|
||||
ar d $(SDK_DIR)/lib/libc.a lib_a-time.o
|
||||
touch $@
|
||||
|
||||
$(TOP_DIR)/sdk/.patched-$(SDK_VER): $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_PATCH_VER).zip
|
||||
|
@ -306,6 +314,17 @@ $(OBJODIR)/%.d: %.c
|
|||
sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
$(OBJODIR)/%.o: %.cpp
|
||||
@mkdir -p $(OBJODIR);
|
||||
$(CXX) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<
|
||||
|
||||
$(OBJODIR)/%.d: %.cpp
|
||||
@mkdir -p $(OBJODIR);
|
||||
@echo DEPEND: $(CXX) -M $(CFLAGS) $<
|
||||
@set -e; rm -f $@; \
|
||||
sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
$(OBJODIR)/%.o: %.s
|
||||
@mkdir -p $(OBJODIR);
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
|
|
@ -166,6 +166,7 @@ CONFIGURATION_DEFINES = -D__ets__ \
|
|||
-DLWIP_OPEN_SRC \
|
||||
-DPBUF_RSV_FOR_WLAN \
|
||||
-DEBUF_LWIP \
|
||||
-DUSE_OPTIMIZE_PRINTF \
|
||||
-DMBEDTLS_USER_CONFIG_FILE=\"user_mbedtls.h\" \
|
||||
|
||||
DEFINES += \
|
||||
|
|
|
@ -132,9 +132,9 @@ key_50ms_cb(struct single_key_param *single_key)
|
|||
LOCAL void
|
||||
key_intr_handler(void *arg)
|
||||
{
|
||||
struct keys_param *keys = arg;
|
||||
uint8 i;
|
||||
uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
|
||||
struct keys_param *keys = arg;
|
||||
|
||||
for (i = 0; i < keys->key_num; i++) {
|
||||
if (gpio_status & BIT(keys->single_key[i]->gpio_id)) {
|
||||
|
|
|
@ -65,7 +65,7 @@ typedef uint32_t mem_ptr_t;
|
|||
#define U32_F "d"
|
||||
#define X32_F "x"
|
||||
|
||||
|
||||
#define LWIP_ERR_T s32_t
|
||||
|
||||
//#define PACK_STRUCT_FIELD(x) x __attribute__((packed))
|
||||
#define PACK_STRUCT_FIELD(x) x
|
||||
|
|
|
@ -1,6 +1,31 @@
|
|||
/*
|
||||
* ESPRESSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2016 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESPCONN_H__
|
||||
#define __ESPCONN_H__
|
||||
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/dns.h"
|
||||
#include "os_type.h"
|
||||
#include "lwip/app/espconn_buf.h"
|
||||
|
@ -37,8 +62,7 @@ typedef void (* espconn_reconnect_callback)(void *arg, sint8 err);
|
|||
#define ESPCONN_NODATA -17 /* No data can be read */
|
||||
|
||||
#define ESPCONN_HANDSHAKE -28 /* ssl handshake failed */
|
||||
#define ESPCONN_RESP_TIMEOUT -29 /* ssl handshake no response*/
|
||||
#define ESPCONN_PROTO_MSG -61 /* ssl application invalid */
|
||||
#define ESPCONN_SSL_INVALID_DATA -61 /* ssl application invalid */
|
||||
|
||||
#define ESPCONN_SSL 0x01
|
||||
#define ESPCONN_NORM 0x00
|
||||
|
@ -121,6 +145,7 @@ enum espconn_option{
|
|||
ESPCONN_NODELAY = 0x02,
|
||||
ESPCONN_COPY = 0x04,
|
||||
ESPCONN_KEEPALIVE = 0x08,
|
||||
ESPCONN_MANUALRECV = 0x10,
|
||||
ESPCONN_END
|
||||
};
|
||||
|
||||
|
@ -461,6 +486,17 @@ extern sint8 espconn_regist_sentcb(struct espconn *espconn, espconn_sent_callbac
|
|||
*******************************************************************************/
|
||||
extern sint8 espconn_regist_write_finish(struct espconn *espconn, espconn_connect_callback write_finish_fn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_send
|
||||
* Description : sent data for client or server
|
||||
* Parameters : espconn -- espconn to set for client or server
|
||||
* psent -- data to send
|
||||
* length -- length of data to send
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
extern sint8 espconn_send(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_sent
|
||||
* Description : sent data for client or server
|
||||
|
@ -573,7 +609,163 @@ extern sint8 espconn_get_keepalive(struct espconn *espconn, uint8 level, void *o
|
|||
* - ESPCONN_ARG: dns client not initialized or invalid hostname
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_gethostbyname(struct espconn *pespconn, const char *name, ip_addr_t *addr, dns_found_callback found);
|
||||
extern err_t espconn_gethostbyname(struct espconn *pespconn, const char *name, ip_addr_t *addr, dns_found_callback found);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_abort
|
||||
* Description : Forcely abort with host
|
||||
* Parameters : espconn -- the espconn used to connect with the host
|
||||
* Returns : result
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_abort(struct espconn *espconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_encry_connect
|
||||
* Description : The function given as connection
|
||||
* Parameters : espconn -- the espconn used to connect with the host
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_connect(struct espconn *espconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_encry_disconnect
|
||||
* Description : The function given as the disconnection
|
||||
* Parameters : espconn -- the espconn used to disconnect with the host
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_disconnect(struct espconn *espconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_send
|
||||
* Description : sent data for client or server
|
||||
* Parameters : espconn -- espconn to set for client or server
|
||||
* psent -- data to send
|
||||
* length -- length of data to send
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_send(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_encry_sent
|
||||
* Description : sent data for client or server
|
||||
* Parameters : espconn -- espconn to set for client or server
|
||||
* psent -- data to send
|
||||
* length -- length of data to send
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_sent(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_set_size
|
||||
* Description : set the buffer size for client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* size -- buffer size
|
||||
* Returns : true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_set_size(uint8 level, uint16 size);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_get_size
|
||||
* Description : get buffer size for client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* Returns : buffer size for client or server
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint16 espconn_secure_get_size(uint8 level);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_ca_enable
|
||||
* Description : enable the certificate authenticate and set the flash sector
|
||||
* as client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* flash_sector -- flash sector for save certificate
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_ca_enable(uint8 level, uint32 flash_sector );
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_ca_disable
|
||||
* Description : disable the certificate authenticate as client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_ca_disable(uint8 level);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_cert_req_enable
|
||||
* Description : enable the client certificate authenticate and set the flash sector
|
||||
* as client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* flash_sector -- flash sector for save certificate
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_cert_req_enable(uint8 level, uint32 flash_sector );
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_ca_disable
|
||||
* Description : disable the client certificate authenticate as client or server
|
||||
* Parameters : level -- set for client or server
|
||||
* 1: client,2:server,3:client and server
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_cert_req_disable(uint8 level);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_set_default_certificate
|
||||
* Description : Load the certificates in memory depending on compile-time
|
||||
* and user options.
|
||||
* Parameters : certificate -- Load the certificate
|
||||
* length -- Load the certificate length
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_set_default_certificate(const uint8* certificate, uint16 length);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_set_default_private_key
|
||||
* Description : Load the key in memory depending on compile-time
|
||||
* and user options.
|
||||
* Parameters : private_key -- Load the key
|
||||
* length -- Load the key length
|
||||
* Returns : result true or false
|
||||
*******************************************************************************/
|
||||
|
||||
extern bool espconn_secure_set_default_private_key(const uint8* private_key, uint16 length);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_accept
|
||||
* Description : The function given as the listen
|
||||
* Parameters : espconn -- the espconn used to listen the connection
|
||||
* Returns : result
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_accept(struct espconn *espconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_secure_accepts
|
||||
* Description : delete the secure server host
|
||||
* Parameters : espconn -- the espconn used to listen the connection
|
||||
* Returns : result
|
||||
*******************************************************************************/
|
||||
|
||||
extern sint8 espconn_secure_delete(struct espconn *espconn);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_igmp_join
|
||||
|
@ -593,6 +785,22 @@ extern sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
|
|||
*******************************************************************************/
|
||||
extern sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_recv_hold
|
||||
* Description : hold tcp receive
|
||||
* Parameters : espconn -- espconn to hold
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
extern sint8 espconn_recv_hold(struct espconn *pespconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_recv_unhold
|
||||
* Description : unhold tcp receive
|
||||
* Parameters : espconn -- espconn to unhold
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
extern sint8 espconn_recv_unhold(struct espconn *pespconn);
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_mdns_init
|
||||
* Description : register a device with mdns
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#define espconn_keepalive_enable(pcb) ((pcb)->so_options |= SOF_KEEPALIVE)
|
||||
#define espconn_keepalive_disable(pcb) ((pcb)->so_options &= ~SOF_KEEPALIVE)
|
||||
|
||||
#define espconn_manual_recv_disabled(espconn) (((espconn)->pcommon.espconn_opt & ESPCONN_MANUALRECV) != 0)
|
||||
#define espconn_manual_recv_enabled(espconn) (((espconn)->pcommon.espconn_opt & ESPCONN_MANUALRECV) == 0)
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_kill_oldest_pcb
|
||||
* Description : A oldest incoming connection has been killed.
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* time.h
|
||||
*
|
||||
* Created on: May 31, 2016
|
||||
* Author: liuhan
|
||||
*/
|
||||
|
||||
#ifndef TIME_H_
|
||||
#define TIME_H_
|
||||
#include "osapi.h"
|
||||
#include "os_type.h"
|
||||
#include "lwip/sntp.h"
|
||||
|
||||
struct timeval {
|
||||
unsigned long tv_sec; /* seconds */
|
||||
unsigned long tv_usec; /* and microseconds */
|
||||
};
|
||||
|
||||
/***************************RTC TIME OPTION***************************************/
|
||||
// daylight settings
|
||||
// Base calculated with value obtained from NTP server (64 bits)
|
||||
#define sntp_base (*((uint64_t*)RTC_STORE0))
|
||||
// Timer value when base was obtained
|
||||
#define TIM_REF_SET(value) WRITE_PERI_REG(RTC_STORE2, value)
|
||||
#define TIM_REF_GET() READ_PERI_REG(RTC_STORE2)
|
||||
|
||||
// Setters and getters for CAL, TZ and DST.
|
||||
#define RTC_CAL_SET(val) do {uint32 value = READ_PERI_REG(RTC_STORE3);\
|
||||
value |= ((val) & 0x0000FFFF);\
|
||||
WRITE_PERI_REG(RTC_STORE3, value);\
|
||||
}while(0)
|
||||
#define RTC_DST_SET(val) do {uint32 value = READ_PERI_REG(RTC_STORE3);\
|
||||
value |= (((val)<<16) & 0x00010000);\
|
||||
WRITE_PERI_REG(RTC_STORE3, value);\
|
||||
}while(0)
|
||||
#define RTC_TZ_SET(val) do {uint32 value = READ_PERI_REG(RTC_STORE3);\
|
||||
value |= (((val)<<24) & 0xFF000000);\
|
||||
WRITE_PERI_REG(RTC_STORE3, value);\
|
||||
}while(0)
|
||||
|
||||
#define RTC_CAL_GET() (READ_PERI_REG(RTC_STORE3) & 0x0000FFFF)
|
||||
#define RTC_DST_GET() ((READ_PERI_REG(RTC_STORE3) & 0x00010000)>>16)
|
||||
#define RTC_TZ_GET() ((((int)READ_PERI_REG(RTC_STORE3)) & ((int)0xFF000000))>>24)
|
||||
void system_update_rtc(time_t t, uint32_t us);
|
||||
time_t sntp_get_rtc_time(sint32_t *us);
|
||||
|
||||
int gettimeofday(struct timeval* t, void* timezone);
|
||||
void updateTime(uint32 ms);
|
||||
bool configTime(int timezone, int daylightOffset, char *server1, char *server2, char *server3, bool enable);
|
||||
time_t time(time_t *t);
|
||||
unsigned long millis(void);
|
||||
unsigned long micros(void);
|
||||
#endif /* TIME_H_ */
|
|
@ -78,7 +78,7 @@ do{\
|
|||
#define mem_malloc(s) ({const char *file = mem_debug_file; pvPortMalloc(s, file, __LINE__);})
|
||||
#endif
|
||||
#ifndef mem_calloc
|
||||
#define mem_calloc(s) ({const char *file = mem_debug_file; pvPortCalloc(s, file, __LINE__);})
|
||||
#define mem_calloc(l, s) ({const char *file = mem_debug_file; pvPortCalloc(l, s, file, __LINE__);})
|
||||
#endif
|
||||
#ifndef mem_realloc
|
||||
#define mem_realloc(p, s) ({const char *file = mem_debug_file; pvPortRealloc(p, s, file, __LINE__);})
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
#ifndef LWIP_SNTP_H
|
||||
#define LWIP_SNTP_H
|
||||
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef long time_t;
|
||||
|
||||
/** The maximum number of SNTP servers that can be set */
|
||||
#ifndef SNTP_MAX_SERVERS
|
||||
#define SNTP_MAX_SERVERS 3
|
||||
#endif
|
||||
|
||||
/** Set this to 1 to implement the callback function called by dhcp when
|
||||
* NTP servers are received. */
|
||||
#ifndef SNTP_GET_SERVERS_FROM_DHCP
|
||||
#define SNTP_GET_SERVERS_FROM_DHCP 0//LWIP_DHCP_GET_NTP_SRV
|
||||
#endif
|
||||
|
||||
/* Set this to 1 to support DNS names (or IP address strings) to set sntp servers */
|
||||
#ifndef SNTP_SERVER_DNS
|
||||
#define SNTP_SERVER_DNS 1
|
||||
#endif
|
||||
|
||||
bool sntp_get_timetype(void);
|
||||
void sntp_set_receive_time_size(void);
|
||||
/** One server address/name can be defined as default if SNTP_SERVER_DNS == 1:
|
||||
* #define SNTP_SERVER_ADDRESS "pool.ntp.org"
|
||||
*/
|
||||
uint32 sntp_get_current_timestamp();
|
||||
char* sntp_get_real_time(long t);
|
||||
|
||||
void sntp_init(void);
|
||||
void sntp_stop(void);
|
||||
|
||||
sint8 sntp_get_timezone(void);
|
||||
bool sntp_set_timezone(sint8 timezone);
|
||||
void sntp_setserver(u8_t idx, ip_addr_t *addr);
|
||||
ip_addr_t sntp_getserver(u8_t idx);
|
||||
|
||||
#if SNTP_SERVER_DNS
|
||||
void sntp_setservername(u8_t idx, char *server);
|
||||
char *sntp_getservername(u8_t idx);
|
||||
#endif /* SNTP_SERVER_DNS */
|
||||
|
||||
#if SNTP_GET_SERVERS_FROM_DHCP
|
||||
void sntp_servermode_dhcp(int set_servers_from_dhcp);
|
||||
#else /* SNTP_GET_SERVERS_FROM_DHCP */
|
||||
#define sntp_servermode_dhcp(x)
|
||||
#endif /* SNTP_GET_SERVERS_FROM_DHCP */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_SNTP_H */
|
|
@ -5,8 +5,9 @@
|
|||
#undef MBEDTLS_HAVE_ASM
|
||||
#undef MBEDTLS_HAVE_SSE2
|
||||
|
||||
#define MBEDTLS_HAVE_TIME
|
||||
#define MBEDTLS_HAVE_TIME_DATE
|
||||
// These are disabled until we have a real, working RTC-based gettimeofday
|
||||
#undef MBEDTLS_HAVE_TIME
|
||||
#undef MBEDTLS_HAVE_TIME_DATE
|
||||
|
||||
#define MBEDTLS_PLATFORM_MEMORY
|
||||
#undef MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
|
||||
|
|
|
@ -441,6 +441,7 @@ sint16 ICACHE_FLASH_ATTR espconn_recv(struct espconn *espconn, void *mem, size_t
|
|||
espconn_msg *pnode = NULL;
|
||||
bool value = false;
|
||||
int bytes_used = 0;
|
||||
struct tcp_pcb *tpcb = NULL;
|
||||
if (espconn == NULL || mem == NULL || len == 0)
|
||||
return ESPCONN_ARG;
|
||||
|
||||
|
@ -454,13 +455,15 @@ sint16 ICACHE_FLASH_ATTR espconn_recv(struct espconn *espconn, void *mem, size_t
|
|||
len = bytes_used;
|
||||
}
|
||||
ringbuf_memcpy_from(mem, pnode->readbuf, len);
|
||||
espconn_recv_unhold(pnode->pespconn);
|
||||
tpcb = pnode->pcommon.pcb;
|
||||
if (tpcb && tpcb->state == ESTABLISHED)
|
||||
tcp_recved(pnode->pcommon.pcb, len);
|
||||
return len;
|
||||
} else {
|
||||
return ESPCONN_OK;
|
||||
}
|
||||
} else{
|
||||
return ESPCONN_OK;
|
||||
return ESPCONN_MEM;
|
||||
}
|
||||
} else{
|
||||
return ESPCONN_ARG;
|
||||
|
|
|
@ -231,6 +231,10 @@ void ICACHE_FLASH_ATTR espconn_tcp_memp_free(espconn_msg *pmemp)
|
|||
if (pmemp == NULL)
|
||||
return;
|
||||
|
||||
/*Enable block option for fetches the data proactive*/
|
||||
if (espconn_manual_recv_disabled(pmemp))
|
||||
espconn_list_delete(&plink_active, pmemp);
|
||||
|
||||
if (pmemp->espconn_mode == ESPCONN_TCPSERVER_MODE){
|
||||
if (pmemp->pespconn != NULL && pmemp->pespconn->proto.tcp != NULL)
|
||||
os_free(pmemp->pespconn->proto.tcp);
|
||||
|
@ -431,11 +435,13 @@ espconn_Task(os_event_t *events)
|
|||
case SIG_ESPCONN_ERRER:
|
||||
/*remove the node from the client's active connection list*/
|
||||
espconn_list_delete(&plink_active, task_msg);
|
||||
espconn_tcp_reconnect(task_msg);
|
||||
if (espconn_manual_recv_enabled(task_msg))
|
||||
espconn_list_delete(&plink_active, task_msg);
|
||||
break;
|
||||
case SIG_ESPCONN_CLOSE:
|
||||
/*remove the node from the client's active connection list*/
|
||||
espconn_list_delete(&plink_active, task_msg);
|
||||
if (espconn_manual_recv_enabled(task_msg))
|
||||
espconn_list_delete(&plink_active, task_msg);
|
||||
espconn_tcp_disconnect_successful(task_msg);
|
||||
break;
|
||||
default:
|
||||
|
@ -538,6 +544,66 @@ void ICACHE_FLASH_ATTR espconn_tcp_disconnect(espconn_msg *pdiscon,u8 type)
|
|||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_recv
|
||||
* Description : Data has been received on this pcb.
|
||||
* Parameters : arg -- Additional argument to pass to the callback function
|
||||
* pcb -- The connection pcb which received data
|
||||
* p -- The received data (or NULL when the connection has been closed!)
|
||||
* err -- An error code if there has been an error receiving
|
||||
* Returns : ERR_ABRT: if you have called tcp_abort from within the function!
|
||||
*******************************************************************************/
|
||||
static err_t ICACHE_FLASH_ATTR
|
||||
espconn_tcp_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
|
||||
{
|
||||
espconn_msg *precv_cb = arg;
|
||||
struct pbuf *pthis = NULL;
|
||||
uint8_t *ring = NULL;
|
||||
size_t bytes_used = 0;
|
||||
|
||||
tcp_arg(pcb, arg);
|
||||
|
||||
if (precv_cb->readbuf == NULL) {
|
||||
precv_cb->readbuf = ringbuf_new(TCP_WND);
|
||||
if (precv_cb->readbuf == NULL)
|
||||
return ESPCONN_MEM;
|
||||
}
|
||||
|
||||
if (err == ERR_OK) {
|
||||
precv_cb->pcommon.recv_check = 0;
|
||||
if (p != NULL) {
|
||||
/*store the data to the adapter for application fetches it proactive*/
|
||||
for (pthis = p; pthis != NULL ; pthis = pthis->next) {
|
||||
ring = ringbuf_memcpy_into(precv_cb->readbuf, pthis->payload, pthis->len);
|
||||
if (ring)
|
||||
pbuf_free(pthis);
|
||||
else
|
||||
break;
|
||||
}
|
||||
bytes_used = ringbuf_bytes_used(precv_cb->readbuf);
|
||||
|
||||
/*switch the state of espconn for application process*/
|
||||
precv_cb->pespconn->state = ESPCONN_READ;
|
||||
precv_cb->pcommon.pcb = pcb;
|
||||
if (precv_cb->pespconn->recv_callback != NULL) {
|
||||
precv_cb->pespconn->recv_callback(precv_cb->pespconn, NULL, bytes_used);
|
||||
}
|
||||
|
||||
/*switch the state of espconn for next packet copy*/
|
||||
if (pcb->state == ESTABLISHED)
|
||||
precv_cb->pespconn->state = ESPCONN_CONNECT;
|
||||
} else {
|
||||
if (precv_cb->preverse) {
|
||||
espconn_server_close(precv_cb, pcb, 0);
|
||||
} else {
|
||||
espconn_client_close(precv_cb, pcb, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
///////////////////////////////client function/////////////////////////////////
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_client_close
|
||||
|
@ -933,6 +999,10 @@ espconn_client_connect(void *arg, struct tcp_pcb *tpcb, err_t err)
|
|||
pcon->pespconn->proto.tcp->connect_callback(pcon->pespconn);
|
||||
}
|
||||
|
||||
/*Enable block option for fetches the data proactive*/
|
||||
if (espconn_manual_recv_disabled(pcon))
|
||||
tcp_recv(tpcb, espconn_tcp_recv);
|
||||
|
||||
/*Enable keep alive option*/
|
||||
if (espconn_keepalive_disabled(pcon))
|
||||
espconn_keepalive_enable(tpcb);
|
||||
|
@ -1358,6 +1428,10 @@ espconn_tcp_accept(void *arg, struct tcp_pcb *pcb, err_t err)
|
|||
paccept->pespconn->proto.tcp->connect_callback(paccept->pespconn);
|
||||
}
|
||||
|
||||
/*Enable block option for fetches the data proactive*/
|
||||
if (espconn_manual_recv_disabled(paccept))
|
||||
tcp_recv(pcb, espconn_tcp_recv);
|
||||
|
||||
/*Enable keep alive option*/
|
||||
if (espconn_keepalive_disabled(paccept))
|
||||
espconn_keepalive_enable(pcb);
|
||||
|
|
|
@ -237,9 +237,10 @@ espconn_udp_sendto(void *arg, uint8 *psent, uint16 length)
|
|||
|
||||
if(wifi_get_opmode() == ESPCONN_AP_STA && default_interface == ESPCONN_AP_STA && sta_netif != NULL && ap_netif != NULL)
|
||||
{
|
||||
if(netif_is_up(sta_netif) && netif_is_up(ap_netif) && \
|
||||
ip_addr_isbroadcast(&upcb->remote_ip, sta_netif) && \
|
||||
ip_addr_isbroadcast(&upcb->remote_ip, ap_netif)) {
|
||||
if( netif_is_up(sta_netif) && \
|
||||
netif_is_up(ap_netif) && \
|
||||
ip_addr_isbroadcast(&dst_ip, sta_netif) && \
|
||||
ip_addr_isbroadcast(&dst_ip, ap_netif)) {
|
||||
|
||||
p_temp = pbuf_alloc(PBUF_TRANSPORT, datalen, PBUF_RAM);
|
||||
if (pbuf_copy (p_temp,p) != ERR_OK) {
|
||||
|
|
1185
app/lwip/core/sntp.c
1185
app/lwip/core/sntp.c
File diff suppressed because it is too large
Load Diff
|
@ -500,7 +500,7 @@ tcp_listen_input(struct tcp_pcb_listen *pcb)
|
|||
/* For incoming segments with the ACK flag set, respond with a
|
||||
RST. */
|
||||
LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n"));
|
||||
tcp_rst(ackno + 1, seqno + tcplen,
|
||||
tcp_rst(ackno, seqno + tcplen,
|
||||
ip_current_dest_addr(), ip_current_src_addr(),
|
||||
tcphdr->dest, tcphdr->src);
|
||||
} else if (flags & TCP_SYN) {//<2F>յ<EFBFBD>SYN<59><4E><EFBFBD><EFBFBD>
|
||||
|
|
|
@ -461,6 +461,7 @@ tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
|
|||
return ERR_MEM;
|
||||
}
|
||||
|
||||
#if !LWIP_NETIF_TX_SINGLE_PBUF
|
||||
/*
|
||||
* Phase 2: Chain a new pbuf to the end of pcb->unsent.
|
||||
*
|
||||
|
@ -510,6 +511,7 @@ tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
|
|||
pos += seglen;
|
||||
queuelen += pbuf_clen(concat_p);
|
||||
}
|
||||
#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */
|
||||
} else {
|
||||
#if TCP_OVERSIZE
|
||||
LWIP_ASSERT("unsent_oversize mismatch (pcb->unsent is NULL)",
|
||||
|
@ -1336,6 +1338,12 @@ tcp_rexmit(struct tcp_pcb *pcb)
|
|||
}
|
||||
seg->next = *cur_seg;
|
||||
*cur_seg = seg;
|
||||
#if TCP_OVERSIZE
|
||||
if (seg->next == NULL) {
|
||||
/* the retransmitted segment is last in unsent, so reset unsent_oversize */
|
||||
pcb->unsent_oversize = 0;
|
||||
}
|
||||
#endif /* TCP_OVERSIZE */
|
||||
|
||||
++pcb->nrtx;
|
||||
|
||||
|
|
|
@ -353,6 +353,8 @@ static void mbedtls_msg_free(pmbedtls_msg *msg)
|
|||
os_free((*msg)->ssl.out_buf);
|
||||
(*msg)->ssl.out_buf = NULL;
|
||||
}
|
||||
if((*msg)->pfinished != NULL)
|
||||
mbedtls_finished_free(&(*msg)->pfinished);
|
||||
#endif
|
||||
mbedtls_entropy_free(&(*msg)->entropy);
|
||||
mbedtls_ssl_free(&(*msg)->ssl);
|
||||
|
@ -427,10 +429,6 @@ static void mbedtls_fail_info(espconn_msg *pinfo, int ret)
|
|||
TLSmsg = pinfo->pssl;
|
||||
lwIP_REQUIRE_ACTION(TLSmsg,exit,);
|
||||
|
||||
if (TLSmsg->quiet) {
|
||||
mbedtls_ssl_close_notify(&TLSmsg->ssl);
|
||||
}
|
||||
|
||||
/* Don't complain to console if we've been told the other end is hanging
|
||||
* up. That's entirely normal and not worthy of the confusion it sows!
|
||||
*/
|
||||
|
@ -441,6 +439,7 @@ static void mbedtls_fail_info(espconn_msg *pinfo, int ret)
|
|||
} else {
|
||||
os_printf("client's data invalid protocol\n");
|
||||
}
|
||||
mbedtls_ssl_close_notify(&TLSmsg->ssl);
|
||||
} else{
|
||||
if (pinfo->preverse != NULL) {
|
||||
os_printf("server handshake failed!\n");
|
||||
|
@ -564,6 +563,11 @@ static void espconn_close_internal(void *arg, netconn_event event_type)
|
|||
ssl_reerr = pssl_recon->pcommon.err;
|
||||
hs_status = pssl_recon->hs_status;
|
||||
if (espconn != NULL) {
|
||||
//clear pcommon parameters.
|
||||
pssl_recon->pcommon.write_flag = false;
|
||||
pssl_recon->pcommon.ptrbuf = NULL;
|
||||
pssl_recon->pcommon.cntr = 0;
|
||||
pssl_recon->pcommon.err = 0;
|
||||
espconn = pssl_recon->preverse;
|
||||
} else {
|
||||
espconn = pssl_recon->pespconn;
|
||||
|
@ -667,6 +671,11 @@ again:
|
|||
offerset += sizeof(file_head) + pfile_param->file_head.file_length;
|
||||
goto again;
|
||||
}
|
||||
/*Optional is load the cert*/
|
||||
if (auth_info->auth_type == ESPCONN_CERT_OWN && os_memcmp(pfile_param->file_head.file_name, "certificate", os_strlen("certificate")) != 0){
|
||||
offerset += sizeof(file_head) + pfile_param->file_head.file_length;
|
||||
goto again;
|
||||
}
|
||||
load_buf = (uint8_t *) os_zalloc( pfile_param->file_head.file_length + FILE_OFFSET);
|
||||
if (load_buf == NULL){
|
||||
os_free(pfile_param);
|
||||
|
@ -839,6 +848,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
|
|||
if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == 0){
|
||||
ret = ESPCONN_OK;
|
||||
break;
|
||||
} else if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY){
|
||||
ret = ESPCONN_OK;
|
||||
mbedtls_ssl_close_notify(&TLSmsg->ssl);
|
||||
} else{
|
||||
break;
|
||||
}
|
||||
|
@ -891,6 +903,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
|
|||
}
|
||||
|
||||
system_soft_wdt_stop();
|
||||
uint8 cpu_freq;
|
||||
cpu_freq = system_get_cpu_freq();
|
||||
system_update_cpu_freq(160);
|
||||
while ((ret = mbedtls_ssl_handshake(&TLSmsg->ssl)) != 0) {
|
||||
|
||||
if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
||||
|
@ -901,6 +916,7 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
|
|||
}
|
||||
}
|
||||
system_soft_wdt_restart();
|
||||
system_update_cpu_freq(cpu_freq);
|
||||
lwIP_REQUIRE_NOERROR(ret, exit);
|
||||
/**/
|
||||
TLSmsg->quiet = mbedtls_handshake_result(TLSmsg);
|
||||
|
@ -937,6 +953,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
|
|||
exit:
|
||||
if (ret != ESPCONN_OK){
|
||||
mbedtls_fail_info(Threadmsg, ret);
|
||||
if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY){
|
||||
Threadmsg->hs_status = ESPCONN_OK;
|
||||
}
|
||||
ets_post(lwIPThreadPrio, NETCONN_EVENT_CLOSE,(uint32)Threadmsg);
|
||||
}
|
||||
return ret;
|
||||
|
|
|
@ -302,6 +302,20 @@ static err_t do_accepted(void *arg, struct tcp_pcb *newpcb, err_t err)
|
|||
lwIP_netconn *newconn = NULL;
|
||||
lwIP_netconn *conn = arg;
|
||||
err = ERR_OK;
|
||||
|
||||
//Avoid two TCP connections coming in simultaneously
|
||||
struct tcp_pcb *pactive_pcb;
|
||||
int active_pcb_num=0;
|
||||
for(pactive_pcb = tcp_active_pcbs; pactive_pcb != NULL; pactive_pcb = pactive_pcb->next){
|
||||
if (pactive_pcb->state == ESTABLISHED ||pactive_pcb->state == SYN_RCVD){
|
||||
active_pcb_num++;
|
||||
if (active_pcb_num > MEMP_NUM_TCP_PCB){
|
||||
ESP_LOG("%s %d active_pcb_number:%d\n",__FILE__, __LINE__,active_pcb_num);
|
||||
return ERR_MEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lwIP_REQUIRE_ACTION(conn, exit, err = ESP_ARG);
|
||||
/* We have to set the callback here even though
|
||||
* the new socket is unknown. conn->socket is marked as -1. */
|
||||
|
@ -738,23 +752,30 @@ int lwip_close(int s)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (sock->conn->state != NETCONN_STATE_ERROR){
|
||||
tcp_recv(sock->conn->tcp, NULL);
|
||||
err = tcp_close(sock->conn->tcp);
|
||||
/*Do not set callback function when tcp->state is LISTEN.
|
||||
Avoid memory overlap when conn->tcp changes from
|
||||
struct tcp_bcb to struct tcp_pcb_listen after lwip_listen.*/
|
||||
if (sock->conn->tcp->state != LISTEN)
|
||||
{
|
||||
if (sock->conn->state != NETCONN_STATE_ERROR){
|
||||
tcp_recv(sock->conn->tcp, NULL);
|
||||
err = tcp_close(sock->conn->tcp);
|
||||
|
||||
if (err != ERR_OK)
|
||||
{
|
||||
/* closing failed, try again later */
|
||||
tcp_recv(sock->conn->tcp, recv_tcp);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* closing succeeded */
|
||||
remove_tcp(sock->conn);
|
||||
free_netconn(sock->conn);
|
||||
free_socket(sock);
|
||||
return ERR_OK;
|
||||
if (err != ERR_OK)
|
||||
{
|
||||
/* closing failed, try again later */
|
||||
tcp_recv(sock->conn->tcp, recv_tcp);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/* closing succeeded */
|
||||
remove_tcp(sock->conn);
|
||||
} else {
|
||||
tcp_close(sock->conn->tcp);
|
||||
}
|
||||
free_netconn(sock->conn);
|
||||
free_socket(sock);
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int lwip_write(int s, const void *data, size_t size)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "mem.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "espconn.h"
|
||||
#include "sys/espconn_mbedtls.h"
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/dns.h"
|
||||
|
||||
|
|
|
@ -576,8 +576,11 @@ static int esp8266_Sleep( sqlite3_vfs * vfs, int microseconds )
|
|||
|
||||
static int esp8266_CurrentTime( sqlite3_vfs * vfs, double * result )
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
*result = t / 86400.0 + 2440587.5;
|
||||
// This is stubbed out until we have a working RTCTIME solution;
|
||||
// as it stood, this would always have returned the UNIX epoch.
|
||||
// time_t t = time(NULL);
|
||||
// *result = t / 86400.0 + 2440587.5;
|
||||
*result = 2440587.5;
|
||||
dbg_printf("esp8266_CurrentTime: %g\n", *result);
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ STD_CFLAGS=-std=gnu11 -Wimplicit
|
|||
# makefile at its root level - these are then overridden
|
||||
# for a subtree within the makefile rooted therein
|
||||
#
|
||||
DEFINES += -DESP_INIT_DATA_DEFAULT="\"$(SDK_DIR)/bin/esp_init_data_default.bin\""
|
||||
DEFINES += -DESP_INIT_DATA_DEFAULT="\"$(SDK_DIR)/bin/esp_init_data_default_v05.bin\""
|
||||
|
||||
#############################################################
|
||||
# Recursion Magic - Don't touch this!!
|
||||
|
|
|
@ -6,3 +6,4 @@
|
|||
!.gitignore
|
||||
!blank.bin
|
||||
!esp_init_data_default.bin
|
||||
!esp_init_data_default_v05.bin
|
||||
|
|
|
@ -116,7 +116,6 @@ SECTIONS
|
|||
/* *libcrypto.a:*(.literal .text) - tested that safe to keep in iROM */
|
||||
/* *libdriver.a:*(.literal .text) - not used anywhere in NodeMCU */
|
||||
/* *libespnow.a:*(.literal .text) - not used anywhere in NodeMCU */
|
||||
/* *libmesh.a:*(.literal .text) - not used anywhere in NodeMCU */
|
||||
/* *liblwip_536.a:*(.literal .text) - source-based library used instead */
|
||||
/* *libpwm.a:*(.literal .text) - our own implementation used instead */
|
||||
/* *libwpa.a:*(.literal .text) - tested that safe to keep in iROM */
|
||||
|
|
Loading…
Reference in New Issue