Switch HTTP Server

This commit is contained in:
iranl
2024-08-26 21:47:10 +02:00
parent d3c3589233
commit ca9c2feebc
234 changed files with 20090 additions and 8061 deletions

View File

@@ -0,0 +1,90 @@
/************************************************************
TemplatePrinter Class
A basic templating engine for a stream of text.
This wraps the Arduino Print interface and writes to any
Print interface.
Written by Christopher Andrews (https://github.com/Chris--A)
************************************************************/
#include "TemplatePrinter.h"
void TemplatePrinter::resetParam(bool flush){
if(flush && _inParam){
_stream.write(_delimiter);
if(_paramPos)
_stream.print(_paramBuffer);
}
memset(_paramBuffer, 0, sizeof(_paramBuffer));
_paramPos = 0;
_inParam = false;
}
void TemplatePrinter::flush(){
resetParam(true);
_stream.flush();
}
size_t TemplatePrinter::write(uint8_t data){
if(data == _delimiter){
// End of parameter, send to callback
if(_inParam){
// On false, return the parameter place holder as is: not a parameter
// Bug fix: ignore parameters that are zero length.
if(!_paramPos || !_cb(_stream, _paramBuffer)){
resetParam(true);
_stream.write(data);
}else{
resetParam(false);
}
// Start collecting parameter
}else{
_inParam = true;
}
}else{
// Are we collecting
if(_inParam){
// Is param still valid
if(isalnum(data) || data == '_'){
// Total param len must be 63, 1 for null.
if(_paramPos < sizeof(_paramBuffer) - 1){
_paramBuffer[_paramPos++] = data;
// Not a valid param
}else{
resetParam(true);
}
}else{
resetParam(true);
_stream.write(data);
}
// Just output
}else{
_stream.write(data);
}
}
return 1;
}
size_t TemplatePrinter::copyFrom(Stream &stream){
size_t count = 0;
while(stream.available())
count += this->write(stream.read());
return count;
}