Files
microtcp/examples/http.c
T
2023-03-20 09:43:11 +01:00

60 lines
1.6 KiB
C

#include <microtcp.h>
typedef struct microhttp_server_t http_server_t;
http_server_t *microhttp_server_create(microtcp_t *mtcp, uint16_t port);
void microhttp_server_destroy(http_server_t *server);
void microhttp_server_serve(microhttp_server_t *server, void *data, void (*callback)(void*, microhttp_request_t*));
struct microhttp_server_t {
microtcp_t *tcp;
microtcp_listener_t *listener;
};
microhttp_server_t *microhttp_server_create(microtcp_t *mtcp, uint16_t port)
{
microhttp_server_t *server = malloc(sizeof(microhttp_server_t));
if (!server)
return NULL;
microtcp_listener_t *listener = microtcp_listener_create(mtcp, port);
if (!listener) {
free(server);
return NULL;
}
server->mtcp = mtcp;
server->listener = listener;
return server;
}
void microhttp_server_serve(microhttp_server_t *server, void *data, void (*callback)(void*, microhttp_request_t*))
{
char buffer[65536];
while (1) {
microtcp_socket_t *socket = microtcp_listener_accept(server->listener);
if (!socket)
continue;
int num = microtcp_socket_recv(socket, buffer, sizeof(buffer));
if (num >= 0) {
hp_error_t error;
hp_request_t request;
if (!hp_parse(buffer, num, &request, &error)) {
..
} else {
..
}
}
microtcp_socket_destroy(socket);
}
}
void microhttp_server_destroy(microhttp_server_t *server)
{
microtcp_listener_destroy(server->listener);
free(server);
}