static int init_web_server(const struct sys_config *cfg) { /* * Usually, we start to connect/listen in * EVENT_STAMODE_GOT_IP/EVENT_SOFTAPMODE_STACONNECTED handlers * The only obvious reason for this is to specify IP address * in `mg_bind` function. But it is not clear, for what we have to * provide IP address in case of ESP */ if (cfg->http.hidden_files) { s_http_server_opts.hidden_file_pattern = strdup(cfg->http.hidden_files); } listen_conn = mg_bind(&sj_mgr, cfg->http.listen_addr, mongoose_ev_handler); if (!listen_conn) { LOG(LL_ERROR, ("Error binding to [%s]", cfg->http.listen_addr)); return 0; } else { mg_register_http_endpoint(listen_conn, "/conf/", conf_handler); mg_register_http_endpoint(listen_conn, "/reboot", reboot_handler); mg_register_http_endpoint(listen_conn, "/ro_vars", ro_vars_handler); mg_register_http_endpoint(listen_conn, "/upload", upload_handler); mg_set_protocol_http_websocket(listen_conn); LOG(LL_INFO, ("HTTP server started on [%s]", cfg->http.listen_addr)); } return 1; }
int main(void) { struct mg_mgr mgr; struct mg_connection *nc; srand(mg_time()); mg_mgr_init(&mgr, NULL); nc = mg_bind(&mgr, s_http_port, ev_handler); mg_set_protocol_http_websocket(nc); s_http_server_opts.document_root = "."; mg_register_http_endpoint(nc, "/login.html", login_handler); mg_register_http_endpoint(nc, "/logout", logout_handler); mg_set_timer(nc, mg_time() + SESSION_CHECK_INTERVAL); printf("Starting web server on port %s\n", s_http_port); for (;;) { mg_mgr_poll(&mgr, 1000); } mg_mgr_free(&mgr); return 0; }
void device_register_http_endpoint(const char *uri, mg_event_handler_t handler) { if (listen_conn != NULL) { mg_register_http_endpoint(listen_conn, uri, handler); } }