From acf2de7612630a1055f089feaec213369a4b8853 Mon Sep 17 00:00:00 2001 From: Jeff Teunissen Date: Wed, 2 Aug 2000 07:13:12 +0000 Subject: [PATCH] Enabled time stamped messages for server. To turn it on, set sv_timestamps. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To configure how timestamps are formatted, use the sv_timefmt Cvar. It's a formatted string, with the following special tokens (taken from the strftime() manual page): %a The abbreviated weekday name according to the cur­ rent locale. %A The full weekday name according to the current locale. %b The abbreviated month name according to the current locale. %B The full month name according to the current locale. %c The preferred date and time representation for the current locale. %C The century number (year/100) as a 2-digit integer. (SU) %C The century number (the year divided by 100 and truncated to an integer). %d The day of the month as a decimal number (range 01 to 31). %D Equivalent to %m/%d/%y. (Yecch - for Americans only. Americans should note that in other coun­ tries %d/%m/%y is rather common. This means that in international context this format is ambiguous and should not be used.) (SU) %e Like %d, the day of the month as a decimal number, but a leading zero is replaced by a space. (SU) %E Modifier: use alternative format, see below. (SU) %G The ISO 8601 year with century as a decimal number. The 4-digit year corresponding to the ISO week num­ ber (see %V). This has the same format and value as %y, except that if the ISO week number belongs to the previous or next year, that year is used instead. (TZ) %g Like %G, but without century, i.e., with a 2-digit year (00-99). (TZ) %h Equivalent to %b. (SU) %H The hour as a decimal number using a 24-hour clock (range 00 to 23). %I The hour as a decimal number using a 12-hour clock (range 01 to 12). %j The day of the year as a decimal number (range 001 to 366). %k The hour (24-hour clock) as a decimal number (range 0 to 23); single digits are preceded by a blank. (See also %H.) (TZ) %l The hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank. (See also %I.) (TZ) %m The month as a decimal number (range 01 to 12). %M The minute as a decimal number (range 00 to 59). %n A newline character. (SU) %O Modifier: use alternative format, see below. (SU) %p Either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale. Noon is treated as `pm' and midnight as `am'. %P Like %p but in lowercase: `am' or `pm' or a corre­ sponding string for the current locale. (GNU) %r The time in a.m. or p.m. notation. In the POSIX locale this is equivalent to `%I:%M:%S %p'. (SU) %R The time in 24-hour notation (%H:%M). (SU) For a version including the seconds, see %T below. %s The number of seconds since the Epoch, i.e., since 1970-01-01 00:00:00 UTC. (TZ) %S The second as a decimal number (range 00 to 61). %t A tab character. (SU) %T The time in 24-hour notation (%H:%M:%S). (SU) %u The day of the week as a decimal, range 1 to 7, Monday being 1. See also %w. (SU) %U The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday as the first day of week 01. See also %V and %W. %V The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week. See also %U and %W. (SU) %w The day of the week as a decimal, range 0 to 6, Sunday being 0. See also %u. %W The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday as the first day of week 01. %x The preferred date representation for the current locale without the time. %X The preferred time representation for the current locale without the date. %y The year as a decimal number without a century (range 00 to 99). %Y The year as a decimal number including the century. %z The time-zone as hour offset from GMT. Required to emit RFC822-conformant dates (using "%a, %d %b %Y %H:%M:%S %z"). (GNU) %Z The time zone or name or abbreviation. %+ The date and time in date(1) format. (TZ) %% A literal `%' character. Some of these may not work on some systems. --- source/sv_main.c | 6 ++++++ source/sv_send.c | 35 +++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/source/sv_main.c b/source/sv_main.c index bcf0aa8..0e63d69 100644 --- a/source/sv_main.c +++ b/source/sv_main.c @@ -93,6 +93,9 @@ extern cvar_t *sv_timekick; extern cvar_t *sv_timekick_fuzz; extern cvar_t *sv_timekick_interval; +cvar_t *sv_timestamps; +cvar_t *sv_timefmt; + // // game rules mirrored in svs.info // @@ -1390,6 +1393,9 @@ void SV_InitLocal (void) sv_timekick_fuzz = Cvar_Get("sv_timekick_fuzz", "15", CVAR_NONE, "Time cheat \"fuzz factor\""); sv_timekick_interval = Cvar_Get("sv_timekick_interval", "30", CVAR_NONE, "Time cheat check interval"); + sv_timestamps = Cvar_Get ("sv_timestamps", "0", CVAR_NONE, "Time/date stamps in log entries"); + sv_timefmt = Cvar_Get ("sv_timefmt", "[%b %e %X] ", CVAR_NONE, "Time/date format to use"); + filterban = Cvar_Get("filterban", "1", CVAR_NONE, "None"); allow_download = Cvar_Get("allow_download", "1", CVAR_NONE, "None"); diff --git a/source/sv_send.c b/source/sv_send.c index 6de54e7..eb61533 100644 --- a/source/sv_send.c +++ b/source/sv_send.c @@ -42,6 +42,7 @@ #include #include #include +#include #define CHAN_AUTO 0 #define CHAN_WEAPON 1 @@ -61,7 +62,9 @@ char outputbuf[8000]; redirect_t sv_redirected; -extern cvar_t *sv_phs; +extern cvar_t *sv_phs; +extern cvar_t *sv_timestamps; +extern cvar_t *sv_timefmt; /* ================== @@ -129,23 +132,39 @@ void Con_Printf (char *fmt, ...) { va_list argptr; char msg[MAXPRINTMSG]; + char msg2[MAXPRINTMSG]; + char msg3[MAXPRINTMSG]; + time_t mytime = 0; + struct tm *local = NULL; + qboolean timestamps = false; va_start (argptr, fmt); vsnprintf (msg, sizeof(msg), fmt, argptr); va_end (argptr); - // add to redirected message - if (sv_redirected) - { - if (strlen (msg) + strlen(outputbuf) > sizeof(outputbuf) - 1) + if (sv_timestamps && sv_timestamps->value && sv_timefmt && sv_timefmt->string) + timestamps = true; + + if (timestamps) { + mytime = time (NULL); + local = localtime (&mytime); + strftime (msg3, sizeof (msg3), sv_timefmt->string, local); + + snprintf (msg2, sizeof (msg2), "%s%s", msg3, msg); + } else { + snprintf (msg2, sizeof (msg2), "%s", msg); + } + + if (sv_redirected) { // add to redirected message + if (strlen (msg2) + strlen(outputbuf) > sizeof(outputbuf) - 1) SV_FlushRedirect (); - strcat (outputbuf, msg); + strcat (outputbuf, msg2); return; } - Sys_Printf ("%s", msg); // also echo to debugging console + Sys_Printf ("%s", msg2); // also echo to debugging console if (sv_logfile) - fprintf (sv_logfile, "%s", msg); + fprintf (sv_logfile, "%s", msg2); } /*