first commit
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user