first commit

This commit is contained in:
Francesco Cozzuto
2023-03-20 09:43:11 +01:00
commit 00e68532d1
22 changed files with 3401 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
#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);
}
+49
View File
@@ -0,0 +1,49 @@
#include "net.h"
static size_t send_callback()
{
}
int tun_fd;
static size_t recv_callback(void *context, void *dst, size_t len)
{
return read(tun_fd, dst, len);
}
int main(void)
{
net_t net;
net_init(&net, ip, mac, NULL, send_callback, recv_callback);
net_spawn_thread(&net);
uint16_t port = 8080;
net_listener_t *listener = net_listener_create(&net, port);
if (listener == NULL) {
fprintf(stderr, "Failed to start listening\n");
net_free(&net);
return -1;
}
while (1) {
net_socket_t *client = net_listener_accept(listener);
if (client == NULL)
continue;
char message[1024];
size_t messlen;
messlen = net_socket_recv(client, message, sizeof(message));
net_socket_send(client, "echo: ", sizeof("echo: "));
net_socket_send(client, message, messlen);
net_socket_destroy(client);
}
net_listener_destroy(listener);
net_free(&net);
return 0;
}
+26
View File
@@ -0,0 +1,26 @@
#include "mutcp.h"
int main(void)
{
mutcp_t state;
mutcp_create(&state);
mutcp_listener_socket_t *listener =
mutcp_listener_socket_create(&state, 8080);
while (1) {
mutcp_socket_t *socket =
mutcp_listener_socket_accept(listener);
char buffer[1024];
size_t num = mutcp_socket_read(socket, buffer, sizeof(buffer));
mutcp_socket_write(socket, "echo: ", 6);
mutcp_socket_write(socket, buffer, num);
mutcp_socket_destroy(socket);
}
mutcp_listener_socket_destroy(listener);
mutcp_destroy(&state);
return 0;
}