| 21 | }; |
| 22 | |
| 23 | esp_err_t httpEventHandler(esp_http_client_event_t *evt) { |
| 24 | if (!evt || !evt->user_data) return ESP_OK; |
| 25 | |
| 26 | HttpRequestContext *request = static_cast<HttpRequestContext *>(evt->user_data); |
| 27 | LauncherHttpResponse *response = request->response; |
| 28 | if (evt->event_id == HTTP_EVENT_ON_HEADER && response) { |
| 29 | int status = evt->client ? esp_http_client_get_status_code(evt->client) : 0; |
| 30 | if (status >= 300 && status < 400) return ESP_OK; |
| 31 | if (evt->header_key && evt->header_value && strcasecmp(evt->header_key, "Content-Length") == 0) { |
| 32 | response->content_length = atoll(evt->header_value); |
| 33 | } else if ( |
| 34 | evt->header_key && evt->header_value && strcasecmp(evt->header_key, "Content-Range") == 0 |
| 35 | ) { |
| 36 | strncpy(response->content_range, evt->header_value, sizeof(response->content_range) - 1); |
| 37 | response->content_range[sizeof(response->content_range) - 1] = '\0'; |
| 38 | } |
| 39 | } else if (evt->event_id == HTTP_EVENT_ON_DATA && evt->data && evt->data_len > 0) { |
| 40 | int status = evt->client ? esp_http_client_get_status_code(evt->client) : 0; |
| 41 | if (status >= 300 && status < 400) { return ESP_OK; } |
| 42 | if (status > 0 && (status < 200 || status >= 300)) { |
| 43 | request->callbackOk = false; |
| 44 | return ESP_FAIL; |
| 45 | } |
| 46 | if (request->cb && |
| 47 | !request->cb(static_cast<const uint8_t *>(evt->data), evt->data_len, request->ctx)) { |
| 48 | request->callbackOk = false; |
| 49 | return ESP_FAIL; |
| 50 | } |
| 51 | } |
| 52 | return ESP_OK; |
| 53 | } |
| 54 | |
| 55 | bool executeGet( |
| 56 | const char *url, LauncherHttpChunkCb cb, void *ctx, LauncherHttpResponse *response, const char *headerKey, |
nothing calls this directly
no outgoing calls
no test coverage detected