mirror of
https://github.com/khoih-prog/AsyncHTTPRequest_Generic.git
synced 2025-07-30 02:17:14 +02:00
Delete xbuf.h
This commit is contained in:
@ -1,166 +0,0 @@
|
|||||||
/****************************************************************************************************************************
|
|
||||||
xbuf.h - Dead simple AsyncHTTPRequest for ESP8266, ESP32 and currently STM32 with built-in LAN8742A Ethernet
|
|
||||||
|
|
||||||
For ESP8266, ESP32 and STM32 with built-in LAN8742A Ethernet (Nucleo-144, DISCOVERY, etc)
|
|
||||||
|
|
||||||
AsyncHTTPRequest_STM32 is a library for the ESP8266, ESP32 and currently STM32 run built-in Ethernet WebServer
|
|
||||||
|
|
||||||
Based on and modified from asyncHTTPrequest Library (https://github.com/boblemaire/asyncHTTPrequest)
|
|
||||||
|
|
||||||
Built by Khoi Hoang https://github.com/khoih-prog/AsyncHTTPRequest_Generic
|
|
||||||
Licensed under MIT license
|
|
||||||
|
|
||||||
Copyright (C) <2018> <Bob Lemaire, IoTaWatt, Inc.>
|
|
||||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
|
|
||||||
as published bythe Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Version: 1.4.1
|
|
||||||
|
|
||||||
Version Modified By Date Comments
|
|
||||||
------- ----------- ---------- -----------
|
|
||||||
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
|
|
||||||
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
|
|
||||||
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
|
|
||||||
1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
|
|
||||||
1.1.1 K Hoang 24/12/2020 Prevent crash if request and/or method not correct.
|
|
||||||
1.1.2 K Hoang 11/02/2021 Rename _lock and _unlock to avoid conflict with AsyncWebServer library
|
|
||||||
1.1.3 K Hoang 25/02/2021 Fix non-persistent Connection header bug
|
|
||||||
1.1.4 K Hoang 21/03/2021 Fix `library.properties` dependency
|
|
||||||
1.1.5 K Hoang 22/03/2021 Fix dependency on STM32AsyncTCP Library
|
|
||||||
1.2.0 K Hoang 11/04/2021 Add support to LAN8720 using STM32F4 or STM32F7
|
|
||||||
1.3.0 K Hoang 09/07/2021 Add support to WT32_ETH01 (ESP32 + LAN8720) boards
|
|
||||||
1.3.1 K Hoang 09/10/2021 Update `platform.ini` and `library.json`
|
|
||||||
1.4.0 K Hoang 23/11/2021 Fix crashing bug when request a non-existing IP
|
|
||||||
1.4.1 K Hoang 29/11/2021 Auto detect ESP32 core version and improve connection time for WT32_ETH01
|
|
||||||
*****************************************************************************************************************************/
|
|
||||||
|
|
||||||
/********************************************************************************************
|
|
||||||
xbuf is a dynamic buffering system that supports reading and writing much like cbuf.
|
|
||||||
The class has it's own provision for writing from buffers, Strings and other xbufs
|
|
||||||
as well as the inherited Print functions.
|
|
||||||
Rather than use a large contiguous heap allocation, xbuf uses a linked chain of segments
|
|
||||||
to dynamically grow and shrink with the contents.
|
|
||||||
There are other benefits as well to using smaller heap allocation units:
|
|
||||||
1) A buffer can work fine in a fragmented heap environment (admittedly contributing to it)
|
|
||||||
2) xbuf contents can be copied from one buffer to another without the need for
|
|
||||||
2x heap during the copy.
|
|
||||||
The segment size defaults to 64 but can be dynamically set in the constructor at creation.
|
|
||||||
The inclusion of indexOf and read/peek until functions make it useful for handling
|
|
||||||
data streams like HTTP, and in fact is why it was created.
|
|
||||||
|
|
||||||
NOTE: The size of the indexOf() search string is limited to the segment size.
|
|
||||||
It could be extended but didn't seem to be a practical consideration.
|
|
||||||
|
|
||||||
********************************************************************************************/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef XBUF_H
|
|
||||||
#define XBUF_H
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
struct xseg
|
|
||||||
{
|
|
||||||
xseg *next;
|
|
||||||
uint8_t data[];
|
|
||||||
};
|
|
||||||
|
|
||||||
class xbuf: public Print
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
xbuf(const uint16_t segSize = 64);
|
|
||||||
virtual ~xbuf();
|
|
||||||
|
|
||||||
size_t write(const uint8_t);
|
|
||||||
size_t write(const char*);
|
|
||||||
size_t write(const uint8_t*, const size_t);
|
|
||||||
size_t write(xbuf*, const size_t);
|
|
||||||
size_t write(String);
|
|
||||||
size_t available();
|
|
||||||
int indexOf(const char, const size_t begin = 0);
|
|
||||||
int indexOf(const char*, const size_t begin = 0);
|
|
||||||
uint8_t read();
|
|
||||||
size_t read(uint8_t*, size_t);
|
|
||||||
String readStringUntil(const char);
|
|
||||||
String readStringUntil(const char*);
|
|
||||||
String readString(int);
|
|
||||||
|
|
||||||
String readString()
|
|
||||||
{
|
|
||||||
return readString(available());
|
|
||||||
}
|
|
||||||
|
|
||||||
void flush();
|
|
||||||
|
|
||||||
uint8_t peek();
|
|
||||||
size_t peek(uint8_t*, const size_t);
|
|
||||||
|
|
||||||
String peekStringUntil(const char target)
|
|
||||||
{
|
|
||||||
return peekString(indexOf(target, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
String peekStringUntil(const char* target)
|
|
||||||
{
|
|
||||||
return peekString(indexOf(target, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
String peekString()
|
|
||||||
{
|
|
||||||
return peekString(_used);
|
|
||||||
}
|
|
||||||
|
|
||||||
String peekString(int);
|
|
||||||
|
|
||||||
/* In addition to the above functions,
|
|
||||||
the following inherited functions from the Print class are available.
|
|
||||||
|
|
||||||
size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3)));
|
|
||||||
size_t printf_P(PGM_P format, ...) __attribute__((format(printf, 2, 3)));
|
|
||||||
size_t print(const __FlashStringHelper *);
|
|
||||||
size_t print(const String &);
|
|
||||||
size_t print(const char[]);
|
|
||||||
size_t print(char);
|
|
||||||
size_t print(unsigned char, int = DEC);
|
|
||||||
size_t print(int, int = DEC);
|
|
||||||
size_t print(unsigned int, int = DEC);
|
|
||||||
size_t print(long, int = DEC);
|
|
||||||
size_t print(unsigned long, int = DEC);
|
|
||||||
size_t print(double, int = 2);
|
|
||||||
size_t print(const Printable&);
|
|
||||||
|
|
||||||
size_t println(const __FlashStringHelper *);
|
|
||||||
size_t println(const String &s);
|
|
||||||
size_t println(const char[]);
|
|
||||||
size_t println(char);
|
|
||||||
size_t println(unsigned char, int = DEC);
|
|
||||||
size_t println(int, int = DEC);
|
|
||||||
size_t println(unsigned int, int = DEC);
|
|
||||||
size_t println(long, int = DEC);
|
|
||||||
size_t println(unsigned long, int = DEC);
|
|
||||||
size_t println(double, int = 2);
|
|
||||||
size_t println(const Printable&);
|
|
||||||
size_t println(void);
|
|
||||||
*/
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
xseg *_head;
|
|
||||||
xseg *_tail;
|
|
||||||
uint16_t _used;
|
|
||||||
uint16_t _free;
|
|
||||||
uint16_t _offset;
|
|
||||||
uint16_t _segSize;
|
|
||||||
|
|
||||||
void addSeg();
|
|
||||||
void remSeg();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // XBUF_H
|
|
||||||
|
|
Reference in New Issue
Block a user