cvar_t log_file = {0, "log_file","", "filename to log messages to"};
cvar_t log_dest_udp = {0, "log_dest_udp","", "UDP address to log messages to (in QW rcon compatible format); multiple destinations can be separated by spaces; DO NOT SPECIFY DNS NAMES HERE"};
-char log_dest_buffer[1500]; // UDP packet
+char log_dest_buffer[1400]; // UDP packet
size_t log_dest_buffer_pos;
+qboolean log_dest_buffer_appending;
char crt_log_file [MAX_OSPATH] = "";
qfile_t* logfile = NULL;
qboolean have_opened_temp_sockets = false;
if(s) if(log_dest_buffer_pos > 5)
{
+ ++log_dest_buffer_appending;
log_dest_buffer[log_dest_buffer_pos++] = 0;
if(!NetConn_HaveServerPorts() && !NetConn_HaveClientPorts()) // then temporarily open one
- {
+ {
have_opened_temp_sockets = true;
NetConn_OpenServerPorts(true);
}
if(have_opened_temp_sockets)
NetConn_CloseServerPorts();
+ --log_dest_buffer_appending;
}
log_dest_buffer_pos = 0;
}
'x', 'y', 'z', '{', '|', '}', '~', '<'
};
+/*
+================
+Con_Rcon_AddChar
+
+Adds a character to the rcon buffer
+================
+*/
+void Con_Rcon_AddChar(char c)
+{
+ if(log_dest_buffer_appending)
+ return;
+ ++log_dest_buffer_appending;
+
+ // if this print is in response to an rcon command, add the character
+ // to the rcon redirect buffer
+
+ if (rcon_redirect && rcon_redirect_bufferpos < (int)sizeof(rcon_redirect_buffer) - 1)
+ rcon_redirect_buffer[rcon_redirect_bufferpos++] = c;
+ else if(*log_dest_udp.string) // don't duplicate rcon command responses here, these are sent another way
+ {
+ if(log_dest_buffer_pos == 0)
+ Log_DestBuffer_Init();
+ log_dest_buffer[log_dest_buffer_pos++] = c;
+ if(log_dest_buffer_pos >= sizeof(log_dest_buffer) - 1) // minus one, to allow for terminating zero
+ Log_DestBuffer_Flush();
+ }
+ else
+ log_dest_buffer_pos = 0;
+
+ --log_dest_buffer_appending;
+}
+
/*
================
Con_Print
extern qboolean sys_nostdout;
void Con_Print(const char *msg)
{
- int mask = 0;
+ static int mask = 0;
static int index = 0;
static char line[MAX_INPUTLINE];
for (;*msg;msg++)
{
- // if this print is in response to an rcon command, add the character
- // to the rcon redirect buffer
- if (rcon_redirect && rcon_redirect_bufferpos < (int)sizeof(rcon_redirect_buffer) - 1)
- rcon_redirect_buffer[rcon_redirect_bufferpos++] = *msg;
- else if(*log_dest_udp.string) // don't duplicate rcon command responses here, these are sent another way
- {
- if(log_dest_buffer_pos == 0)
- Log_DestBuffer_Init();
- log_dest_buffer[log_dest_buffer_pos++] = *msg;
- if(log_dest_buffer_pos >= sizeof(log_dest_buffer) - 1) // minus one, to allow for terminating zero
- Log_DestBuffer_Flush();
- }
- else
- log_dest_buffer_pos = 0;
-
+ Con_Rcon_AddChar(*msg);
// if this is the beginning of a new line, print timestamp
if (index == 0)
{
line[index++] = STRING_COLOR_TAG;
line[index++] = '3';
msg++;
+ Con_Rcon_AddChar(*msg);
}
// store timestamp
for (;*timestamp;index++, timestamp++)
for (;;)
{
int l;
- if (!COM_ParseToken_Simple(&data, false))
+ if (!COM_ParseToken_Simple(&data, false, false))
break;
if (com_token[0] == '{')
continue;
for (l = 0;l < (int)sizeof(keyname) - 1 && com_token[k+l] && com_token[k+l] > ' ';l++)
keyname[l] = com_token[k+l];
keyname[l] = 0;
- if (!COM_ParseToken_Simple(&data, false))
+ if (!COM_ParseToken_Simple(&data, false, false))
break;
if (developer.integer >= 100)
Con_Printf("key: %s %s\n", keyname, com_token);