From 58b533fc716ff716e36b88ae84428a6a05d4db0e Mon Sep 17 00:00:00 2001 From: Cara Salter Date: Fri, 28 Oct 2022 14:23:25 -0400 Subject: log: Logging, but make it :sparkles: pretty :sparkles: --- src/data.c | 21 +++++++--------- src/log.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ src/log.h | 8 +++--- src/login.c | 24 +++++++++--------- src/main.c | 9 ++++--- src/server.c | 34 +++++++++++++------------ 6 files changed, 121 insertions(+), 56 deletions(-) diff --git a/src/data.c b/src/data.c index de0c5b9..da9d080 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include #include "data.h" #include "login.h" +#include "log.h" #include #include #include @@ -21,10 +22,10 @@ int try_make_data_dirs() { int try_load_plr(char *player_name, playerc_t *plr) { int err = 0; - printf("Trying to make data directories...\n"); + debug("Trying to make data directories...\n"); try_make_data_dirs(); - printf("Done, opening file.\n"); + debug("Done, opening file.\n"); char *fname; asprintf(&fname, "data/players/%s.plr", player_name); @@ -33,20 +34,20 @@ int try_load_plr(char *player_name, playerc_t *plr) { if (fp = fopen(fname, "r")) { - printf("Got fp\n"); + debug("Got fp\n"); if (deserialize_player(fp, &plr->plr) == EOF) { - printf("Couldn't deserialize player\n"); + error("Couldn't deserialize player\n"); return -1; } } else { - printf("Couldn't open file: %d\n", errno); + error("Couldn't open file: %d\n", errno); printf("%s", strerror(errno)); return -1; } - printf("Read file into plr\n"); + debug("Read file into plr\n"); fclose(fp); return err; @@ -61,7 +62,7 @@ int try_write_plr(player_t *plr) { // Now the errors that continue will be from I/O, which we can use to // figure out if the file exists in login case EACCES: /* No permissions***************************************/ - printf("No permissions to create directories\n"); + error("No permissions to create directories\n"); return -1; default: /* Do nothing because this is fine****************************/ break; @@ -76,8 +77,6 @@ int try_write_plr(player_t *plr) { char* buf = malloc(sizeof(player_t) + 1); serialize_player(plr, fp); - printf("serialized as: %s\n"); - fprintf(fp, "%s", buf); fclose(fp); @@ -98,9 +97,6 @@ int try_write_plr(player_t *plr) { */ int serialize_player(player_t *plr, FILE* fp) { int err = 0; - - printf("%s\n", plr->pw_hash); - err = fprintf(fp, "%d:%d:%d:%d:%d:%s %s", plr->xp, plr->hp, plr->max_hp, plr->level, plr->location_id, plr->pw_hash, plr->name); return err; @@ -119,6 +115,7 @@ int deserialize_player(FILE* fp, player_t* plr) { if (fp == NULL) { perror("can't open player file"); + error("Can't open player file"); return -1; } diff --git a/src/log.c b/src/log.c index c6e2af2..1d8e50b 100644 --- a/src/log.c +++ b/src/log.c @@ -16,9 +16,12 @@ * ===================================================================================== */ +#define _GNU_SOURCE /* ##### HEADER FILE INCLUDES ################################################### */ +#include #include +#include #include @@ -27,17 +30,31 @@ /* * === FUNCTION ====================================================================== - * Name: debug - * Description: Outputs debugging information to stdout + * Name: print_date + * Description: Prints the current date/time to stdout without a newline * ===================================================================================== */ -int debug(char msg[]) { - /* :TODO:10/27/2022 11:48:32 AM:: Fix time get */ - +void print_date() { time_t cur_time = time(NULL); - struct tm t = *localtime(&t); + struct tm t = *localtime(&cur_time); - printf("now: %d-%02d-%02d %02d:%02d:%02d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); + printf("%d-%02d-%02d %02d:%02d:%02d", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); +} /* ----- end of function print_date ----- */ +/* + * === FUNCTION ====================================================================== + * Name: debug + * Description: Outputs debugging information to stdout + * ===================================================================================== + */ +int debug(char msg[], ...) { + va_list args; + print_date(); + va_start(args, msg); + char *fmt_string; + asprintf(&fmt_string, msg, args); + printf(" \033[34mDEBUG\033[0m %s\n", fmt_string); + //free(fmt_string); + va_end(args); return 0; } @@ -48,6 +65,54 @@ int debug(char msg[]) { * Description: Outputs informational messages to stdout * ===================================================================================== */ -int info(char msg[]) { +int info(char msg[], ...) { + va_list args; + print_date(); + va_start(args, msg); + char *fmt_string; + asprintf(&fmt_string, msg, args); + printf(" \033[32mINFO\033[0m %s\n", fmt_string); + //free(fmt_string); + va_end(args); return 0; } /* ----- end of function info ----- */ + + +/* + * === FUNCTION ====================================================================== + * Name: warning + * Description: Outputs a warning message to stdout + * ===================================================================================== + */ +int warning(char msg[], ...) { + va_list args; + + print_date(); + va_start(args, msg); + char *fmt_string; + asprintf(&fmt_string, msg, args); + printf(" \033[33mWARNING\033[0m %s\n", fmt_string); + //free(fmt_string); + va_end(args); + return 0; +} /* ----- end of function warning ----- */ + + +/* + * === FUNCTION ====================================================================== + * Name: error + * Description: Outputs an error to stdout and stderr + * ===================================================================================== + */ +int error(char msg[], ...) { + va_list args; + print_date(); + va_start(args, msg); + char *fmt_string; + asprintf(&fmt_string, msg, args); + printf(" \033[31mERROR\033[0m %s\n", fmt_string); + fprintf(stderr, " \033[31mERROR\033[0m %s\n", fmt_string); + //free(fmt_string); + va_end(args); + return 0; +} /* ----- end of function error ----- */ diff --git a/src/log.h b/src/log.h index cf2fa3e..e09ed82 100644 --- a/src/log.h +++ b/src/log.h @@ -18,6 +18,8 @@ /* ##### EXPORTED FUNCTION DECLARATIONS ######################################### */ - /* :TODO:10/27/2022 11:48:08 AM:: Sort out other levels */ -int debug(char msg[]); -int info(char msg[]); + +int debug(char msg[], ...); +int info(char msg[], ...); +int warning(char msg[], ...); +int error(char msg[], ...); diff --git a/src/login.c b/src/login.c index 8214234..5c08c70 100644 --- a/src/login.c +++ b/src/login.c @@ -11,20 +11,20 @@ #include void handle_player(int conn_fd) { - printf("Let's make a new player object\n"); + debug("Let's make a new player object\n"); playerc_t plrc = {0}; plrc.state = LoggedOut; plrc.conn = conn_fd; player_t plr = {0}; plrc.plr = plr; - printf("No sense in having a player if they can't log in!\n"); + debug("No sense in having a player if they can't log in!\n"); int err = step_login(&plrc, conn_fd); if (err) { err = send_to_fd(conn_fd, "Error in login process, exiting"); if (err) { - printf("Could not send error message"); + error("Could not send error message"); } close(conn_fd); return; @@ -40,16 +40,16 @@ int step_login(playerc_t *player, int conn_fd) { switch (player->state) { case LoggedOut: ; /* the player has yet to log in, this is a fresh connection! */ - printf("The player is logged out\n"); + debug("The player is logged out\n"); send_to_fd(player->conn, "Welcome! Please enter your **username** below\n"); char *buf = (char *)malloc(1 << 10); - printf("Waiting to receive...\n"); + debug("Waiting to receive...\n"); recv(player->conn, buf, 1024, 0); - printf("Received!\n"); + debug("Received!\n"); char* playername = trimwhitespace(buf); err = try_load_plr(playername, player); - printf("Finished trying to load the player\n"); + debug("Finished trying to load the player\n"); if (err) { // File doesn't exist, let's create a player! player->plr.name = (char *)malloc(32); @@ -75,8 +75,7 @@ int step_login(playerc_t *player, int conn_fd) { memset(buf, '\0', 1 << 9); recv(player->conn, buf, sizeof(buf), 0); char* pw = trimwhitespace(buf); - int res = argon2i_verify(player->plr.pw_hash, pw, strlen(pw)); - printf("%d\n", res); + int res = argon2i_verify(player->plr.pw_hash, pw, strlen(pw)); if (res == ARGON2_OK) { // The password is good! send_to_fd(player->conn, "That looks good to me! Let's get you loaded in\n"); @@ -101,8 +100,7 @@ int step_login(playerc_t *player, int conn_fd) { err = argon2i_hash_encoded(32, 512, 1, pw, strlen(pw), "adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I=", strlen("adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I="), 32, player->plr.pw_hash, 512); if (err != ARGON2_OK) { - send_to_fd(player->conn, "Uhhh, something happened. Try again."); - printf("%d\n", err); + send_to_fd(player->conn, "Uhhh, something happened. Try again."); player->state = LoggedOut; break; } else { @@ -112,9 +110,9 @@ int step_login(playerc_t *player, int conn_fd) { player->plr.level = 1; player->plr.xp = 0; player->plr.location_id = 0; - printf("Trying to write player\n"); + debug("Trying to write player\n"); try_write_plr(&player->plr); - printf("Done\n"); + debug("Done\n"); player->state = Complete; } } diff --git a/src/main.c b/src/main.c index c9ec18e..2c45a58 100644 --- a/src/main.c +++ b/src/main.c @@ -14,17 +14,18 @@ int main() { int err = 0; server_t server = {0}; - err = server_listen(&server); - debug("Test"); + err = server_listen(&server); if (err) { - printf("Failed to listen on address"); + error("Failed to listen on address"); return err; } + info("Listening and waiting for connections"); + for (;;) { err = server_accept(&server); if (err) { - printf("Failed accepting connection"); + error("Failed accepting connection"); return err; } } diff --git a/src/server.c b/src/server.c index 87cf6b7..7583e9c 100644 --- a/src/server.c +++ b/src/server.c @@ -1,5 +1,6 @@ #include "server.h" #include "login.h" +#include "log.h" #include #include #include @@ -12,7 +13,7 @@ static int socket_fd; void closeServer(int dummy) { close(socket_fd); - printf("Caught SIGINT\n"); + info("Caught SIGINT\n"); } int server_listen(server_t *server) { @@ -29,30 +30,31 @@ int server_listen(server_t *server) { if (err == -1) { perror("socket"); - printf("Failed to create socket"); + error("Failed to create socket"); return err; } struct sockaddr_in server_addr = {0}; - - if (signal(SIGINT, closeServer) == SIG_ERR) { - printf("Could not set signal handler\n"); - return -1; - } - +/* + * if (signal(SIGINT, closeServer) == SIG_ERR) { + * error("Could not set signal handler\n"); + * return -1; + * } + * + */ server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(8000); - if (setsockopt(server->listen_fd, SOL_SOCKET, SO_REUSEADDR,1,sizeof(1))) { - printf("Could not set SO_REUSEADDR on server socket, continuing\n"); + if (setsockopt(server->listen_fd, SOL_SOCKET, SO_REUSEADDR,(int*)1,1)) { + debug("Could not set SO_REUSEADDR on server socket, continuing"); } err = bind(server->listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (err == -1) { perror("bind"); - printf("Failed to bind socket\n"); + error("Failed to bind socket\n"); return err; } @@ -61,10 +63,10 @@ int server_listen(server_t *server) { err = listen(server->listen_fd, 100); if (err == -1) { perror("listen"); - printf("Failed to listen on socket\n"); + error("Failed to listen on socket\n"); return err; } - printf("Bound to port 8000\n"); + info("Bound to port 8000"); return 0; } @@ -81,15 +83,15 @@ int server_accept(server_t *server) { for (;;) { err = (conn_fd = accept(server->listen_fd, (struct sockaddr *)&client_addr, &client_len)); - printf("Accepting a new connection\n"); + debug("Accepting a new connection"); if (err == -1) { perror("Accept"); - printf("failed accepting connection\n"); + error("failed accepting connection\n"); return err; } if (!fork()) { - printf("Forking, let's go handle them!\n"); + debug("Forking, let's go handle them!\n"); handle_player(conn_fd); } } -- cgit v1.2.3