/* ==================== IRC_SendRaw Sends a raw irc command to the server. ==================== */ int IRC_SendRaw(int handle, const char *fmt, ...) { int err; va_list args; char cmd[MAX_INPUTLINE]; va_start(args, fmt); dpvsnprintf(cmd, sizeof(cmd), fmt, args); va_end(args); if(developer.integer) Con_DPrintf("IRC_SendRaw(%i): %s\n", handle, cmd); if(!IS_VALID_IRC_SESSION(handle)) { IRC_Printf("IRC_SendRaw: %i is not a valid session\n", handle); return -1; } if(irc_send_raw(irc_sessions[handle].session, "%s", cmd)) { err = irc_errno(irc_sessions[handle].session); if(err) { IRC_Printf("IRC_SendRaw: Error: %s\n", irc_strerror(err)); return err; } } return 0; }
/* ================ Host_Error This shuts down the server ================ */ void Host_Error (char *error, ...) { va_list argptr; char string[1024]; static qboolean inerror = false; if (inerror) Sys_Error ("Host_Error: recursively entered"); inerror = true; va_start (argptr,error); dpvsnprintf (string, sizeof(string), error, argptr); va_end (argptr); Con_Printf ("Host_Error: %s\n",string); if (sv.active) Host_ShutdownServer (false); Sys_Error ("Host_Error: %s\n",string); // dedicated servers exit inerror = false; longjmp (host_abortserver, 1); }
/* ================ Host_Error This shuts down both the client and server ================ */ void Host_Error (const char *error, ...) { static char hosterrorstring1[MAX_INPUTLINE]; // THREAD UNSAFE static char hosterrorstring2[MAX_INPUTLINE]; // THREAD UNSAFE static qboolean hosterror = false; va_list argptr; // turn off rcon redirect if it was active when the crash occurred // to prevent loops when it is a networking problem Con_Rcon_Redirect_Abort(); va_start (argptr,error); dpvsnprintf (hosterrorstring1,sizeof(hosterrorstring1),error,argptr); va_end (argptr); Con_Printf("Host_Error: %s\n", hosterrorstring1); // LordHavoc: if crashing very early, or currently shutting down, do // Sys_Error instead if (host_framecount < 3 || host_shuttingdown) Sys_Error ("Host_Error: %s", hosterrorstring1); if (hosterror) Sys_Error ("Host_Error: recursively entered (original error was: %s new error is: %s)", hosterrorstring2, hosterrorstring1); hosterror = true; strlcpy(hosterrorstring2, hosterrorstring1, sizeof(hosterrorstring2)); CL_Parse_DumpPacket(); CL_Parse_ErrorCleanUp(); //PR_Crash(); // print out where the crash happened, if it was caused by QC (and do a cleanup) PRVM_Crash(SVVM_prog); PRVM_Crash(CLVM_prog); #ifdef CONFIG_MENU PRVM_Crash(MVM_prog); #endif cl.csqc_loaded = false; Cvar_SetValueQuick(&csqc_progcrc, -1); Cvar_SetValueQuick(&csqc_progsize, -1); SV_LockThreadMutex(); Host_ShutdownServer (); SV_UnlockThreadMutex(); if (cls.state == ca_dedicated) Sys_Error ("Host_Error: %s",hosterrorstring2); // dedicated servers exit CL_Disconnect (); cls.demonum = -1; hosterror = false; Host_AbortCurrentFrame(); }
/* ==================== IRC_Printf Internal, used for logging. ==================== */ static void IRC_Printf(const char *fmt, ...) { va_list args; char msg[MAX_INPUTLINE]; va_start(args, fmt); dpvsnprintf(msg, sizeof(msg), fmt, args); va_end(args); Con_Print("IRC: "); Con_Print(msg); }
/* ================= SV_BroadcastPrintf Sends text to all active clients ================= */ void SV_BroadcastPrintf(const char *fmt, ...) { va_list argptr; char msg[MAX_INPUTLINE]; va_start(argptr,fmt); dpvsnprintf(msg,sizeof(msg),fmt,argptr); va_end(argptr); SV_BroadcastPrint(msg); }
/* ================= Host_ClientCommands Send text over to the client to be executed ================= */ void Host_ClientCommands (char *fmt, ...) { va_list argptr; char string[1024]; va_start (argptr,fmt); dpvsnprintf (string, sizeof(string), fmt, argptr); va_end (argptr); MSG_WriteByte (&host_client->message, svc_stufftext); MSG_WriteString (&host_client->message, string); }
/* ================ Con_DebugLog ================ */ void Con_DebugLog (char *fmt, ...) { va_list argptr; static char data[MAXPRINTMSG]; int fd; va_start(argptr, fmt); dpvsnprintf (data, sizeof(data), fmt, argptr); va_end(argptr); fd = open(va("%s/%s", com_gamedir, logfilename), O_WRONLY | O_CREAT | O_APPEND, 0666); write(fd, data, strlen(data)); close(fd); }
/* ================= Host_ClientCommands Send text over to the client to be executed ================= */ void Host_ClientCommands(const char *fmt, ...) { va_list argptr; char string[MAX_INPUTLINE]; if (!host_client->netconnection) return; va_start(argptr,fmt); dpvsnprintf(string, sizeof(string), fmt, argptr); va_end(argptr); MSG_WriteByte(&host_client->netconnection->message, svc_stufftext); MSG_WriteString(&host_client->netconnection->message, string); }
/* ================ Con_DPrintf A Con_Printf that only shows up if the "developer" cvar is set ================ */ void Con_DPrintf (char *fmt, ...) { va_list argptr; char msg[MAXPRINTMSG]; // don't confuse non-developers with techie stuff... if (!developer.value) return; va_start (argptr,fmt); dpvsnprintf (msg, sizeof(msg), fmt, argptr); va_end (argptr); Con_Printf ("%s", msg); }
/* ================ Con_Printf Handles cursor positioning, line wrapping, etc ================ */ void Con_Printf (char *fmt, ...) { va_list argptr; char msg[MAXPRINTMSG]; va_start (argptr,fmt); dpvsnprintf (msg, sizeof(msg), fmt, argptr); va_end (argptr); // also echo to debugging console Sys_Printf ("%s", msg); // log all messages to file if (con_debuglog) Con_DebugLog("%s", msg); }
void Sys_Error (const char *error, ...) { va_list argptr; char string[MAX_INPUTLINE]; // change stdin to non blocking #ifdef FNDELAY fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY); #endif va_start (argptr,error); dpvsnprintf (string, sizeof (string), error, argptr); va_end (argptr); Con_Printf ("Quake Error: %s\n", string); Host_Shutdown (); exit (1); }
void CL_VM_Error (const char *format, ...) //[515]: hope it will be never executed =) { char errorstring[4096]; va_list argptr; va_start (argptr, format); dpvsnprintf (errorstring, sizeof(errorstring), format, argptr); va_end (argptr); // Con_Printf( "CL_VM_Error: %s\n", errorstring ); PRVM_Crash(); cl.csqc_loaded = false; Cvar_SetValueQuick(&csqc_progcrc, -1); Cvar_SetValueQuick(&csqc_progsize, -1); // Host_AbortCurrentFrame(); //[515]: hmmm... if server says it needs csqc then client MUST disconnect Host_Error("CL_VM_Error: %s", errorstring); }
/* ================= SV_BroadcastPrintf Sends text to all active clients ================= */ void SV_BroadcastPrintf (char *fmt, ...) { va_list argptr; char string[1024]; int i; va_start (argptr,fmt); dpvsnprintf (string, sizeof(string), fmt, argptr); va_end (argptr); for (i=0 ; i<svs.maxclients ; i++) { if (svs.clients[i].active && svs.clients[i].spawned) { MSG_WriteByte (&svs.clients[i].message, svc_print); MSG_WriteString (&svs.clients[i].message, string); } } }
void Sys_Error (const char *error, ...) { va_list argptr; char text[MAX_INPUTLINE]; static int in_sys_error0 = 0; static int in_sys_error1 = 0; static int in_sys_error2 = 0; static int in_sys_error3 = 0; va_start (argptr, error); dpvsnprintf (text, sizeof (text), error, argptr); va_end (argptr); Con_Printf ("Quake Error: %s\n", text); // close video so the message box is visible, unless we already tried that if (!in_sys_error0 && cls.state != ca_dedicated) { in_sys_error0 = 1; VID_Shutdown(); } if (!in_sys_error3 && cls.state != ca_dedicated) { in_sys_error3 = true; MessageBox(NULL, text, "Quake Error", MB_OK | MB_SETFOREGROUND | MB_ICONSTOP); } if (!in_sys_error1) { in_sys_error1 = 1; Host_Shutdown (); } // shut down QHOST hooks if necessary if (!in_sys_error2) { in_sys_error2 = 1; Sys_Shutdown (); } exit (1); }
void Sys_Error (const char *error, ...) { va_list argptr; char string[MAX_INPUTLINE]; // change stdin to non blocking #ifndef WIN32 fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY); #endif va_start (argptr,error); dpvsnprintf (string, sizeof (string), error, argptr); va_end (argptr); Con_Printf ("Quake Error: %s\n", string); #ifdef WIN32 MessageBox(NULL, string, "Quake Error", MB_OK | MB_SETFOREGROUND | MB_ICONSTOP); #endif Host_Shutdown (); exit (1); }