12#include <lwip/sockets.h>
30template <
typename ClientType>
58 operator bool()
override {
59 return client_ptr !=
nullptr &&
static_cast<bool>(*client_ptr);
84 int len = -1)
override {
90 int post(
Url&
url,
size_t len, std::function<
size_t(Print&,
void*)> writer,
91 const char* mime =
nullptr,
void* ref =
nullptr)
override {
97 const char* mime =
nullptr,
void* ref =
nullptr)
override {
99 int len = writer(nop, ref);
104 int put(
Url&
url,
const char* mime,
const char* data,
int len = -1)
override {
110 int del(
Url&
url,
const char* mime =
nullptr,
const char* data =
nullptr,
111 int len = -1)
override {
118 const char* data =
nullptr,
int len = -1)
override {
120 this->
accept = acceptMime;
126 const char* data =
nullptr,
int len = -1)
override {
128 this->
accept = acceptMime;
142 if (sid !=
nullptr) {
158 int readln(uint8_t*
str,
int len,
bool incl_nl =
true)
override {
207 const char*
str(
const char* in) {
return in ==
nullptr ?
"" : in; }
210 virtual int connect(
const char* ip, uint16_t port) {
212 if (!
isKeepAlive() && this->client_ptr->connected()) {
217 static_cast<ClientType*
>(
client_ptr)->clear();
220 static_cast<ClientType*
>(
client_ptr)->setNoDelay(
true);
223 ->setSocketOption(SOL_SOCKET, SO_REUSEADDR, &enable,
227 uint64_t end = millis() +
client_ptr->getTimeout();
229 for (
int j = 0; j < 3; j++) {
230 rc = this->client_ptr->connect(ip, port);
248 const char* data,
int len = -1) {
269 if (len == -1 && data !=
nullptr) {
278 if (
agent !=
nullptr) {
284 if (mime !=
nullptr) {
312 std::function<
size_t(Print&,
void*)> writer,
313 const char* mime =
nullptr,
void* ref =
nullptr) {
355 if (written != len) {
357 "HttpRequest wrote %d bytes: expected %d", written, len);
359#if DLNA_CHECK_XML_LENGTH
361 size_t test_len = writer(test, ref);
362 if (strlen(test.
c_str()) != len) {
365 "HttpRequest test wrote %d bytes: expected %d / strlen: %d",
366 test_len, len, strlen(test.
c_str()));
Http might reply with chunks. So we need to dechunk the data. see https://en.wikipedia....
Definition: HttpChunkReader.h:13
void open(Client &client)
Definition: HttpChunkReader.h:28
virtual int read(Client &client, uint8_t *str, int len)
Definition: HttpChunkReader.h:35
virtual int readln(Client &client, uint8_t *str, int len, bool incl_nl=true)
Definition: HttpChunkReader.h:55
int available()
Definition: HttpChunkReader.h:73
virtual int readlnInternal(Stream &client, uint8_t *str, int len, bool incl_nl=true)
Definition: HttpLineReader.h:18
Simple API to process get, put, post, del http requests I tried to use Arduino HttpClient,...
Definition: HttpRequest.h:31
Client * client_ptr
Definition: HttpRequest.h:195
void setConnection(const char *connection) override
Sets the connection type.
Definition: HttpRequest.h:176
HttpChunkReader chunk_reader
Definition: HttpRequest.h:199
HttpRequestHeader & request() override
Returns the request header.
Definition: HttpRequest.h:170
void stop() override
Stops the connection.
Definition: HttpRequest.h:74
HttpRequest()
Default constructor.
Definition: HttpRequest.h:34
const char * accept
Definition: HttpRequest.h:203
const char * str(const char *in)
Returns an empty string if input is null, otherwise returns the input.
Definition: HttpRequest.h:207
~HttpRequest() override
Destructor.
Definition: HttpRequest.h:46
HttpRequestHeader request_header
Definition: HttpRequest.h:197
void setHost(const char *host) override
Sets the host name for the requests.
Definition: HttpRequest.h:52
HttpReplyHeader & reply() override
Returns the reply header.
Definition: HttpRequest.h:167
HttpReplyHeader reply_header
Definition: HttpRequest.h:198
const char * connection
Definition: HttpRequest.h:202
int read(uint8_t *str, int len) override
Reads reply data.
Definition: HttpRequest.h:149
int unsubscribe(Url &url, const char *sid) override
Sends an UNSUBSCRIBE request.
Definition: HttpRequest.h:139
Url url
Definition: HttpRequest.h:196
int put(Url &url, const char *mime, const char *data, int len=-1) override
Sends a PUT request.
Definition: HttpRequest.h:104
void setAcceptsEncoding(const char *enc) override
Sets the accepted encodings.
Definition: HttpRequest.h:181
void setClient(Client &client) override
Sets the client to be used for the requests.
Definition: HttpRequest.h:49
int available() override
Returns the number of available bytes to read.
Definition: HttpRequest.h:66
ClientType default_client
Definition: HttpRequest.h:194
virtual int process(TinyMethodID method, Url &url, size_t len, std::function< size_t(Print &, void *)> writer, const char *mime=nullptr, void *ref=nullptr)
Definition: HttpRequest.h:311
bool connected() override
Checks if connected to the server.
Definition: HttpRequest.h:63
virtual int connect(const char *ip, uint16_t port)
opens a connection to the indicated host
Definition: HttpRequest.h:210
int post(Url &url, size_t len, std::function< size_t(Print &, void *)> writer, const char *mime=nullptr, void *ref=nullptr) override
Sends a POST request with streaming body.
Definition: HttpRequest.h:90
const char * accept_encoding
Definition: HttpRequest.h:204
int notify(Url &url, std::function< size_t(Print &, void *)> writer, const char *mime=nullptr, void *ref=nullptr) override
Sends a NOTIFY request with streaming body.
Definition: HttpRequest.h:96
int post(Url &url, const char *mime, const char *data, int len=-1) override
Sends a POST request with data.
Definition: HttpRequest.h:83
bool isKeepAlive()
Do not close the connection after request.
Definition: HttpRequest.h:191
int get(Url &url, const char *acceptMime=nullptr, const char *data=nullptr, int len=-1) override
Sends a GET request.
Definition: HttpRequest.h:117
HttpRequest(ClientType &client)
Constructor with specified client.
Definition: HttpRequest.h:40
Client * client() override
Returns the client pointer.
Definition: HttpRequest.h:186
const char * agent
Definition: HttpRequest.h:201
int del(Url &url, const char *mime=nullptr, const char *data=nullptr, int len=-1) override
Sends a DELETE request.
Definition: HttpRequest.h:110
int head(Url &url, const char *acceptMime=nullptr, const char *data=nullptr, int len=-1) override
Sends a HEAD request.
Definition: HttpRequest.h:125
int readln(uint8_t *str, int len, bool incl_nl=true) override
Reads reply data up to the next new line.
Definition: HttpRequest.h:158
Str host_name
Definition: HttpRequest.h:200
virtual int process(TinyMethodID action, Url &url, const char *mime, const char *data, int len=-1)
sends request and reads the reply_header from the server
Definition: HttpRequest.h:247
void setTimeout(int ms) override
Sets the timeout.
Definition: HttpRequest.h:189
int subscribe(Url &url) override
Sends a SUBSCRIBE request.
Definition: HttpRequest.h:133
void setAgent(const char *agent) override
Sets the user agent.
Definition: HttpRequest.h:173
Abstract interface for HTTP client request functionality.
Definition: IHttpRequest.h:21
Class with does not do any output: it can be used to determine the length of the output.
Definition: NullPrint.h:12
Print to a dynamic string.
Definition: StrPrint.h:13
const char * c_str()
Definition: StrPrint.h:39
A simple wrapper to provide string functions on char*. If the underlying char* is a const we do not a...
Definition: StrView.h:18
virtual bool equals(const char *str)
checks if the string equals indicated parameter string
Definition: StrView.h:177
Heap-backed string utility used throughout tiny_dlna.
Definition: Str.h:27
bool isEmpty() const
True if empty.
Definition: Str.h:54
void add(const char *append)
Append C-string (ignored if nullptr)
Definition: Str.h:96
const char * c_str() const
C-string pointer to internal buffer.
Definition: Str.h:88
URL parser which breaks a full url string up into its individual parts.
Definition: Url.h:18
int port()
Definition: Url.h:46
const char * host()
Definition: Url.h:41
const char * url()
Definition: Url.h:39
const char * path()
Definition: Url.h:40
#define DLNA_HTTP_REQUEST_TIMEOUT_MS
Define the default http request timeout.
Definition: dlna_config.h:25
Definition: Allocator.h:13
const char * CONTENT_TYPE
Definition: HttpHeader.h:16
const char * CON_KEEP_ALIVE
Definition: HttpHeader.h:20
const char * methods[]
Definition: HttpHeader.h:50
const char * CONTENT_LENGTH
Definition: HttpHeader.h:17
const char * CON_CLOSE
Definition: HttpHeader.h:19
const char * HOST_C
Definition: HttpHeader.h:29
TinyMethodID
Definition: HttpHeader.h:35
@ T_DELETE
Definition: HttpHeader.h:41
@ T_UNSUBSCRIBE
Definition: HttpHeader.h:46
@ T_SUBSCRIBE
Definition: HttpHeader.h:47
@ T_HEAD
Definition: HttpHeader.h:38
@ T_GET
Definition: HttpHeader.h:37
@ T_PUT
Definition: HttpHeader.h:40
@ T_POST
Definition: HttpHeader.h:39
@ T_NOTIFY
Definition: HttpHeader.h:48
const char * ACCEPT
Definition: HttpHeader.h:23
const char * ACCEPT_ENCODING
Definition: HttpHeader.h:30
const char * ACCEPT_ALL
Definition: HttpHeader.h:24
const char * USER_AGENT
Definition: HttpHeader.h:26
const char * CONNECTION
Definition: HttpHeader.h:18