#include "rmalloc.h"
#include "rhttp.h"
#include "rtest.h"
#include <pthread.h>
int request_handler(rhttp_request_t *r) {
rhttp_send_drain(r->c,
"HTTP/1.1 200 OK\r\n"
"Content-Length: 3\r\n"
"Connection: close\r\n\r\n"
"Ok!",
0);
close(r->c);
return 1;
}
rhttp_request_handler_t handler = request_handler;
void *rhttp_serve_thread(void *port_arg) {
int port = *(int *)port_arg;
rhttp_serve(rhttp_opt_host, port, 1024, rhttp_opt_request_logging, rhttp_opt_debug, handler, NULL);
return NULL;
}
int main(int argc, char *argv[]) {
bool do_test = true;
int port = 9876;
for (int i = 1; i < argc; i++) {
if (!strcmp(argv[i], "--serve")) {
printf("rhttp serve mode\n");
printf("Handlers available:\n");
printf(" - rhttp_root (/)\n");
printf(" - rhttp_counter (/counter*)\n");
printf(" - rhttp_404 (/*)\n");
do_test = false;
}
if (!strcmp(argv[i], "--quiet")) {
rhttp_opt_info = false;
rhttp_opt_warn = false;
rhttp_opt_request_logging = false;
rhttp_opt_debug = false;
printf("Quiet mode enabled\n");
}
if (atoi(argv[i])) {
port = atoi(argv[i]);
}
}
if (do_test) {
rtest_banner("rhttp");
} else {
printf("Serving on %s:%d\n", rhttp_opt_host, port);
handler = rhttp_default_request_handler;
}
pthread_t st;
pthread_create(&st, 0, rhttp_serve_thread, (void *)&port);
char *response = rhttp_client_get("127.0.0.1", port, "/");
if (do_test) {
rassert(!strcmp(response, "Ok!"));
pthread_cancel(st);
// cleanup
} else {
pthread_join(st, NULL);
}
// rhttp_main(argc, argv);
if (do_test)
return rtest_end("");
return 0;
}