aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCara Salter <cara@devcara.com>2022-10-28 14:23:25 -0400
committerCara Salter <cara@devcara.com>2022-10-28 14:23:25 -0400
commit58b533fc716ff716e36b88ae84428a6a05d4db0e (patch)
tree7c55a61ff3154962c05488a90aecf49da460ee3e
parentaea6381412f36ea522afe0d3aab67de772fe72d3 (diff)
downloadcmud-58b533fc716ff716e36b88ae84428a6a05d4db0e.tar.gz
cmud-58b533fc716ff716e36b88ae84428a6a05d4db0e.zip
log: Logging, but make it :sparkles: pretty :sparkles:
-rw-r--r--src/data.c21
-rw-r--r--src/log.c81
-rw-r--r--src/log.h8
-rw-r--r--src/login.c24
-rw-r--r--src/main.c9
-rw-r--r--src/server.c34
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 <stdlib.h>
#include "data.h"
#include "login.h"
+#include "log.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>
@@ -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 <stdarg.h>
#include <stdlib.h>
+#include <stdio.h>
#include <time.h>
@@ -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 <argon2.h>
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 <netinet/in.h>
#include <stdio.h>
#include <string.h>
@@ -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);
}
}