#include "sv_demo.h"
#include "image.h"
+#include "prvm_cmds.h"
#include "utf8lib.h"
// for secure rcon authentication
if (svs.clients[i].active)
players++;
print ("host: %s\n", Cvar_VariableString ("hostname"));
- print ("version: %s build %s\n", gamename, buildstring);
+ print ("version: %s build %s (gamename %s)\n", gamename, buildstring, gamenetworkfiltername);
print ("protocol: %i (%s)\n", Protocol_NumberForEnum(sv.protocol), Protocol_NameForEnum(sv.protocol));
print ("map: %s\n", sv.name);
print ("timing: %s\n", Host_TimingReport(vabuf, sizeof(vabuf)));
svs.clients = (client_t *)Mem_Alloc(sv_mempool, sizeof(client_t) * svs.maxclients);
}
+#ifdef CONFIG_MENU
// remove menu
if (key_dest == key_menu || key_dest == key_menu_grabbed)
MR_ToggleMenu(0);
+#endif
key_dest = key_game;
svs.serverflags = 0; // haven't completed an episode yet
return;
}
+#ifdef CONFIG_MENU
// remove menu
if (key_dest == key_menu || key_dest == key_menu_grabbed)
MR_ToggleMenu(0);
+#endif
key_dest = key_game;
SV_SaveSpawnparms ();
return;
}
+#ifdef CONFIG_MENU
// remove menu
if (key_dest == key_menu || key_dest == key_menu_grabbed)
MR_ToggleMenu(0);
+#endif
key_dest = key_game;
allowcheats = sv_cheats.integer != 0;
FS_Printf(f,"sv.sound_precache %i %s\n", i, sv.sound_precache[i]);
// darkplaces extension - save buffers
- numbuffers = Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray);
+ numbuffers = (int)Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray);
for (i = 0; i < numbuffers; i++)
{
prvm_stringbuffer_t *stringbuffer = (prvm_stringbuffer_t*) Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, i);
===============
*/
-prvm_stringbuffer_t *BufStr_FindCreateReplace (prvm_prog_t *prog, int bufindex, int flags, char *format);
-void BufStr_Set(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex, const char *str);
-void BufStr_Del(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer);
-void BufStr_Flush(prvm_prog_t *prog);
-
static void Host_Loadgame_f (void)
{
prvm_prog_t *prog = SVVM_prog;
if (cls.demoplayback)
CL_Disconnect ();
+#ifdef CONFIG_MENU
// remove menu
if (key_dest == key_menu || key_dest == key_menu_grabbed)
MR_ToggleMenu(0);
+#endif
key_dest = key_game;
cls.demonum = -1; // stop demo loop in case this fails
Mem_Free(text);
// remove all temporary flagged string buffers (ones created with BufStr_FindCreateReplace)
- numbuffers = Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray);
+ numbuffers = (int)Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray);
for (i = 0; i < numbuffers; i++)
{
if ( (stringbuffer = (prvm_stringbuffer_t *)Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, i)) )
if (Cmd_Argc () == 1)
{
- Con_Printf("name: %s\n", cl_name.string);
+ if (cmd_source == src_command)
+ {
+ Con_Printf("name: %s\n", cl_name.string);
+ }
return;
}
if (Cmd_Argc () == 1)
{
- Con_Printf("\"playermodel\" is \"%s\"\n", cl_playermodel.string);
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"playermodel\" is \"%s\"\n", cl_playermodel.string);
+ }
return;
}
if (Cmd_Argc () == 1)
{
- Con_Printf("\"playerskin\" is \"%s\"\n", cl_playerskin.string);
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"playerskin\" is \"%s\"\n", cl_playerskin.string);
+ }
return;
}
if (Cmd_Argc() == 1)
{
- Con_Printf("\"color\" is \"%i %i\"\n", cl_color.integer >> 4, cl_color.integer & 15);
- Con_Print("color <0-15> [0-15]\n");
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"color\" is \"%i %i\"\n", cl_color.integer >> 4, cl_color.integer & 15);
+ Con_Print("color <0-15> [0-15]\n");
+ }
return;
}
{
if (Cmd_Argc() == 1)
{
- Con_Printf("\"topcolor\" is \"%i\"\n", (cl_color.integer >> 4) & 15);
- Con_Print("topcolor <0-15>\n");
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"topcolor\" is \"%i\"\n", (cl_color.integer >> 4) & 15);
+ Con_Print("topcolor <0-15>\n");
+ }
return;
}
{
if (Cmd_Argc() == 1)
{
- Con_Printf("\"bottomcolor\" is \"%i\"\n", cl_color.integer & 15);
- Con_Print("bottomcolor <0-15>\n");
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"bottomcolor\" is \"%i\"\n", cl_color.integer & 15);
+ Con_Print("bottomcolor <0-15>\n");
+ }
return;
}
}
cvar_t cl_rate = {CVAR_SAVE | CVAR_NQUSERINFOHACK, "_cl_rate", "20000", "internal storage cvar for current rate (changed by rate command)"};
+cvar_t cl_rate_burstsize = {CVAR_SAVE | CVAR_NQUSERINFOHACK, "_cl_rate_burstsize", "1024", "internal storage cvar for current rate control burst size (changed by rate_burstsize command)"};
static void Host_Rate_f(void)
{
int rate;
if (Cmd_Argc() != 2)
{
- Con_Printf("\"rate\" is \"%i\"\n", cl_rate.integer);
- Con_Print("rate <bytespersecond>\n");
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"rate\" is \"%i\"\n", cl_rate.integer);
+ Con_Print("rate <bytespersecond>\n");
+ }
return;
}
host_client->rate = rate;
}
+static void Host_Rate_BurstSize_f(void)
+{
+ int rate_burstsize;
+
+ if (Cmd_Argc() != 2)
+ {
+ Con_Printf("\"rate_burstsize\" is \"%i\"\n", cl_rate_burstsize.integer);
+ Con_Print("rate_burstsize <bytes>\n");
+ return;
+ }
+
+ rate_burstsize = atoi(Cmd_Argv(1));
+
+ if (cmd_source == src_command)
+ {
+ Cvar_SetValue ("_cl_rate_burstsize", rate_burstsize);
+ return;
+ }
+
+ host_client->rate_burstsize = rate_burstsize;
+}
/*
==================
}
sv.paused ^= 1;
- SV_BroadcastPrintf("%s %spaused the game\n", host_client->name, sv.paused ? "" : "un");
+ if (cmd_source != src_command)
+ SV_BroadcastPrintf("%s %spaused the game\n", host_client->name, sv.paused ? "" : "un");
+ else if(*(sv_adminnick.string))
+ SV_BroadcastPrintf("%s %spaused the game\n", sv_adminnick.string, sv.paused ? "" : "un");
+ else
+ SV_BroadcastPrintf("%s %spaused the game\n", hostname.string, sv.paused ? "" : "un");
// send notification to all clients
MSG_WriteByte(&sv.reliable_datagram, svc_setpause);
MSG_WriteByte(&sv.reliable_datagram, sv.paused);
if (Cmd_Argc () == 1)
{
- Con_Printf("\"pmodel\" is \"%s\"\n", cl_pmodel.string);
+ if (cmd_source == src_command)
+ {
+ Con_Printf("\"pmodel\" is \"%s\"\n", cl_pmodel.string);
+ }
return;
}
i = atoi(Cmd_Argv(1));
{
int n;
const char *e;
- lhnetaddress_t to;
lhnetsocket_t *mysocket;
- char peer_address[64];
if (Cmd_Argc() == 1)
{
n = e ? e-rcon_password.string : (int)strlen(rcon_password.string);
if (cls.netcon)
- {
- InfoString_GetValue(cls.userinfo, "*ip", peer_address, sizeof(peer_address));
- }
+ cls.rcon_address = cls.netcon->peeraddress;
else
{
if (!rcon_address.string[0])
Con_Printf ("You must either be connected, or set the rcon_address cvar to issue rcon commands\n");
return;
}
- strlcpy(peer_address, rcon_address.string, strlen(rcon_address.string)+1);
+ LHNETADDRESS_FromString(&cls.rcon_address, rcon_address.string, sv_netport.integer);
}
- LHNETADDRESS_FromString(&to, peer_address, sv_netport.integer);
- mysocket = NetConn_ChooseClientSocketForAddress(&to);
+ mysocket = NetConn_ChooseClientSocketForAddress(&cls.rcon_address);
if (mysocket)
{
sizebuf_t buf;
MSG_WriteByte(&buf, 0); // terminate the (possibly partial) string
MSG_WriteString(&buf, Cmd_Args());
StoreBigLong(buf.data, NETFLAG_CTL | (buf.cursize & NETFLAG_LENGTH_MASK));
- NetConn_Write(mysocket, buf.data, buf.cursize, &to);
+ NetConn_Write(mysocket, buf.data, buf.cursize, &cls.rcon_address);
SZ_Clear(&buf);
}
}
{
int i, n;
const char *e;
- lhnetaddress_t to;
lhnetsocket_t *mysocket;
- char vabuf[1024];
if (Cmd_Argc() == 1)
{
n = e ? e-rcon_password.string : (int)strlen(rcon_password.string);
if (cls.netcon)
- to = cls.netcon->peeraddress;
+ cls.rcon_address = cls.netcon->peeraddress;
else
{
if (!rcon_address.string[0])
Con_Printf ("You must either be connected, or set the rcon_address cvar to issue rcon commands\n");
return;
}
- LHNETADDRESS_FromString(&to, rcon_address.string, sv_netport.integer);
+ LHNETADDRESS_FromString(&cls.rcon_address, rcon_address.string, sv_netport.integer);
}
- mysocket = NetConn_ChooseClientSocketForAddress(&to);
+ mysocket = NetConn_ChooseClientSocketForAddress(&cls.rcon_address);
if (mysocket && Cmd_Args()[0])
{
// simply put together the rcon packet and send it
}
for (i = 0;i < MAX_RCONS;i++)
if(cls.rcon_commands[i][0])
- if (!LHNETADDRESS_Compare(&to, &cls.rcon_addresses[i]))
+ if (!LHNETADDRESS_Compare(&cls.rcon_address, &cls.rcon_addresses[i]))
break;
++cls.rcon_trying;
if(i >= MAX_RCONS)
- NetConn_WriteString(mysocket, "\377\377\377\377getchallenge", &to); // otherwise we'll request the challenge later
+ NetConn_WriteString(mysocket, "\377\377\377\377getchallenge", &cls.rcon_address); // otherwise we'll request the challenge later
strlcpy(cls.rcon_commands[cls.rcon_ringpos], Cmd_Args(), sizeof(cls.rcon_commands[cls.rcon_ringpos]));
- cls.rcon_addresses[cls.rcon_ringpos] = to;
+ cls.rcon_addresses[cls.rcon_ringpos] = cls.rcon_address;
cls.rcon_timeout[cls.rcon_ringpos] = realtime + rcon_secure_challengetimeout.value;
cls.rcon_ringpos = (cls.rcon_ringpos + 1) % MAX_RCONS;
}
char argbuf[1500];
dpsnprintf(argbuf, sizeof(argbuf), "%ld.%06d %s", (long) time(NULL), (int) (rand() % 1000000), Cmd_Args());
memcpy(buf, "\377\377\377\377srcon HMAC-MD4 TIME ", 24);
- if(HMAC_MDFOUR_16BYTES((unsigned char *) (buf + 24), (unsigned char *) argbuf, strlen(argbuf), (unsigned char *) rcon_password.string, n))
+ if(HMAC_MDFOUR_16BYTES((unsigned char *) (buf + 24), (unsigned char *) argbuf, (int)strlen(argbuf), (unsigned char *) rcon_password.string, n))
{
buf[40] = ' ';
strlcpy(buf + 41, argbuf, sizeof(buf) - 41);
- NetConn_Write(mysocket, buf, 41 + strlen(buf + 41), &to);
+ NetConn_Write(mysocket, buf, 41 + (int)strlen(buf + 41), &cls.rcon_address);
}
}
else
{
- NetConn_WriteString(mysocket, va(vabuf, sizeof(vabuf), "\377\377\377\377rcon %.*s %s", n, rcon_password.string, Cmd_Args()), &to);
+ char buf[1500];
+ memcpy(buf, "\377\377\377\377", 4);
+ dpsnprintf(buf+4, sizeof(buf)-4, "rcon %.*s %s", n, rcon_password.string, Cmd_Args());
+ NetConn_WriteString(mysocket, buf, &cls.rcon_address);
}
}
}
{
char key[512];
char value[512];
- char *o;
const char *s;
if (Cmd_Argc() != 2)
s++;
while (*s)
{
- o = key;
- while (*s && *s != '\\')
- *o++ = *s++;
- *o = 0;
-
+ size_t len = strcspn(s, "\\");
+ if (len >= sizeof(key)) {
+ len = sizeof(key) - 1;
+ }
+ strlcpy(key, s, len + 1);
+ s += len;
if (!*s)
{
Con_Printf ("MISSING VALUE\n");
return;
}
+ ++s; // Skip over backslash.
- o = value;
- s++;
- while (*s && *s != '\\')
- *o++ = *s++;
- *o = 0;
-
- if (*s)
- s++;
+ len = strcspn(s, "\\");
+ if (len >= sizeof(value)) {
+ len = sizeof(value) - 1;
+ }
+ strlcpy(value, s, len + 1);
CL_SetInfo(key, value, false, false, false, false);
+
+ s += len;
+ if (!*s)
+ {
+ break;
+ }
+ ++s; // Skip over backslash.
}
}
Cmd_AddCommand_WithClientCommand ("color", Host_Color_f, Host_Color_f, "change your player shirt and pants colors");
Cvar_RegisterVariable (&cl_rate);
Cmd_AddCommand_WithClientCommand ("rate", Host_Rate_f, Host_Rate_f, "change your network connection speed");
+ Cvar_RegisterVariable (&cl_rate_burstsize);
+ Cmd_AddCommand_WithClientCommand ("rate_burstsize", Host_Rate_BurstSize_f, Host_Rate_BurstSize_f, "change your network connection speed");
Cvar_RegisterVariable (&cl_pmodel);
Cmd_AddCommand_WithClientCommand ("pmodel", Host_PModel_f, Host_PModel_f, "(Nehahra-only) change your player model choice");