Gast
#6834859
Hi,
ich habe aktuell ein Problem bei der Nutzung des Espressif SDK für den
ESP8266.
Wenn ich versuche, per HTTP Post größere Datenmengen (im konkreten Fall
ein SSL Zertifikat) zu übertragen, kommen nur Bruchstücke davon an.
Im konkreten Fall ist der Payload im POST-Request ca 2700 Byte groß,
davon werden nur 896 Byte gelesen.
Es ist auch egal, was im Payload steht, auch mit simplem Text etc werden
immer nur 896 Byte empfangen.
Das sieht doch nach irgendeinem Buffer aus.
Vielleicht hat ja jemand dieses Problem mit dem Espressif SDK schonmal
gehabt oder weiss einen anderen Ansatz (chunked ?)
Was ich bis jetzt getestet habe, alles brachte keine Veränderung:
-buf als globale Variable buf[4096] definiert.
Keine Veränderung.
-Durch wiederholtes Aufrufen von httpd_req_recv(req, buf+n*800, 800)
800 Byte Chunks eingelesen. Gleiches Endergebnis
-Im SDK mit make menuconfig mit diversen Buffern ( Task buffer, http
request buffer) experimentiert und neu compiliert und geflashed.
Keine Veränderung.
Der folgende Code macht das Einlesen:
esp_err_t cfgsav_post_handler(httpd_req_t *req)
{
...
char* buf;
size_t buf_len;
buf_len=req->content_len;
tcpip_adapter_ip_info_t ip_info;
tcpip_adapter_dns_info_t dns_info;
cfg_err = 0;
if(httpd_basic_auth(req, AUTHUSER, config.station_password) ==
ESP_OK)
{
if (buf_len > 1)
{
buf = malloc(buf_len);
ret = httpd_req_recv(req, buf, buf_len);
...
Der komplette Code - derzeit allerdings noch ohne Übertragung der
Zertifikate - findet sich unter
https://sourceforge.net/projects/wlan-controlled-switch/
Dort unter main/files/server.c
Dieser Code dient zum Einlesen der über Webinterface erstellten
Konfiguration. Die Zertifikate sind derzeit noch fest in der SW
hinterlegt und diesen der Server-Validierung für OTA und MQTTs.
Leider unterstützt httpd_req_recv den Typ multipart/form-data nicht,
ansonsten könnte ich die Zertifikate per <input type=file> direkt aus
einer Datei hochladen. Daher bin ich auf ein <textarea> Feld zum
Einfügen der Zertifikate ausgewichen.
Danke & gruß
Tobi