123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #define MODULE "httpd"
- #include "common.h"
- #include "fw.h"
- #include "httpd.h"
- static httpd_handle_t httpd;
- esp_err_t httpd_firmware_upgrade_handler(httpd_req_t *req)
- {
- char *response;
- esp_err_t err;
- int rv, len;
- printf("[POST] len = %zu uri = \"%s\"\n",
- req->content_len, req->uri);
- if (!req->content_len) {
- return httpd_resp_send_err(req, 411, NULL);
- }
- rv = firmware_update((read_func_t)httpd_req_recv, (token_t)req);
- if (rv == FWUPDATE_ERR_IN_PROGRESS)
- return httpd_resp_send_err(req, 409, "Firmware update already in progress");
- else if (rv)
- return httpd_resp_send_err(req, 500, "Firmware update failed");
- len = asprintf(&response,
- "<!DOCTYPE html>\r\n"
- "<html>\r\n"
- "<head>\r\n"
- "<title>Firmware update completed</title>\r\n"
- "</head>\r\n"
- "<body>\r\n"
- "<h1>Firmware update completed</h1>\r\n"
- "<p>Rebooting in %u seconds</p>\r\n"
- "</body>\r\n"
- "</html>\r\n",
- reboot_delayed());
- /* 200 and text/html are the response defaults, no need to set */
- err = httpd_resp_send(req, response, len);
- free(response);
- return err;
- }
- static esp_err_t httpd_get_handler(httpd_req_t *req)
- {
- char *response;
- int len;
- esp_err_t err;
- len = asprintf(&response,
- "<!DOCTYPE html>\n"
- "<html>\n"
- "<head>\n"
- "<title>Hello, World!</title>\n"
- "</head>\n"
- "<body>\n"
- "<p>Hello, World!</p>\n"
- "<p>GET uri = <tt>%s</tt></p>\n"
- "</pre>\n"
- "</body>\n"
- "</html>\n",
- req->uri);
- /* 200 and text/html are the response defaults, no need to set */
- err = httpd_resp_send(req, response, len);
- free(response);
- return err;
- }
- static const httpd_uri_t uri_get = {
- .uri = "/",
- .method = HTTP_GET,
- .handler = httpd_get_handler,
- .user_ctx = NULL
- };
- static const httpd_uri_t uri_firmware_upgrade = {
- .uri = "/firmware-upgrade",
- .method = HTTP_POST,
- .handler = httpd_firmware_upgrade_handler,
- .user_ctx = NULL
- };
- void my_httpd_stop(void)
- {
- if (httpd) {
- esp_unregister_shutdown_handler(my_httpd_stop);
- httpd_stop(httpd);
- httpd = NULL;
- }
- }
- void my_httpd_start(void)
- {
- httpd_config_t config = HTTPD_DEFAULT_CONFIG();
- httpd_handle_t server;
- if (httpd)
- return;
- config.task_priority = 2;
- printf("[HTTP] Default stack size: %zu\n", config.stack_size);
- config.stack_size <<= 2;
- printf("[HTTP] Requesting stack size: %zu\n", config.stack_size);
- if (httpd_start(&server, &config) != ESP_OK)
- return;
- httpd = server;
- httpd_register_uri_handler(httpd, &uri_get);
- httpd_register_uri_handler(httpd, &uri_firmware_upgrade);
- esp_register_shutdown_handler(my_httpd_stop);
- printf("[HTTP] httpd started\n");
- }
|