mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-10 05:27:01 +03:00
and more crap again...
This commit is contained in:
76
components/spotify/cspot/bell/include/HTTPClient.h
Normal file
76
components/spotify/cspot/bell/include/HTTPClient.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef BELL_HTTP_CLIENT
|
||||
#define BELL_HTTP_CLIENT
|
||||
|
||||
#include "BellSocket.h"
|
||||
#include "TCPSocket.h"
|
||||
#include "platform/TLSSocket.h"
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#define BUF_SIZE 128
|
||||
|
||||
namespace bell {
|
||||
class HTTPClient {
|
||||
public:
|
||||
enum HTTPMethod {
|
||||
GET,
|
||||
POST,
|
||||
};
|
||||
|
||||
struct HTTPRequest {
|
||||
HTTPMethod method = HTTPMethod::GET;
|
||||
std::string url;
|
||||
std::string body;
|
||||
std::map<std::string, std::string> headers;
|
||||
std::string contentType;
|
||||
int maxRedirects = -1;
|
||||
};
|
||||
|
||||
struct HTTPResponse {
|
||||
std::shared_ptr<bell::Socket> socket;
|
||||
|
||||
std::map<std::string, std::string> headers;
|
||||
|
||||
uint16_t statusCode;
|
||||
size_t contentLength;
|
||||
std::string contentType;
|
||||
std::string location;
|
||||
bool isChunked = false;
|
||||
bool isGzip = false;
|
||||
bool isComplete = false;
|
||||
bool isRedirect = false;
|
||||
size_t redirectCount = 0;
|
||||
|
||||
void close() {
|
||||
socket->close();
|
||||
free(buf);
|
||||
buf = nullptr;
|
||||
bufPtr = nullptr;
|
||||
}
|
||||
|
||||
void readHeaders();
|
||||
size_t read(char *dst, size_t len);
|
||||
std::string readToString();
|
||||
|
||||
private:
|
||||
char *buf = nullptr; // allocated buffer
|
||||
char *bufPtr = nullptr; // reading pointer within buf
|
||||
size_t bodyRead = 0;
|
||||
size_t bufRemaining = 0;
|
||||
size_t chunkRemaining = 0;
|
||||
bool isStreaming = false;
|
||||
size_t readRaw(char *dst);
|
||||
bool skip(size_t len, bool dontRead = false);
|
||||
};
|
||||
|
||||
private:
|
||||
static void executeImpl(const struct HTTPRequest &request, const char *url, struct HTTPResponse *&response);
|
||||
static bool readHeader(const char *&header, const char *name);
|
||||
|
||||
public:
|
||||
static struct HTTPResponse *execute(const struct HTTPRequest &request);
|
||||
};
|
||||
} // namespace bell
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user