79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
#include "http_client.h"
|
|
|
|
#include <memory>
|
|
|
|
std::unique_ptr<char[]> myBodyBuffer = nullptr;
|
|
uint16_t offset{0};
|
|
bool received{false};
|
|
|
|
void result_callback(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res,
|
|
err_t err) {
|
|
#ifdef DEBUG
|
|
printf("Transfer complete\n");
|
|
#endif
|
|
received = true;
|
|
offset = 0;
|
|
}
|
|
|
|
err_t headers_callback(httpc_state_t *connection, void *arg, struct pbuf *hdr, u16_t hdr_len,
|
|
u32_t content_len) {
|
|
#ifdef DEBUG
|
|
printf("Headers received\n");
|
|
printf("Content length=%lu\n", content_len);
|
|
printf("Header length=%u\n", hdr_len);
|
|
#endif
|
|
myBodyBuffer = std::make_unique<char[]>(content_len + 1);
|
|
|
|
return ERR_OK;
|
|
}
|
|
|
|
err_t body_callback(void *arg, struct altcp_pcb *conn, struct pbuf *p, err_t err) {
|
|
if (err != ERR_OK) {
|
|
return err;
|
|
}
|
|
|
|
pbuf_copy_partial(p, &myBodyBuffer[offset], p->tot_len, 0);
|
|
offset += p->len;
|
|
|
|
return ERR_OK;
|
|
}
|
|
|
|
HttpClient::HttpClient() {
|
|
m_settings.use_proxy = false;
|
|
m_settings.result_fn = result_callback; // result_callback;
|
|
m_settings.headers_done_fn = headers_callback; // headers_callback;
|
|
}
|
|
|
|
std::string HttpClient::retrieveWasteDatesAsCsv() {
|
|
uint16_t port = 80;
|
|
|
|
std::string result("");
|
|
|
|
err_t err = httpc_get_file_dns("hornet.brodbeck-online.de", port, "/abfall/abfall.csv",
|
|
&m_settings, body_callback, nullptr, nullptr);
|
|
|
|
// If there was an error, return empty result.
|
|
if (err != ERR_OK) {
|
|
return result;
|
|
}
|
|
|
|
uint wait_count = 0;
|
|
while (received == false) {
|
|
++wait_count;
|
|
|
|
if (wait_count >= 10) {
|
|
return result;
|
|
}
|
|
sleep_ms(1000);
|
|
}
|
|
|
|
result.append(myBodyBuffer.get());
|
|
received = false;
|
|
|
|
#ifdef DEBUG
|
|
printf("%s", result.c_str());
|
|
#endif
|
|
|
|
return result;
|
|
}
|