Added basic logging

This commit is contained in:
Andrew Pamment 2016-04-10 14:10:18 +10:00
parent 70a2ced9cf
commit fc970f3d25
7 changed files with 44 additions and 5 deletions

1
.gitignore vendored
View File

@ -9,4 +9,5 @@ last10.dat
ansis/*
config/*
illusion/*
logs/*
*.a

38
bbs.c
View File

@ -9,6 +9,7 @@
#include <signal.h>
#include <sys/utsname.h>
#include <sys/time.h>
#include <stdarg.h>
#include "inih/ini.h"
#include "bbs.h"
@ -21,6 +22,34 @@ int gSocket;
int usertimeout;
int timeoutpaused;
void dolog(char *fmt, ...) {
char buffer[512];
struct tm time_now;
time_t timen;
FILE *logfptr;
if (conf.log_path == NULL) return;
timen = time(NULL);
localtime_r(&timen, &time_now);
snprintf(buffer, 512, "%s/%04d%02d%02d.log", conf.log_path, time_now.tm_year + 1900, time_now.tm_mon + 1, time_now.tm_mday);
logfptr = fopen(buffer, "a");
if (!logfptr) {
printf("Error opening log file!\n");
return;
}
va_list ap;
va_start(ap, fmt);
vsnprintf(buffer, 512, fmt, ap);
va_end(ap);
fprintf(logfptr, "%02d:%02d:%02d %s\n", time_now.tm_hour, time_now.tm_min, time_now.tm_sec, buffer);
fclose(logfptr);
}
struct fido_addr *parse_fido_addr(const char *str) {
struct fido_addr *ret = (struct fido_addr *)malloc(sizeof(struct fido_addr));
int c;
@ -322,6 +351,8 @@ static int handler(void* user, const char* section, const char* name,
conf->ansi_path = strdup(value);
} else if (strcasecmp(name, "bbs path") == 0) {
conf->bbs_path = strdup(value);
} else if (strcasecmp(name, "log path") == 0) {
conf->log_path = strdup(value);
}
} else if (strcasecmp(section, "mail conferences") == 0) {
if (conf->mail_conference_count == 0) {
@ -512,6 +543,7 @@ void disconnect(int socket) {
if (gUser != NULL) {
save_user(gUser);
}
dolog("Node %d disconnected", mynode);
sprintf(buffer, "%s/nodeinuse.%d", conf.bbs_path, mynode);
remove(buffer);
close(socket);
@ -631,6 +663,7 @@ void runbbs(int socket, char *config_path) {
conf.irc_port = 6667;
conf.text_file_count = 0;
conf.external_editor_cmd = NULL;
conf.log_path = NULL;
// Load BBS data
if (ini_parse(config_path, handler, &conf) <0) {
@ -751,6 +784,7 @@ void runbbs(int socket, char *config_path) {
fclose(nodefile);
// do post-login
dolog("%s logged in, on node %d", user->loginname, mynode);
// check time left
now = time(NULL);
localtime_r(&now, &thetime);
@ -770,7 +804,7 @@ void runbbs(int socket, char *config_path) {
while (stat(buffer, &s) == 0) {
sprintf(buffer, "bulletin%d", i);
s_displayansi(socket, buffer);
sprintf(buffer, "Press any key to continue...\r\n");
sprintf(buffer, "\e[0mPress any key to continue...\r\n");
s_putstring(socket, buffer);
s_getc(socket);
i++;
@ -799,6 +833,6 @@ void runbbs(int socket, char *config_path) {
main_menu(socket, user);
s_displayansi(socket, "goodbye");
dolog("%s is logging out, on node %d", user->loginname, mynode);
disconnect(socket);
}

3
bbs.h
View File

@ -83,6 +83,7 @@ struct bbs_config {
char *ansi_path;
char *bbs_path;
char *log_path;
char *default_tagline;
@ -128,7 +129,7 @@ struct user_record {
int timeson;
};
extern void dolog(char *fmt, ...);
extern void runbbs(int sock, char *config);
extern struct fido_addr *parse_fido_addr(const char *str);
extern void s_putchar(int socket, char c);

View File

@ -13,6 +13,7 @@ External Editor stdio = false
[paths]
ANSI Path = /home/andrew/MagickaBBS/ansis
BBS Path = /home/andrew/MagickaBBS
Log Path = /home/andrew/MagickaBBS/logs
[mail conferences]
Local Mail = config/localmail.ini

View File

@ -262,7 +262,9 @@ int door_menu(int socket, struct user_record *user) {
{
for (i=0;i<conf.door_count;i++) {
if (tolower(c) == tolower(conf.doors[i]->key)) {
dolog("%s is launched door %s, on node %d", user->loginname, conf.doors[i]->name, mynode);
rundoor(socket, user, conf.doors[i]->command, conf.doors[i]->stdio);
dolog("%s is returned from door %s, on node %d", user->loginname, conf.doors[i]->name, mynode);
break;
}
}

2
main.c
View File

@ -8,6 +8,7 @@
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <arpa/inet.h>
#include "bbs.h"
void sigchld_handler(int s)
@ -71,7 +72,6 @@ int main(int argc, char **argv) {
if (pid == 0) {
close(socket_desc);
runbbs(client_sock, argv[1]);
exit(0);

View File

@ -82,7 +82,7 @@ void main_menu(int socket, struct user_record *user) {
while (stat(buffer, &s) == 0) {
sprintf(buffer, "bulletin%d", i);
s_displayansi(socket, buffer);
sprintf(buffer, "Press any key to continue...\r\n");
sprintf(buffer, "\e[0mPress any key to continue...\r\n");
s_putstring(socket, buffer);
s_getc(socket);
i++;