diff --git a/Makefile b/Makefile index 29efe33b..5d3d244f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -main: main.o +main: *.o gcc -g -O2 main.o -lev -L/usr/local/lib -o main -main.o: main.c +main.o: *.c *.h Makefile gcc -g -O2 -c -o main.o main.c .PHONY: clean clean: diff --git a/main.c b/main.c index b70b66f0..fb504dbc 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -19,13 +18,15 @@ #include #include +#include "main.h" + #define PORT 1090 #define REPLY "HTTP/1.1 200 OK\n\nhello" + // every watcher type has its own typedef'd struct // with the name ev_TYPE ev_io stdin_watcher; -ev_timer timeout_watcher; struct server_ctx { ev_io io; diff --git a/main.h b/main.h new file mode 100644 index 00000000..a0d36c3c --- /dev/null +++ b/main.h @@ -0,0 +1,51 @@ +#pragma once + +#include + +#define BUF_SIZE 4096 + +struct server { + int server_fd; + char server_buf[BUF_SIZE]; + int server_buf_len; + struct server_read_ctx *server_read_ctx; + struct server_write_ctx *server_write_ctx; + struct remote *remote; +}; +struct server_read_ctx { + ev_io server_read_io; + struct server *server; +}; +struct server_write_ctx { + ev_io server_write_io; + struct server *server; +}; +struct remote { + int remote_fd; + char remote_buf[BUF_SIZE]; + int remote_buf_len; + struct remote_read_ctx *remote_read_ctx; + struct remote_write_ctx *remote_write_ctx; + struct server *server; +}; +struct remote_read_ctx { + ev_io remote_read_io; + struct remote *remote; +}; +struct remote_write_ctx { + ev_io remote_write_io; + struct remote *remote; +}; + + +static void +accept_cb (EV_P_ ev_io *w, int revents); +static void +server_read_cb (EV_P_ ev_io *w, int revents); +static void +server_write_cb (EV_P_ ev_io *w, int revents); +static void +remote_read_cb (EV_P_ ev_io *w, int revents); +static void +remote_write_cb (EV_P_ ev_io *w, int revents); +