mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-20 10:24:18 +03:00
Merge branch 'master' into httpClient
This commit is contained in:
@ -22,15 +22,16 @@ extern "C" {
|
|||||||
|
|
||||||
ArduinoOTAClass::ArduinoOTAClass()
|
ArduinoOTAClass::ArduinoOTAClass()
|
||||||
: _port(0)
|
: _port(0)
|
||||||
|
, _udp_ota(0)
|
||||||
|
, _initialized(false)
|
||||||
, _state(OTA_IDLE)
|
, _state(OTA_IDLE)
|
||||||
, _size(0)
|
, _size(0)
|
||||||
, _cmd(0)
|
, _cmd(0)
|
||||||
, _ota_port(0)
|
, _ota_port(0)
|
||||||
, _start_callback(NULL)
|
, _start_callback(NULL)
|
||||||
, _end_callback(NULL)
|
, _end_callback(NULL)
|
||||||
, _progress_callback(NULL)
|
|
||||||
, _error_callback(NULL)
|
, _error_callback(NULL)
|
||||||
, _udp_ota(0)
|
, _progress_callback(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,9 +126,13 @@ struct SSDPTimer {
|
|||||||
|
|
||||||
SSDPClass::SSDPClass() :
|
SSDPClass::SSDPClass() :
|
||||||
_server(0),
|
_server(0),
|
||||||
|
_timer(new SSDPTimer),
|
||||||
_port(80),
|
_port(80),
|
||||||
|
_respondToPort(0),
|
||||||
_pending(false),
|
_pending(false),
|
||||||
_timer(new SSDPTimer)
|
_delay(0),
|
||||||
|
_process_time(0),
|
||||||
|
_notify_time(0)
|
||||||
{
|
{
|
||||||
_uuid[0] = '\0';
|
_uuid[0] = '\0';
|
||||||
_modelNumber[0] = '\0';
|
_modelNumber[0] = '\0';
|
||||||
@ -300,6 +304,8 @@ void SSDPClass::_update(){
|
|||||||
case VALUE:
|
case VALUE:
|
||||||
if(cr == 2){
|
if(cr == 2){
|
||||||
switch(header){
|
switch(header){
|
||||||
|
case START:
|
||||||
|
break;
|
||||||
case MAN:
|
case MAN:
|
||||||
#ifdef DEBUG_SSDP
|
#ifdef DEBUG_SSDP
|
||||||
DEBUG_SSDP.printf("MAN: %s\n", (char *)buffer);
|
DEBUG_SSDP.printf("MAN: %s\n", (char *)buffer);
|
||||||
|
@ -92,6 +92,7 @@ class SSDPClass{
|
|||||||
|
|
||||||
UdpContext* _server;
|
UdpContext* _server;
|
||||||
SSDPTimer* _timer;
|
SSDPTimer* _timer;
|
||||||
|
uint16_t _port;
|
||||||
|
|
||||||
IPAddress _respondToAddr;
|
IPAddress _respondToAddr;
|
||||||
uint16_t _respondToPort;
|
uint16_t _respondToPort;
|
||||||
@ -101,7 +102,6 @@ class SSDPClass{
|
|||||||
unsigned long _process_time;
|
unsigned long _process_time;
|
||||||
unsigned long _notify_time;
|
unsigned long _notify_time;
|
||||||
|
|
||||||
uint16_t _port;
|
|
||||||
char _schemaURL[SSDP_SCHEMA_URL_SIZE];
|
char _schemaURL[SSDP_SCHEMA_URL_SIZE];
|
||||||
char _uuid[SSDP_UUID_SIZE];
|
char _uuid[SSDP_UUID_SIZE];
|
||||||
char _friendlyName[SSDP_FRIENDLY_NAME_SIZE];
|
char _friendlyName[SSDP_FRIENDLY_NAME_SIZE];
|
||||||
|
@ -47,14 +47,10 @@ File uploadFile;
|
|||||||
|
|
||||||
|
|
||||||
void returnOK() {
|
void returnOK() {
|
||||||
server.sendHeader("Connection", "close");
|
|
||||||
server.sendHeader("Access-Control-Allow-Origin", "*");
|
|
||||||
server.send(200, "text/plain", "");
|
server.send(200, "text/plain", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void returnFail(String msg) {
|
void returnFail(String msg) {
|
||||||
server.sendHeader("Connection", "close");
|
|
||||||
server.sendHeader("Access-Control-Allow-Origin", "*");
|
|
||||||
server.send(500, "text/plain", msg + "\r\n");
|
server.send(500, "text/plain", msg + "\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
ESP8266WebServer::ESP8266WebServer(IPAddress addr, int port)
|
ESP8266WebServer::ESP8266WebServer(IPAddress addr, int port)
|
||||||
: _server(addr, port)
|
: _server(addr, port)
|
||||||
|
, _currentMethod(HTTP_ANY)
|
||||||
, _currentHandler(0)
|
, _currentHandler(0)
|
||||||
, _firstHandler(0)
|
, _firstHandler(0)
|
||||||
, _lastHandler(0)
|
, _lastHandler(0)
|
||||||
@ -40,11 +41,13 @@ ESP8266WebServer::ESP8266WebServer(IPAddress addr, int port)
|
|||||||
, _currentArgs(0)
|
, _currentArgs(0)
|
||||||
, _headerKeysCount(0)
|
, _headerKeysCount(0)
|
||||||
, _currentHeaders(0)
|
, _currentHeaders(0)
|
||||||
|
, _contentLength(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP8266WebServer::ESP8266WebServer(int port)
|
ESP8266WebServer::ESP8266WebServer(int port)
|
||||||
: _server(port)
|
: _server(port)
|
||||||
|
, _currentMethod(HTTP_ANY)
|
||||||
, _currentHandler(0)
|
, _currentHandler(0)
|
||||||
, _firstHandler(0)
|
, _firstHandler(0)
|
||||||
, _lastHandler(0)
|
, _lastHandler(0)
|
||||||
@ -52,6 +55,7 @@ ESP8266WebServer::ESP8266WebServer(int port)
|
|||||||
, _currentArgs(0)
|
, _currentArgs(0)
|
||||||
, _headerKeysCount(0)
|
, _headerKeysCount(0)
|
||||||
, _currentHeaders(0)
|
, _currentHeaders(0)
|
||||||
|
, _contentLength(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,23 +146,23 @@ protected:
|
|||||||
HTTPMethod _currentMethod;
|
HTTPMethod _currentMethod;
|
||||||
String _currentUri;
|
String _currentUri;
|
||||||
|
|
||||||
size_t _currentArgCount;
|
|
||||||
RequestArgument* _currentArgs;
|
|
||||||
HTTPUpload _currentUpload;
|
|
||||||
|
|
||||||
RequestArgument* _currentHeaders;
|
|
||||||
size_t _headerKeysCount;
|
|
||||||
size_t _contentLength;
|
|
||||||
String _responseHeaders;
|
|
||||||
|
|
||||||
String _hostHeader;
|
|
||||||
|
|
||||||
RequestHandler* _currentHandler;
|
RequestHandler* _currentHandler;
|
||||||
RequestHandler* _firstHandler;
|
RequestHandler* _firstHandler;
|
||||||
RequestHandler* _lastHandler;
|
RequestHandler* _lastHandler;
|
||||||
THandlerFunction _notFoundHandler;
|
THandlerFunction _notFoundHandler;
|
||||||
THandlerFunction _fileUploadHandler;
|
THandlerFunction _fileUploadHandler;
|
||||||
|
|
||||||
|
int _currentArgCount;
|
||||||
|
RequestArgument* _currentArgs;
|
||||||
|
HTTPUpload _currentUpload;
|
||||||
|
|
||||||
|
int _headerKeysCount;
|
||||||
|
RequestArgument* _currentHeaders;
|
||||||
|
size_t _contentLength;
|
||||||
|
String _responseHeaders;
|
||||||
|
|
||||||
|
String _hostHeader;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ bool ESP8266WebServer::_parseRequest(WiFiClient& client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ESP8266WebServer::_collectHeader(const char* headerName, const char* headerValue) {
|
bool ESP8266WebServer::_collectHeader(const char* headerName, const char* headerValue) {
|
||||||
for (size_t i = 0; i < _headerKeysCount; i++) {
|
for (int i = 0; i < _headerKeysCount; i++) {
|
||||||
if (_currentHeaders[i].key==headerName) {
|
if (_currentHeaders[i].key==headerName) {
|
||||||
_currentHeaders[i].value=headerValue;
|
_currentHeaders[i].value=headerValue;
|
||||||
return true;
|
return true;
|
||||||
@ -226,7 +226,7 @@ void ESP8266WebServer::_parseArguments(String data) {
|
|||||||
}
|
}
|
||||||
_currentArgCount = 1;
|
_currentArgCount = 1;
|
||||||
|
|
||||||
for (int i = 0; i < data.length(); ) {
|
for (int i = 0; i < (int)data.length(); ) {
|
||||||
i = data.indexOf('&', i);
|
i = data.indexOf('&', i);
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
break;
|
break;
|
||||||
|
@ -44,10 +44,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
String _uri;
|
|
||||||
HTTPMethod _method;
|
|
||||||
ESP8266WebServer::THandlerFunction _fn;
|
ESP8266WebServer::THandlerFunction _fn;
|
||||||
ESP8266WebServer::THandlerFunction _ufn;
|
ESP8266WebServer::THandlerFunction _ufn;
|
||||||
|
String _uri;
|
||||||
|
HTTPMethod _method;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StaticRequestHandler : public RequestHandler {
|
class StaticRequestHandler : public RequestHandler {
|
||||||
@ -67,7 +67,7 @@ public:
|
|||||||
if (requestMethod != HTTP_GET)
|
if (requestMethod != HTTP_GET)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (_isFile && requestUri != _uri || !requestUri.startsWith(_uri))
|
if ((_isFile && requestUri != _uri) || !requestUri.startsWith(_uri))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -360,7 +360,7 @@ void ESP8266WiFiClass::softAP(const char* ssid, const char* passphrase, int chan
|
|||||||
|
|
||||||
struct softap_config conf_current;
|
struct softap_config conf_current;
|
||||||
wifi_softap_get_config(&conf_current);
|
wifi_softap_get_config(&conf_current);
|
||||||
if (!softap_config_equal(conf, conf_current))
|
if (softap_config_equal(conf, conf_current))
|
||||||
{
|
{
|
||||||
DEBUGV("softap config unchanged");
|
DEBUGV("softap config unchanged");
|
||||||
return;
|
return;
|
||||||
|
@ -311,7 +311,7 @@ bool WiFiClientSecure::verify(const char* fp, const char* url) {
|
|||||||
uint8_t sha1[20];
|
uint8_t sha1[20];
|
||||||
int len = strlen(fp);
|
int len = strlen(fp);
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (int i = 0; i < sizeof(sha1); ++i) {
|
for (size_t i = 0; i < sizeof(sha1); ++i) {
|
||||||
while (pos < len && fp[pos] == ' ') {
|
while (pos < len && fp[pos] == ' ') {
|
||||||
++pos;
|
++pos;
|
||||||
}
|
}
|
||||||
|
@ -309,9 +309,6 @@ class ClientContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ClientContext* _next;
|
|
||||||
int _refcnt;
|
|
||||||
|
|
||||||
tcp_pcb* _pcb;
|
tcp_pcb* _pcb;
|
||||||
|
|
||||||
pbuf* _rx_buf;
|
pbuf* _rx_buf;
|
||||||
@ -320,6 +317,9 @@ class ClientContext {
|
|||||||
discard_cb_t _discard_cb;
|
discard_cb_t _discard_cb;
|
||||||
void* _discard_cb_arg;
|
void* _discard_cb_arg;
|
||||||
|
|
||||||
|
int _refcnt;
|
||||||
|
ClientContext* _next;
|
||||||
|
|
||||||
size_t _size_sent;
|
size_t _size_sent;
|
||||||
bool _send_waiting;
|
bool _send_waiting;
|
||||||
};
|
};
|
||||||
|
@ -365,22 +365,17 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _refcnt;
|
|
||||||
udp_pcb* _pcb;
|
udp_pcb* _pcb;
|
||||||
|
|
||||||
ip_addr_t _dest_addr;
|
|
||||||
uint16_t _dest_port;
|
|
||||||
|
|
||||||
uint16_t _multicast_ttl;
|
|
||||||
|
|
||||||
bool _first_buf_taken;
|
|
||||||
pbuf* _rx_buf;
|
pbuf* _rx_buf;
|
||||||
|
bool _first_buf_taken;
|
||||||
size_t _rx_buf_offset;
|
size_t _rx_buf_offset;
|
||||||
|
int _refcnt;
|
||||||
pbuf* _tx_buf_head;
|
pbuf* _tx_buf_head;
|
||||||
pbuf* _tx_buf_cur;
|
pbuf* _tx_buf_cur;
|
||||||
size_t _tx_buf_offset;
|
size_t _tx_buf_offset;
|
||||||
|
uint16_t _multicast_ttl;
|
||||||
|
uint16_t _dest_port;
|
||||||
|
ip_addr_t _dest_addr;
|
||||||
rxhandler_t _on_rx;
|
rxhandler_t _on_rx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,7 +36,10 @@ httpClient::httpClient() {
|
|||||||
_tcp = NULL;
|
_tcp = NULL;
|
||||||
_tcps = NULL;
|
_tcps = NULL;
|
||||||
|
|
||||||
|
_port = 0;
|
||||||
|
|
||||||
_reuse = false;
|
_reuse = false;
|
||||||
|
_https = false;
|
||||||
|
|
||||||
_headerKeysCount = 0;
|
_headerKeysCount = 0;
|
||||||
_currentHeaders = NULL;
|
_currentHeaders = NULL;
|
||||||
@ -345,7 +348,7 @@ int httpClient::writeToStream(Stream * stream) {
|
|||||||
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten);
|
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten);
|
||||||
|
|
||||||
if(_size && _size != bytesWritten) {
|
if(_size && _size != bytesWritten) {
|
||||||
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d missmatch!.\n", bytesWritten, _size);
|
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size);
|
||||||
}
|
}
|
||||||
|
|
||||||
end();
|
end();
|
||||||
@ -362,7 +365,7 @@ String httpClient::getString(void) {
|
|||||||
if(_size) {
|
if(_size) {
|
||||||
// try to reserve needed memmory
|
// try to reserve needed memmory
|
||||||
if(!sstring.reserve((_size + 1))) {
|
if(!sstring.reserve((_size + 1))) {
|
||||||
DEBUG_HTTPCLIENT("[HTTP-Client][getString] too less memory to resive as string! need: %d\n", (_size + 1));
|
DEBUG_HTTPCLIENT("[HTTP-Client][getString] too less memory to reserve as string! need: %d\n", (_size + 1));
|
||||||
return String("--too less memory--");
|
return String("--too less memory--");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -511,7 +514,7 @@ bool httpClient::sendHeader(const char * type) {
|
|||||||
}
|
}
|
||||||
header += "\r\n" + _Headers + "\r\n";
|
header += "\r\n" + _Headers + "\r\n";
|
||||||
|
|
||||||
return _tcp->write(header.c_str(), header.length());
|
return (_tcp->write(header.c_str(), header.length()) == header.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,7 +97,7 @@ bool MDNSResponder::begin(const char* domain){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy in domain characters as lowercase
|
// Copy in domain characters as lowercase
|
||||||
for (int i = 0; i < n; ++i)
|
for (size_t i = 0; i < n; ++i)
|
||||||
_hostName[i] = tolower(domain[i]);
|
_hostName[i] = tolower(domain[i]);
|
||||||
_hostName[n] = '\0';
|
_hostName[n] = '\0';
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ void MDNSResponder::_parsePacket(){
|
|||||||
|
|
||||||
char serviceName[32];
|
char serviceName[32];
|
||||||
uint8_t serviceNameLen;
|
uint8_t serviceNameLen;
|
||||||
uint16_t servicePort;
|
uint16_t servicePort = 0;
|
||||||
|
|
||||||
char protoName[32];
|
char protoName[32];
|
||||||
uint8_t protoNameLen;
|
uint8_t protoNameLen;
|
||||||
@ -367,7 +367,7 @@ void MDNSResponder::_parsePacket(){
|
|||||||
else if(questions[i] == MDNS_TYPE_PTR) responseMask |= 0xF;
|
else if(questions[i] == MDNS_TYPE_PTR) responseMask |= 0xF;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _reply(responseMask, (serviceName), (protoName), servicePort);
|
return _reply(responseMask, serviceName, protoName, servicePort);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MDNSResponder::enableArduino(uint16_t port, bool auth){
|
void MDNSResponder::enableArduino(uint16_t port, bool auth){
|
||||||
@ -461,12 +461,12 @@ void MDNSResponder::_reply(uint8_t replyMask, char * service, char *proto, uint1
|
|||||||
|
|
||||||
char boardName[64];
|
char boardName[64];
|
||||||
const char *boardExtra = "board=";
|
const char *boardExtra = "board=";
|
||||||
os_sprintf(boardName, "%s%s\0", boardExtra, ARDUINO_BOARD);
|
os_sprintf(boardName, "%s%s", boardExtra, ARDUINO_BOARD);
|
||||||
uint8_t boardNameLen = os_strlen(boardName);
|
uint8_t boardNameLen = os_strlen(boardName);
|
||||||
|
|
||||||
char authUpload[16];
|
char authUpload[16];
|
||||||
const char *authUploadExtra = "auth_upload=";
|
const char *authUploadExtra = "auth_upload=";
|
||||||
os_sprintf(authUpload, "%s%s\0", authUploadExtra, reinterpret_cast<const char*>((_arduinoAuth)?"yes":"no"));
|
os_sprintf(authUpload, "%s%s", authUploadExtra, reinterpret_cast<const char*>((_arduinoAuth)?"yes":"no"));
|
||||||
uint8_t authUploadLen = os_strlen(authUpload);
|
uint8_t authUploadLen = os_strlen(authUpload);
|
||||||
|
|
||||||
uint16_t textDataLen = (1 + boardNameLen) + (1 + tcpCheckExtraLen) + (1 + sshUploadExtraLen) + (1 + authUploadLen);
|
uint16_t textDataLen = (1 + boardNameLen) + (1 + tcpCheckExtraLen) + (1 + sshUploadExtraLen) + (1 + authUploadLen);
|
||||||
|
Reference in New Issue
Block a user