-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Pass Client parameter to httpUpdate to use any BearSSL security method for a firmware update (with example) #4832
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
Changes from all commits
8c3edfe
1bf21cd
7535a40
0a644f2
3cfa6e9
3ad2b07
57b3a9f
8e23576
a068dca
bf1188e
deb4a5b
b34228f
6088be9
86a2d12
1ed6f4a
6cc188e
48ac7ca
2c00e09
e136972
1101809
0fb35d1
f100573
e216ce8
45eb148
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,6 +12,8 @@ | |
|
||
#include <ESP8266HTTPClient.h> | ||
|
||
#include <WiFiClient.h> | ||
|
||
#define USE_SERIAL Serial | ||
|
||
ESP8266WiFiMulti WiFiMulti; | ||
|
@@ -40,34 +42,39 @@ void loop() { | |
// wait for WiFi connection | ||
if ((WiFiMulti.run() == WL_CONNECTED)) { | ||
|
||
WiFiClient client; | ||
|
||
HTTPClient http; | ||
|
||
USE_SERIAL.print("[HTTP] begin...\n"); | ||
// configure traged server and url | ||
//http.begin("https://192.168.1.12/test.html", "7a 9c f4 db 40 d3 62 5a 6e 21 bc 5c cc 66 c8 3e a1 45 59 38"); //HTTPS | ||
http.begin("http://192.168.1.12/test.html"); //HTTP | ||
if (http.begin((Client &)client, "http://tls.mbed.org/")) { // HTTP | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Any reason this one picked? Isn't tls.mbed.org https-only? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also, thanks for checking return codes! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will change this in http://jigsaw.w3.org/HTTP/connection.html |
||
|
||
|
||
USE_SERIAL.print("[HTTP] GET...\n"); | ||
// start connection and send HTTP header | ||
int httpCode = http.GET(); | ||
USE_SERIAL.print("[HTTP] GET...\n"); | ||
// start connection and send HTTP header | ||
int httpCode = http.GET(); | ||
|
||
// httpCode will be negative on error | ||
if (httpCode > 0) { | ||
// HTTP header has been send and Server response header has been handled | ||
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode); | ||
// httpCode will be negative on error | ||
if (httpCode > 0) { | ||
// HTTP header has been send and Server response header has been handled | ||
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode); | ||
|
||
// file found at server | ||
if (httpCode == HTTP_CODE_OK) { | ||
String payload = http.getString(); | ||
USE_SERIAL.println(payload); | ||
// file found at server | ||
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { | ||
String payload = http.getString(); | ||
USE_SERIAL.println(payload); | ||
} | ||
} else { | ||
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); | ||
} | ||
|
||
http.end(); | ||
} else { | ||
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); | ||
USE_SERIAL.printf("Unable to connect\n"); | ||
} | ||
|
||
http.end(); | ||
} | ||
|
||
delay(10000); | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,11 +42,13 @@ void loop() { | |
|
||
HTTPClient http; | ||
|
||
WiFiClient client; | ||
|
||
USE_SERIAL.print("[HTTP] begin...\n"); | ||
|
||
// configure server and url | ||
http.begin("http://192.168.1.12/test.html"); | ||
//http.begin("192.168.1.12", 80, "/test.html"); | ||
http.begin((Client&) client, "http://jigsaw.w3.org/HTTP/connection.html"); | ||
//http.begin("jigsaw.w3.org", 80, "/HTTP/connection.html"); | ||
|
||
USE_SERIAL.print("[HTTP] GET...\n"); | ||
// start connection and send HTTP header | ||
|
@@ -65,7 +67,7 @@ void loop() { | |
uint8_t buff[128] = { 0 }; | ||
|
||
// get tcp stream | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we get rid of the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually, I see later on that you still have a "getStreamPtr()" method with the new one, too. Any reason not to just keep using it? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I do not quite understand you here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I understand you now. The getStreamPtr() is kept as part of the existing API, however in the examples the unneeded call to getStreamPtr() has been removed. |
||
WiFiClient * stream = http.getStreamPtr(); | ||
WiFiClient * stream = &client; | ||
|
||
// read all data from server | ||
while (http.connected() && (len > 0 || len == -1)) { | ||
|
@@ -99,4 +101,3 @@ void loop() { | |
|
||
delay(10000); | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/** | ||
StreamHTTPClient.ino | ||
|
||
Created on: 24.05.2015 | ||
|
||
*/ | ||
|
||
#include <Arduino.h> | ||
|
||
#include <ESP8266WiFi.h> | ||
#include <ESP8266WiFiMulti.h> | ||
|
||
#include <ESP8266HTTPClient.h> | ||
|
||
#define USE_SERIAL Serial | ||
|
||
ESP8266WiFiMulti WiFiMulti; | ||
|
||
void setup() { | ||
|
||
USE_SERIAL.begin(115200); | ||
// USE_SERIAL.setDebugOutput(true); | ||
|
||
USE_SERIAL.println(); | ||
USE_SERIAL.println(); | ||
USE_SERIAL.println(); | ||
|
||
for (uint8_t t = 4; t > 0; t--) { | ||
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t); | ||
USE_SERIAL.flush(); | ||
delay(1000); | ||
} | ||
|
||
WiFi.mode(WIFI_STA); | ||
WiFiMulti.addAP("SSID", "PASSWORD"); | ||
|
||
} | ||
|
||
void loop() { | ||
// wait for WiFi connection | ||
if ((WiFiMulti.run() == WL_CONNECTED)) { | ||
|
||
HTTPClient http; | ||
|
||
BearSSL::WiFiClientSecure client; | ||
|
||
bool mfln = client.probeMaxFragmentLength("tls.mbed.org", 443, 1024); | ||
USE_SERIAL.printf("\nConnecting to https://tls.mbed.org\n"); | ||
USE_SERIAL.printf("MFLN supported: %s\n", mfln ? "yes" : "no"); | ||
if (mfln) { | ||
client.setBufferSizes(1024, 1024); | ||
} | ||
|
||
USE_SERIAL.print("[HTTP] begin...\n"); | ||
|
||
// configure server and url | ||
const uint8_t fingerprint[20] = {0xEB, 0xD9, 0xDF, 0x37, 0xC2, 0xCC, 0x84, 0x89, 0x00, 0xA0, 0x58, 0x52, 0x24, 0x04, 0xE4, 0x37, 0x3E, 0x2B, 0xF1, 0x41}; | ||
client.setFingerprint(fingerprint); | ||
|
||
//if (http.begin("jigsaw.w3.org", 443, "/HTTP/connection.html", true)) { | ||
if (http.begin((Client&) client, "https://tls.mbed.org/")) { | ||
|
||
USE_SERIAL.print("[HTTP] GET...\n"); | ||
// start connection and send HTTP header | ||
int httpCode = http.GET(); | ||
if (httpCode > 0) { | ||
// HTTP header has been send and Server response header has been handled | ||
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode); | ||
|
||
// file found at server | ||
if (httpCode == HTTP_CODE_OK) { | ||
|
||
// get lenght of document (is -1 when Server sends no Content-Length header) | ||
int len = http.getSize(); | ||
|
||
// create buffer for read | ||
uint8_t buff[128] = { 0 }; | ||
|
||
// get tcp stream | ||
WiFiClient * stream = &client; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same as above, no more "get tcp stream" with your change. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. getStreamPtr() has been removed from the example |
||
|
||
// read all data from server | ||
while (http.connected() && (len > 0 || len == -1)) { | ||
// get available data size | ||
size_t size = stream->available(); | ||
|
||
if (size) { | ||
// read up to 128 byte | ||
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); | ||
|
||
// write it to Serial | ||
USE_SERIAL.write(buff, c); | ||
|
||
if (len > 0) { | ||
len -= c; | ||
} | ||
} | ||
delay(1); | ||
} | ||
|
||
USE_SERIAL.println(); | ||
USE_SERIAL.print("[HTTP] connection closed or file end.\n"); | ||
|
||
} | ||
} else { | ||
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); | ||
} | ||
|
||
http.end(); | ||
} else { | ||
USE_SERIAL.printf("Unable to connect\n"); | ||
} | ||
} | ||
|
||
delay(10000); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't there no need for the cast
(Client&)
here and in the other examples? Your prototype will make the C++ compiler pass the pointer no matter what, no?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You will be right. I'll check it and then change it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The cast has been removed