Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add experimental SSL to host emulator using axtls-8266 #1852

Merged
merged 4 commits into from
Sep 29, 2019

Conversation

mikee47
Copy link
Contributor

@mikee47 mikee47 commented Sep 29, 2019

No description provided.

Don't need replacements/time.c for host build, select via component.mk

Update axtls-8266 patch file:

* vprintf -> m_vprintf
* putc -> m_putc and ensure `putc`macro is undefined
* Remove replacements/libc.c
…` to be non-null.

Ensure code has separate null checks.
…s deleted by HttpRequest::reset()

If we wanted to do this sort of thing we'd either need an additional flag to indicate stream ownership,
use a shared_ptr, or some other mechanism.
@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

Works OK under Windows, but in Linux I'm getting memory allocation errors. Some assistance in tracking this down would be much appreciated!

Testing using the Basic_Ssl sample, this is what happens:

Welcome to the Sming Host emulator

host_flashmem_init: Opened "out/Host/debug/firmware/flash.bin", size = 0x00400000
host_init_bootloader: ROM count = 2, current = 0, #0: 0x2000, #1: 0x202000
host_lwip_init: Initialising LWIP
host_lwip_init: Using interface 'tap0', gateway = 192.168.13.1, netmask = 255.255.255.0; using ip = 192.168.13.10
host_lwip_init: MAC: c6:c4:0f:75:33:e0
main: If required, you may start terminal application(s) now
pause: Hit ENTER to continue.

main: >> Starting Sming <<

[New Thread 0xf730ab40 (LWP 11514)]
Ready for SSL tests
978081 SSID 'PleaseEnterSSID' not found
IF_UP, AP: Host WiFi
IP_CHANGE, ip: 192.168.13.10, netmask: 255.255.255.0, gateway: 192.168.13.1
978097 Connected. Got IP: 192.168.13.10
double free or corruption (out)

Thread 1 "app" received signal SIGABRT, Aborted.
0xf7fd5079 in __kernel_vsyscall ()
(gdb) bt
#0  0xf7fd5079 in __kernel_vsyscall ()
#1  0xf7c3d832 in __libc_signal_restore_set (set=0xffffab9c) at ../sysdeps/unix/sysv/linux/nptl-signals.h:80
#2  __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:48
#3  0xf7c3ecc1 in __GI_abort () at abort.c:79
#4  0xf7c7fbd3 in __libc_message (action=do_abort, fmt=<optimised out>) at ../sysdeps/posix/libc_fatal.c:181
#5  0xf7c867ed in malloc_printerr (str=str@entry=0xf7d9282c "double free or corruption (out)") at malloc.c:5350
#6  0xf7c881bb in _int_free (av=0xf7de87a0 <main_arena>, p=0x565c19d8, have_lock=<optimised out>) at malloc.c:4278
#7  0xf7c841a9 in __GI__IO_setb (f=0x565c1880, b=0x0, eb=0x0, a=0) at genops.c:349
#8  0xf7c8275f in _IO_new_file_close_it (fp=0x565c1880) at fileops.c:154
#9  0xf7c75861 in _IO_new_fclose (fp=<optimised out>) at iofclose.c:53
#10 0xf7cc004d in __tzfile_read (file=<optimised out>, extra=0, extrap=0x0) at tzfile.c:459
#11 0xf7cbf54c in tzset_internal (always=1) at tzset.c:406
#12 0xf7cbf6ca in tzset_internal (always=1) at tzset.c:550
#13 __tzset () at tzset.c:552
#14 0xf7cbe584 in __GI_mktime (tp=0xffffb110) at mktime.c:588
#15 0x56594930 in asn1_get_utc_time (
    buf=buf@entry=0x565bf139 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", 
    offset=offset@entry=0xffffb1c8, t=t@entry=0x565c1794) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/asn1.c:348
#16 0x56594e7c in asn1_validity (
    cert=0x565bf139 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", 
    offset=0xffffb1c8, x509_ctx=0x565c1760) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/asn1.c:404
#17 0x5658ce0b in x509_new (
    cert=0x565bf139 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", len=0x0, 
    ctx=0x565befb0) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/x509.c:101
#18 0x5658a80f in process_certificate (ssl=0x565beec0, x509_ctx=0x565bef14) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:2174
#19 0x56588c31 in do_clnt_handshake (ssl=0x565beec0, handshake_type=11, buf=0x565bf12f "\v", hs_len=3109)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1_clnt.c:107
#20 0x5658bcf4 in do_handshake (read_len=<optimised out>, buf=<optimised out>, ssl=0x565beec0)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:1611
#21 basic_read (ssl=0x565beec0, in_data=0xffffb7f8) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:1487
#22 0x5658be2c in ssl_read (ssl=0x565beec0, in_data=0xffffb7f8) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:314
#23 0x5658847c in axl_ssl_read (ssl=0x565beec0, tcp=0x565b694c <memp_memory_TCP_PCB_base+492>, pin=0x565b8060 <memp_memory_PBUF_POOL_base+4256>, pout=0xffffb848)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/compat/lwipr_compat.c:135
#24 0x565795a8 in TcpConnection::internalOnReceive (this=0x565beaf0, p=0x565b8060 <memp_memory_PBUF_POOL_base+4256>, err=0 '\000')
    at /home/mike/sming-dev/Sming/Core/Network/TcpConnection.cpp:520
#25 0x56565ff3 in tcp_input ()
#26 0x56572ac8 in ip4_input ()
#27 0x56574042 in ethernet_input ()
#28 0x5657482a in tapif_select ()
#29 0x5655b93b in host_lwip_service ()
#30 0x565596ae in main (argc=<optimised out>, argv=<optimised out>) at /home/mike/sming-dev/Sming/Arch/Host/Components/hostlib/startup.cpp:245

@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

Calling tzset() in the application simply changes the error:

Welcome to the Sming Host emulator

host_flashmem_init: Opened "out/Host/debug/firmware/flash.bin", size = 0x00400000
host_init_bootloader: ROM count = 2, current = 0, #0: 0x2000, #1: 0x202000
host_lwip_init: Initialising LWIP
host_lwip_init: Using interface 'tap0', gateway = 192.168.13.1, netmask = 255.255.255.0; using ip = 192.168.13.10
host_lwip_init: MAC: c6:c4:0f:75:33:e0
main: If required, you may start terminal application(s) now
pause: Hit ENTER to continue.

main: >> Starting Sming <<

[New Thread 0xf730ab40 (LWP 11680)]
Ready for SSL tests
917183 SSID 'PleaseEnterSSID' not found
IF_UP, AP: Host WiFi
IP_CHANGE, ip: 192.168.13.10, netmask: 255.255.255.0, gateway: 192.168.13.1
917203 Connected. Got IP: 192.168.13.10
realloc(): invalid next size

Thread 1 "app" received signal SIGABRT, Aborted.
0xf7fd5079 in __kernel_vsyscall ()
(gdb) bt
#0  0xf7fd5079 in __kernel_vsyscall ()
#1  0xf7c3d832 in __libc_signal_restore_set (set=0xffffac4c) at ../sysdeps/unix/sysv/linux/nptl-signals.h:80
#2  __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:48
#3  0xf7c3ecc1 in __GI_abort () at abort.c:79
#4  0xf7c7fbd3 in __libc_message (action=do_abort, fmt=<optimised out>) at ../sysdeps/posix/libc_fatal.c:181
#5  0xf7c867ed in malloc_printerr (str=str@entry=0xf7d8f0e6 "realloc(): invalid next size") at malloc.c:5350
#6  0xf7c8a6b3 in _int_realloc (av=av@entry=0xf7de87a0 <main_arena>, oldp=oldp@entry=0x565c2538, oldsize=oldsize@entry=32, nb=544) at malloc.c:4534
#7  0xf7c8b689 in __GI___libc_realloc (oldmem=0x565c2540, bytes=532) at malloc.c:3230
#8  0x56575b53 in MallocCount::__wrap_realloc (ptr=0x565c2540, size=516) at /home/mike/sming-dev/Sming/Components/malloc_count/malloc_count.cpp:283
#9  0x5658f36a in more_comps (bi=bi@entry=0x565c2520, n=129) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/crypto/bigint.c:1072
#10 0x56590504 in comp_left_shift (num_shifts=127, biR=0x565c2520) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/crypto/bigint.c:600
#11 bi_set_mod (ctx=0x565c2190, bim=0x565c2280, mod_offset=0) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/crypto/bigint.c:775
#12 0x5658ec1d in RSA_pub_key_new (ctx=0x565c1ec0, modulus=0x565c2050 "\301x\204\030<.", mod_len=256, pub_exp=0x565c2170 "\001", pub_len=3)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/crypto/rsa.c:95
#13 0x56595184 in asn1_public_key (
    cert=0x565bf859 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", 
    offset=0xffffb1c8, x509_ctx=0x565c1e80) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/asn1.c:548
#14 0x5658ce8f in x509_new (
    cert=0x565bf859 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", len=0x0, 
    ctx=0x565bf6c0) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/x509.c:107
#15 0x5658a847 in process_certificate (ssl=0x565beec0, x509_ctx=0x565bef14) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:2174
#16 0x56588c69 in do_clnt_handshake (ssl=0x565beec0, handshake_type=11, buf=0x565bf84f "\v", hs_len=3109)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1_clnt.c:107
#17 0x5658bd2c in do_handshake (read_len=<optimised out>, buf=<optimised out>, ssl=0x565beec0)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:1611
#18 basic_read (ssl=0x565beec0, in_data=0xffffb7f8) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:1487
#19 0x5658be64 in ssl_read (ssl=0x565beec0, in_data=0xffffb7f8) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/tls1.c:314
#20 0x565884b4 in axl_ssl_read (ssl=0x565beec0, tcp=0x565b694c <memp_memory_TCP_PCB_base+492>, pin=0x565b8060 <memp_memory_PBUF_POOL_base+4256>, pout=0xffffb848)
    at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/compat/lwipr_compat.c:135
#21 0x565795e0 in TcpConnection::internalOnReceive (this=0x565bf410, p=0x565b8060 <memp_memory_PBUF_POOL_base+4256>, err=0 '\000')
    at /home/mike/sming-dev/Sming/Core/Network/TcpConnection.cpp:520
#22 0x56566023 in tcp_input ()
#23 0x56572af8 in ip4_input ()
#24 0x56574072 in ethernet_input ()
#25 0x5657485a in tapif_select ()
#26 0x5655b96b in host_lwip_service ()
#27 0x565596de in main (argc=<optimised out>, argv=<optimised out>) at /home/mike/sming-dev/Sming/Arch/Host/Components/hostlib/startup.cpp:245

@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

Note: I'm building with ENABLE_MALLOC_COUNT= and optimisations disabled completely.

@mikee47 mikee47 changed the title Add axtls-8266 to host emulator Add axtls-8266 to host emulator (WIP) Sep 29, 2019
@mikee47 mikee47 changed the title Add axtls-8266 to host emulator (WIP) [WIP] Add axtls-8266 to host emulator Sep 29, 2019
@mikee47 mikee47 changed the title [WIP] Add axtls-8266 to host emulator [WIP] Add SSL to host emulator using axtls-8266 Sep 29, 2019
@icodk
Copy link

icodk commented Sep 29, 2019

@mikee47(Not directly related to this thread) I can see that you are testing / developing on Windows. At the same time Windows is only officially supported up to SDK 1.5.
I am interested in using Sming on windows 10 but abit confused about the most up to date versions combination of Sming, SDK and compiler on Windows 10.
Could you please list what can be used and how to get there, or link to existing documentation ?

Getting Started: Linux/Windows on https://sming.readthedocs.io
under Requirements (Windows)

For Windows, make sure your MinGW distro is up to date. If you run gcc –version you should get gcc (MinGW.org GCC-6.3.0-1) 6.3.0 or later. If it’s older, execute these commands:

mingw-get update
mingw-get upgrade

Mygcc --version(it is --version and not -version)
Shows gcc (GCC) 3.4.4 (msys special).
Running

mingw-get update
mingw-get upgrade

Shows lots of messages similar to

upgrade: make-3.81-3-msys-1.0.13-doc.tar.lzma
mingw-get: *** INFO *** package make-3.81-3-msys-1.0.13-doc.tar.lzma is up to date
upgrade: make-3.81-3-msys-1.0.13-lic.tar.lzma
mingw-get: *** INFO *** package make-3.81-3-msys-1.0.13-lic.tar.lzma is up to date

However checking gcc version is still the same: gcc (GCC) 3.4.4 (msys special).

Thanks

@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

@icodk Looks like it's not picking gcc up from the right location. Maybe check your path is correct?

S:\sandboxes\sming-dev\docs>where gcc
C:\MinGW\bin\gcc.exe
C:\MinGW\msys\1.0\bin\gcc.exe

@slaff
Copy link
Contributor

slaff commented Sep 29, 2019

I have compiled Basic_Ssl sample using the following command:

make SMING_ARCH=Host ENABLE_MALLOC_COUNT=0  ENABLE_GDB=1 \
     ENABLE_LWIPDEBUG=1 DEBUG_VERBOSE_LEVEL=3 \
     SSL_DEBUG=1

After that added Spiffs with

make flash

And ran the code using valgrind

make valgrind

There were no reported issues or memory leaks. But also the current Basic_Ssl sample was not doing much because a HEAD request was sending 302 redirection. So I changed the application code to send a GET request and ran the code again under valgrind. The application crashed.
The debug output is proving information that the remote server is sending an error that the SSL HMAC is not correct?!

ssl->need_bytes=10064 > 6859
1902420 axl_ssl_read: Read bytes: 0
...
2804042 axl_ssl_read: Read bytes: 0

2855697 ax_port_write: send_raw_packet length 69(69)

2855715 axl_ssl_read: Read bytes: -262  <--- SSL_ERROR_INVALID_HMAC

You can put a debug breakpoint at lwip_compat.c line 138.

My wild guess is that lwip_compat is not handling correctly multiple SSL packets inside one TCP packet. In the host arch our network buffer is bigger than the one in esp8266. The following debug messages need to be investigated:

2351449 SSL: Decrypted data len 2929
2351461 TCP received: 2929 bytes
....

2701978 axl_ssl_read: Read bytes: 1415

2701995 axl_ssl_read: Read bytes: 0

2702017 axl_ssl_read: Read bytes: 24

2702024 axl_ssl_read: Got more than one SSL packet inside one TCP packet
....

I will keep you posted when I find something more...

@slaff
Copy link
Contributor

slaff commented Sep 29, 2019

I will keep you posted when I find something more...

SSL under host emulator on Linux works for some URLs. For example: https://x.attachix.com and https://google.com. For others it correctly displays wrong handshake (https://attachix.com for example - does not accept the algorithms that are coming with axTLS).

My wild guess is that lwip_compat is not handling correctly multiple SSL

The handling of multiple SSL packets works as expected.

The interesting question is why Host LWIP2 + axTLS fails with https://www.grc.com/fingerprints.htm. I tried to debug it and I can see that at some point the remote server does not send all expected data and the client gets stuck. Have to compare network traffic to see what is going on, but that probably will not be today...

@slaff slaff added this to the 4.0.0 milestone Sep 29, 2019
@slaff
Copy link
Contributor

slaff commented Sep 29, 2019

#14 0xf7cbe584 in __GI_mktime (tp=0xffffb110) at mktime.c:588
#15 0x56594930 in asn1_get_utc_time (
    buf=buf@entry=0x565bf139 "0\202\aZ0\202\006B\240\003\002\001\002\002\020\a\247\211L\372j\177\357됙oY\331\364\002\060\r\006\t*\206H\206\367\r\001\001\v\005", 
    offset=offset@entry=0xffffb1c8, t=t@entry=0x565c1794) at /home/mike/sming-dev/Sming/Components/axtls-8266/axtls-8266/ssl/asn1.c:348
#16 0x56594e7c in asn1_validity (

@mikee47 I looked more closely at your backtrace: I don't have the problem that you are reporting. Why don't you try to run app the using the KataCoda Env: https://www.katacoda.com/slaff/scenarios/sming-host-emulator ?

@slaff slaff changed the title [WIP] Add SSL to host emulator using axtls-8266 Add experimental SSL to host emulator using axtls-8266 Sep 29, 2019
@slaff slaff removed the 3 - Review label Sep 29, 2019
@slaff slaff merged commit 588b4d0 into SmingHub:develop Sep 29, 2019
@mikee47 mikee47 deleted the feature/host-ssl branch September 29, 2019 16:17
@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

@slaff Thanks for the feedback. I get a strong feeling that the heap is getting corrupted somewhere else, will probably stumble across it when I'm not looking!

@icodk
Copy link

icodk commented Sep 29, 2019

@mikee47
Here is what I get

C:\Dev>where gcc
C:\tools\mingw64\msys\1.0\bin\gcc.exe
C:\tools\mingw64\bin\gcc.exe

@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

@icodk It's the second one you need so that should go first.

@icodk
Copy link

icodk commented Sep 29, 2019

@mikee47 Now I get

C:\WINDOWS\system32>where gcc
C:\tools\mingw64\bin\gcc.exe
C:\tools\mingw64\msys\1.0\bin\gcc.exe

and version :

C:\WINDOWS\system32>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Running

mingw-get update
mingw-get upgrade

and then
gcc --version
gives the same version as before:

C:\WINDOWS\system32>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Any idea what and how to get the new compiler ?
Thanks in advance

@mikee47
Copy link
Contributor Author

mikee47 commented Sep 29, 2019

@icodk You're using the https://sourceforge.net/projects/mingw-w64/ project. For this, we need the original 32-bit MinGW which you can find here https://osdn.net/projects/mingw/releases/68260 (obtained via http://www.mingw.org/).
Download mingw-get-setup.exe and should be straightforward from there.

@mikee47
Copy link
Contributor Author

mikee47 commented Oct 1, 2019

@icodk Have you had any success yet?

@icodk
Copy link

icodk commented Oct 1, 2019

@mikee47 I managed to install the new (est?) compiler:

C:\MinGW\bin>gcc --version
gcc (MinGW.org GCC-8.2.0-3) 8.2.0....

It was a bit tricky because mingw-get-setup.exe is a UI with many choices.
Anyway, I then renamed C:\tools\mingw64 to C:\tools\mingw64_old
and tried to compile existing application and got the following error:

C:\tools\Sming\Sming/Makefile-rboot.mk:81: /C/tools/Sming/Sming/Makefile-windows.mk: No such file or directory
make: *** No rule to make target `/C/tools/Sming/Sming/Makefile-windows.mk'.  Stop.

Renaming C:\tools\mingw64_old to C:\tools\mingw64 I can again compile my app (with the old compiler probably)
Running where gcc I get the correct sequence I assume:
with C:\tools\mingw64_old
C:\MinGW\bin\gcc.exe
and with C:\tools\mingw64

C:\MinGW\bin\gcc.exe
C:\tools\mingw64\bin\gcc.exe
C:\tools\mingw64\msys\1.0\bin\gcc.exe

Where can I tell make which compile to use. It obviously not looking in the path or am I missing something ?
Thanks for helping me out

@mikee47
Copy link
Contributor Author

mikee47 commented Oct 1, 2019

Quite a bit has changed from version 3.8, so may I suggest compiling the Basic_Blink sample as an initial check. Then take a look here for upgrade instructions https://sming.readthedocs.io/en/latest/upgrading/3.8-4.0.html.

@icodk
Copy link

icodk commented Oct 1, 2019

@mikee47 I am actually using SDK 1.5.3(aec24ac9) and Sming: 2.1.0.
It works great but it is time to upgrade. I already have a version that I can build with SDK 3.0.0 and Sming 3.5.1 but all this is on Linux. Changing /upgrading on Windows might break my environment and it it is also stated in github that Windows is not supported as
esp-open-sdk (v1.5.x, v2.0.0, v3.0 **) with n/a under Windows.
Is it possible to use Sming with the latest SDK (3.0.1 ?) on Windows and what are the steps to get there ?
Thanks for your help

@mikee47
Copy link
Contributor Author

mikee47 commented Oct 1, 2019

@icodk See https://sming.readthedocs.io/en/latest/arch/esp8266/getting-started/windows.html. As it states, Windows uses the 'unofficial development kit' (UDK)The SDK for Windows is known as the UDK, pre-built and provides similar functionality. Interestingly though, espressif GCC is version 6.3 for that but only 4.8 under Linux.

I run Windows 10 as my main development system, with Ubuntu under VirtualBox. The GIT repos are on Windows, accessed via shared drives under Linux. BUT I use separate worktrees and checkin/checkout to sync the two. Hence, separate environments for both. Works very well.

To use SDK 3.0.1 see https://sming.readthedocs.io/en/latest/_inc/Sming/Arch/Esp8266/Components/esp8266/index.html.

@icodk
Copy link

icodk commented Oct 1, 2019

@mikee47 Thanks for the information. I will look at it in the coming days and let you know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants