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 {
194 template <
typename T>
199 template <
typename T>
202 template <
typename T>
204 ->
decltype(
client->setNoDelay(value), void()) {
205 client->setNoDelay(value);
208 template <
typename T>
212 template <
typename T>
213 static auto setSocketReuseAddrIfSupported(T*
client,
int)
214 ->
decltype(
client->setSocketOption(SOL_SOCKET, SO_REUSEADDR,
215 (
const void*)
nullptr,
219 client->setSocketOption(SOL_SOCKET, SO_REUSEADDR, &enable,
223 template <
typename T>
224 static void setSocketReuseAddrIfSupported(T*,
long) {}
240 const char*
str(
const char* in) {
return in ==
nullptr ?
"" : in; }
243 virtual int connect(
const char* ip, uint16_t port) {
245 if (!
isKeepAlive() && this->client_ptr->connected()) {
254 setSocketReuseAddrIfSupported(
static_cast<ClientType*
>(
client_ptr), 0);
257 uint64_t end = millis() +
client_ptr->getTimeout();
259 for (
int j = 0; j < 3; j++) {
260 rc = this->client_ptr->connect(ip, port);
278 const char* data,
int len = -1) {
299 if (len == -1 && data !=
nullptr) {
308 if (
agent !=
nullptr) {
314 if (mime !=
nullptr) {
342 std::function<
size_t(Print&,
void*)> writer,
343 const char* mime =
nullptr,
void* ref =
nullptr) {
385 if (written != len) {
387 "HttpRequest wrote %d bytes: expected %d", written, len);
389#if DLNA_CHECK_XML_LENGTH
391 size_t test_len = writer(test, ref);
392 if (strlen(test.
c_str()) != len) {
395 "HttpRequest test wrote %d bytes: expected %d / strlen: %d",
396 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:228
void setConnection(const char *connection) override
Sets the connection type.
Definition: HttpRequest.h:176
static auto setNoDelayIfSupported(T *client, bool value, int) -> decltype(client->setNoDelay(value), void())
Definition: HttpRequest.h:203
HttpChunkReader chunk_reader
Definition: HttpRequest.h:232
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:236
const char * str(const char *in)
Returns an empty string if input is null, otherwise returns the input.
Definition: HttpRequest.h:240
~HttpRequest() override
Destructor.
Definition: HttpRequest.h:46
HttpRequestHeader request_header
Definition: HttpRequest.h:230
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:231
const char * connection
Definition: HttpRequest.h:235
int read(uint8_t *str, int len) override
Reads reply data.
Definition: HttpRequest.h:149
static void clearIfSupported(T *, long)
Definition: HttpRequest.h:200
int unsubscribe(Url &url, const char *sid) override
Sends an UNSUBSCRIBE request.
Definition: HttpRequest.h:139
Url url
Definition: HttpRequest.h:229
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:227
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:341
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:243
static void setNoDelayIfSupported(T *, bool, long)
Definition: HttpRequest.h:209
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:237
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:234
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:233
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:277
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
static auto clearIfSupported(T *client, int) -> decltype(client->clear(), void())
Definition: HttpRequest.h:195
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