diff --git a/README.md b/README.md index 8e74674..3b7ff88 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,6 @@ - [Notion - H5](https://mercantec.notion.site/h5-2026) - [ESP32-S3 Get started](https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/get-started/index.html) +- [libmicrohttpd](https://www.gnu.org/software/libmicrohttpd/manual/libmicrohttpd.html) +- [libmicrohttpd tutorial](https://www.gnu.org/software/libmicrohttpd/tutorial.html) diff --git a/backend/Makefile b/backend/Makefile index d2c166d..486c853 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -4,13 +4,28 @@ MAKEFLAGS += -j16 CC=gcc LD=gcc -CFLAGS=-std=c23 -pedantic-errors -Wall -Wextra -Wconversion -LDFLAGS= +CFLAGS = -std=c23 -pedantic-errors -Wall -Wextra -Wconversion +LDFLAGS = -CFLAGS+=-g +libraries = libmicrohttpd -# CFLAGS+=-ggdb -CFLAGS+=-fsanitize=address +CFLAGS += $(shell pkg-config $(libraries) --cflags) +LDFLAGS += $(shell pkg-config $(libraries) --libs) + +RELEASE = 0 +GDB = 0 + +ifeq ($(RELEASE),1) + CFLAGS += -O3 +else + CFLAGS += -g -Wno-unused + + ifeq ($(GDB),1) + CFLAGS += -ggdb + else + CFLAGS += -fsanitize=address + endif +endif build_dir = build obj_dir = $(build_dir)/obj diff --git a/backend/src/main.c b/backend/src/main.c index 9d0a63c..c4a3833 100644 --- a/backend/src/main.c +++ b/backend/src/main.c @@ -1,7 +1,74 @@ +#include +#include +#include +#include +#include #include +#define PORT 8888 + +int print_out_key( + void *cls, + enum MHD_ValueKind kind, + const char *key, + const char *value) +{ + printf ("%s: %s\n", key, value); + return MHD_YES; +} + +int answer_to_connection( + void *cls, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *version, + const char *upload_data, + size_t *upload_data_size, + void **req_cls) +{ + const char *page = "Hello, browser!"; + struct MHD_Response *response; + int ret; + + MHD_get_connection_values( + connection, + MHD_HEADER_KIND, + (MHD_KeyValueIterator)&print_out_key, + NULL); + + printf ("New %s request for %s using version %s\n", method, url, version); + + response = MHD_create_response_from_buffer( + strlen(page), + (void*)page, + MHD_RESPMEM_PERSISTENT); + + ret = (int)MHD_queue_response(connection, MHD_HTTP_OK, response); + MHD_destroy_response(response); + + return ret; +} + + int main(void) { printf("hello\n"); + struct MHD_Daemon *daemon; + + daemon = MHD_start_daemon( + MHD_USE_INTERNAL_POLLING_THREAD, + PORT, + NULL, + NULL, + (MHD_AccessHandlerCallback)&answer_to_connection, + NULL, + MHD_OPTION_END); + + if (NULL == daemon) return 1; + getchar(); + + MHD_stop_daemon(daemon); + return 0; }