Added more molgrum-style verbosity. Hopefully finally fixed the reason why he gets 'silent' disconnections. Added printf-style warning checks for gcc.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2786 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2007-11-16 14:53:45 +00:00
parent e1bd95d392
commit 944d4db18c
4 changed files with 60 additions and 54 deletions

View File

@ -292,7 +292,7 @@ bsp_t *BSP_LoadModel(cluster_t *cluster, char *gamedir, char *bspname)
if (size < sizeof(dheader_t) || data[0] != 29)
{
free(data);
Sys_Printf(cluster, "BSP not version 29\n", bspname, gamedir);
Sys_Printf(cluster, "BSP not version 29 (%s in %s)\n", bspname, gamedir);
return NULL;
}

View File

@ -18,11 +18,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef __GNUC__
#define LittleLong(x) ({ typeof(x) _x = (x); _x = (((unsigned char *)&_x)[0]|(((unsigned char *)&_x)[1]<<8)|(((unsigned char *)&_x)[2]<<16)|(((unsigned char *)&_x)[3]<<24)); _x; })
#define LittleShort(x) ({ typeof(x) _x = (x); _x = (((unsigned char *)&_x)[0]|(((unsigned char *)&_x)[1]<<8)); _x; })
#define LittleLong(x) ({ typeof(x) _x = (x); _x = (((unsigned char *)&_x)[0]|(((unsigned char *)&_x)[1]<<8)|(((unsigned char *)&_x)[2]<<16)|(((unsigned char *)&_x)[3]<<24)); _x; })
#define LittleShort(x) ({ typeof(x) _x = (x); _x = (((unsigned char *)&_x)[0]|(((unsigned char *)&_x)[1]<<8)); _x; })
#else
#define LittleLong(x) (x)
#define LittleShort(x) (x)
#define LittleLong(x) (x)
#define LittleShort(x) (x)
#endif
//this is for a future version
@ -36,7 +36,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//this means that when a new proxy connects, we have to send initial state as well as a chunk of pending state, expect to need to send new data before the proxy even has all the init stuff. We may need to raise MAX_PROXY_BUFFER to be larger than on the server
#ifdef __GNUC__
#define PRINTFWARNING(x) __attribute__((format(printf, x, (x+1))))
#else
#define PRINTFWARNING(x) /*nothing*/
#endif
//how does multiple servers work
//each proxy acts as a cluster of connections to servers
@ -59,7 +63,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//we assume other systems are designed with even a minor thought to security.
#if !defined(__MINGW32_VERSION)
#define unlink _unlink //why do MS have to be so awkward?
int snprintf(char *buffer, int buffersize, char *format, ...);
int snprintf(char *buffer, int buffersize, char *format, ...) PRINTFWARNING(3);
#if !defined(_VC80_UPGRADE)
int vsnprintf(char *buffer, int buffersize, char *format, va_list argptr);
#endif
@ -716,19 +720,19 @@ void Prox_SendInitialEnts(sv_t *qtv, oproxy_t *prox, netmsg_t *msg);
qboolean QTV_Connect(sv_t *qtv, char *serverurl);
void QTV_Shutdown(sv_t *qtv);
qboolean NET_StringToAddr (char *s, netadr_t *sadr, int defaultport);
void QTV_Printf(sv_t *qtv, char *format, ...);
void QTV_Printf(sv_t *qtv, char *format, ...) PRINTFWARNING(2);
void SendBufferToViewer(viewer_t *v, const char *buffer, int length, qboolean reliable);
void QW_PrintfToViewer(viewer_t *v, char *format, ...);
void QW_StuffcmdToViewer(viewer_t *v, char *format, ...);
void QW_PrintfToViewer(viewer_t *v, char *format, ...) PRINTFWARNING(2);
void QW_StuffcmdToViewer(viewer_t *v, char *format, ...) PRINTFWARNING(2);
void QW_StreamPrint(cluster_t *cluster, sv_t *server, viewer_t *allbut, char *message);
void QW_StreamStuffcmd(cluster_t *cluster, sv_t *server, char *fmt, ...);
void QW_StreamStuffcmd(cluster_t *cluster, sv_t *server, char *fmt, ...) PRINTFWARNING(3);
void QTV_SayCommand(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *fullcommand); //execute a command from a view
void PM_PlayerMove (pmove_t *pmove);
void Netchan_Setup (SOCKET sock, netchan_t *chan, netadr_t adr, int qport, qboolean isclient);
void Netchan_OutOfBandPrint (cluster_t *cluster, SOCKET sock, netadr_t adr, char *format, ...);
void Netchan_OutOfBandPrint (cluster_t *cluster, SOCKET sock, netadr_t adr, char *format, ...) PRINTFWARNING(4);
int Netchan_IsLocal (netadr_t adr);
void NET_SendPacket(cluster_t *cluster, SOCKET sock, int length, void *data, netadr_t adr);
qboolean Net_CompareAddress(netadr_t *s1, netadr_t *s2, int qp1, int qp2);
@ -754,7 +758,7 @@ void QW_SetViewersServer(cluster_t *cluster, viewer_t *viewer, sv_t *sv);
unsigned short QCRC_Block (void *start, int count);
unsigned short QCRC_Value(unsigned short crcvalue);
void WriteDeltaUsercmd (netmsg_t *m, const usercmd_t *from, usercmd_t *move);
void SendClientCommand(sv_t *qtv, char *fmt, ...);
void SendClientCommand(sv_t *qtv, char *fmt, ...) PRINTFWARNING(2);
void QTV_Run(sv_t *qtv);
void QW_FreeViewer(cluster_t *cluster, viewer_t *viewer);
void QW_SetMenu(viewer_t *v, int menunum);
@ -767,7 +771,7 @@ unsigned Com_BlockChecksum (void *buffer, int length);
void Com_BlockFullChecksum (void *buffer, int len, unsigned char *outbuf);
void Cluster_BuildAvailableDemoList(cluster_t *cluster);
void Sys_Printf(cluster_t *cluster, char *fmt, ...);
void Sys_Printf(cluster_t *cluster, char *fmt, ...) PRINTFWARNING(2);
void Net_ProxySend(cluster_t *cluster, oproxy_t *prox, void *buffer, int length);
oproxy_t *Net_FileProxy(sv_t *qtv, char *filename);
@ -796,3 +800,4 @@ void HTTPSV_PostMethod(cluster_t *cluster, oproxy_t *pend, char *postdata);
#ifdef __cplusplus
}
#endif

View File

@ -2815,7 +2815,7 @@ tuiadmin:
}
else
{
QW_PrintfToViewer(v, "Stream not recognised. Stream id is invalid or terminated.\n", args);
QW_PrintfToViewer(v, "Stream \"%s\" not recognised. Stream id is invalid or terminated.\n", args);
}
}
else if (!strcmp(command, "demo"))
@ -2830,7 +2830,7 @@ tuiadmin:
QW_PrintfToViewer(v, "Streaming from %s\n", qtv->server);
}
else
QW_PrintfToViewer(v, "Demo does not exist on proxy\n", buf);
QW_PrintfToViewer(v, "Demo \"%s\" does not exist on proxy\n", buf);
}
else if (!strcmp(command, "disconnect"))
{
@ -3010,7 +3010,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
if (qtv)
{
QW_SetViewersServer(cluster, v, qtv);
QW_PrintfToViewer(v, "Connected\n", message);
QW_PrintfToViewer(v, "Connected to \"%s\"\n", message);
}
else
QW_PrintfToViewer(v, "Failed to connect to server \"%s\", connection aborted\n", message);
@ -3038,7 +3038,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
else
{
QW_SetViewersServer(cluster, v, qtv);
QW_PrintfToViewer(v, "Opened demo file.\n", message);
QW_PrintfToViewer(v, "Opened demo file \"%s\".\n", message);
}
}
@ -3051,7 +3051,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
else
{
QW_SetViewersServer(cluster, v, qtv);
QW_PrintfToViewer(v, "Opened demo file.\n", message);
QW_PrintfToViewer(v, "Opened demo file \"%s\".\n", message);
}
}
else if (!strcmp(v->expectcommand, "setmvdport"))
@ -3130,7 +3130,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
if (qtv && qtv->usequakeworldprotocols && !noupwards)
{
if (qtv->controller == v || !*v->name)
if (qtv->controller == v)
{
SendClientCommand(qtv, "say \"%s\"", message);
@ -3149,11 +3149,6 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
else
{
viewer_t *ov;
if (cluster->notalking)
return;
if (v->server)
SV_SayToUpstream(v->server, message);
// If the current viewer is the player, pass on the say_team
if (qtv && qtv->controller == v)
@ -3162,6 +3157,12 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
return;
}
if (cluster->notalking)
return;
if (v->server)
SV_SayToUpstream(v->server, message);
for (ov = cluster->viewers; ov; ov = ov->next)
{
if (ov->server != v->server)

View File

@ -390,7 +390,7 @@ qboolean Net_ConnectToTCPServer(sv_t *qtv, char *ip)
if (!NET_StringToAddr(ip, &qtv->serveraddress, 27500))
{
Sys_Printf(qtv->cluster, "Unable to resolve %s\n", ip);
Sys_Printf(qtv->cluster, "Stream %i: Unable to resolve %s\n", qtv->streamid, ip);
return false;
}
qtv->sourcesock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
@ -435,7 +435,7 @@ qboolean Net_ConnectToUDPServer(sv_t *qtv, char *ip)
if (!NET_StringToAddr(ip, &qtv->serveraddress, 27500))
{
Sys_Printf(qtv->cluster, "Unable to resolve %s\n", ip);
Sys_Printf(qtv->cluster, "Stream %i: Unable to resolve %s\n", qtv->streamid, ip);
return false;
}
qtv->sourcesock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
@ -590,7 +590,7 @@ qboolean Net_ConnectToServer(sv_t *qtv)
fseek(qtv->sourcefile, 0, SEEK_SET);
return true;
}
Sys_Printf(qtv->cluster, "Unable to open file %s\n", ip);
Sys_Printf(qtv->cluster, "Stream %i: Unable to open file %s\n", qtv->streamid, ip);
return false;
@ -614,7 +614,7 @@ void Net_QueueUpstream(sv_t *qtv, int size, char *buffer)
if (qtv->upstreambuffersize + size > sizeof(qtv->upstreambuffer))
{
Sys_Printf(qtv->cluster, "Upstream queue overflowed for %s\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Upstream queue overflowed for %s\n", qtv->streamid, qtv->server);
qtv->drop = true;
return;
}
@ -639,9 +639,9 @@ qboolean Net_WriteUpstream(sv_t *qtv)
int err;
err = qerrno;
if (qerrno)
Sys_Printf(qtv->cluster, "Error: source socket error %i\n", qerrno);
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i\n", qtv->streamid, qerrno);
else
Sys_Printf(qtv->cluster, "Error: server %s disconnected\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Error: server %s disconnected\n", qtv->streamid, qtv->server);
qtv->drop = true;
}
return false;
@ -786,7 +786,7 @@ qboolean Net_ReadStream(sv_t *qtv)
getsockopt(qtv->sourcesock, SOL_SOCKET, SO_ERROR, (char*)&err, &errsize);
if (err == ECONNREFUSED)
{
Sys_Printf(qtv->cluster, "Error: server %s refused connection\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Error: server %s refused connection\n", qtv->streamid, qtv->server);
closesocket(qtv->sourcesock);
qtv->sourcesock = INVALID_SOCKET;
qtv->upstreambuffersize = 0; //probably contains initial connection request info
@ -819,11 +819,11 @@ qboolean Net_ReadStream(sv_t *qtv)
if (read == 0 || (err != EWOULDBLOCK && err != EAGAIN && err != ENOTCONN)) //ENOTCONN can be returned whilst waiting for a connect to finish.
{
if (qtv->sourcefile)
Sys_Printf(qtv->cluster, "Error: End of file\n");
Sys_Printf(qtv->cluster, "Stream %i: Error: End of file\n", qtv->streamid);
else if (read)
Sys_Printf(qtv->cluster, "Error: source socket error %i\n", qerrno);
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i\n", qtv->streamid, qerrno);
else
Sys_Printf(qtv->cluster, "Error: server %s disconnected\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Error: server %s disconnected\n", qtv->streamid, qtv->server);
if (qtv->sourcesock != INVALID_SOCKET)
{
closesocket(qtv->sourcesock);
@ -1018,14 +1018,14 @@ qboolean QTV_Connect(sv_t *qtv, char *serverurl)
}
else if (!Net_ConnectToServer(qtv))
{
Sys_Printf(qtv->cluster, "Couldn't connect (%s)\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Couldn't connect (%s)\n", qtv->streamid, qtv->server);
return false;
}
if (qtv->sourcesock == INVALID_SOCKET)
{
qtv->parsetime = Sys_Milliseconds();
// Sys_Printf(qtv->cluster, "Playing from file\n");
// Sys_Printf(qtv->cluster, "Stream %i: Playing from file\n", qtv->streamid);
}
else
{
@ -1042,7 +1042,7 @@ void QTV_Shutdown(sv_t *qtv)
sv_t *peer;
cluster_t *cluster;
int i;
Sys_Printf(qtv->cluster, "Closing source %s\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: Closing source %s\n", qtv->streamid, qtv->server);
if (qtv->sourcesock != INVALID_SOCKET)
{
@ -1320,10 +1320,10 @@ void QTV_ParseQWStream(sv_t *qtv)
qtv->isconnected = true;
qtv->timeout = qtv->curtime + UDPTIMEOUT_LENGTH;
SendClientCommand(qtv, "new");
Sys_Printf(qtv->cluster, "Connected!\n");
Sys_Printf(qtv->cluster, "Stream %i: Connected!\n", qtv->streamid);
continue;
}
Sys_Printf(qtv->cluster, "%s: unrecognised connectionless packet:\n%s\n", qtv->server, buffer+4);
Sys_Printf(qtv->cluster, "Stream %i: %s: unrecognised connectionless packet:\n%s\n", qtv->streamid, qtv->server, buffer+4);
continue;
}
memset(&msg, 0, sizeof(msg));
@ -1456,7 +1456,7 @@ void QTV_Run(sv_t *qtv)
if (qtv->disconnectwhennooneiswatching == 1 && qtv->numviewers == 0 && qtv->proxies == NULL)
{
Sys_Printf(qtv->cluster, "Stream %s became inactive\n", qtv->server);
Sys_Printf(qtv->cluster, "Stream %i: %s became inactive\n", qtv->streamid, qtv->server);
qtv->drop = true;
}
if (qtv->drop)
@ -1515,7 +1515,7 @@ void QTV_Run(sv_t *qtv)
if (qtv->curtime >= qtv->timeout || qtv->curtime < qtv->timeout - UDPTIMEOUT_LENGTH*2)
{
Sys_Printf(qtv->cluster, "Timeout\n");
Sys_Printf(qtv->cluster, "Stream %i: Timeout\n", qtv->streamid);
qtv->isconnected = false;
return;
}
@ -1690,8 +1690,8 @@ void QTV_Run(sv_t *qtv)
length = 6;
if (ustrncmp(qtv->buffer, "QTVSV ", length))
{
Sys_Printf(qtv->cluster, "Server is not a QTV server (or is incompatable)\n");
printf("%i, %s\n", qtv->buffersize, qtv->buffer);
Sys_Printf(qtv->cluster, "Stream %i: Server is not a QTV server (or is incompatable)\n", qtv->streamid);
//printf("%i, %s\n", qtv->buffersize, qtv->buffer);
qtv->drop = true;
return;
}
@ -1711,7 +1711,7 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
svversion = atof((char*)qtv->buffer + 6);
if ((int)svversion != 1)
{
Sys_Printf(qtv->cluster, "QTV server doesn't support a compatable protocol version (returned %i)\n", atoi((char*)qtv->buffer + 6));
Sys_Printf(qtv->cluster, "Stream %i: QTV server doesn't support a compatable protocol version (returned %i)\n", qtv->streamid, atoi((char*)qtv->buffer + 6));
qtv->drop = true;
return;
}
@ -1751,13 +1751,13 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
strcpy(challenge, colon);
else if (!strcmp(start, "COMPRESSION"))
{ //we don't support compression, we didn't ask for it.
Sys_Printf(qtv->cluster, "QTV server wrongly used compression\n");
Sys_Printf(qtv->cluster, "Stream %i: QTV server wrongly used compression\n", qtv->streamid);
qtv->drop = true;
return;
}
else if (!strcmp(start, "PERROR"))
{
Sys_Printf(qtv->cluster, "\nServer PERROR from %s: %s\n\n", qtv->server, colon);
Sys_Printf(qtv->cluster, "\nStream %i: Server PERROR from %s: %s\n\n", qtv->streamid, qtv->server, colon);
qtv->drop = true;
qtv->buffersize = 0;
qtv->forwardpoint = 0;
@ -1765,7 +1765,7 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
}
else if (!strcmp(start, "TERROR") || !strcmp(start, "ERROR"))
{ //we don't support compression, we didn't ask for it.
Sys_Printf(qtv->cluster, "\nServer TERROR from %s: %s\n\n", qtv->server, colon);
Sys_Printf(qtv->cluster, "\nStream %i: Server TERROR from %s: %s\n\n", qtv->streamid, qtv->server, colon);
qtv->buffersize = 0;
qtv->forwardpoint = 0;
@ -1803,7 +1803,7 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
}
else if (!strcmp(start, "PRINT"))
{
Sys_Printf(qtv->cluster, "QTV server: %s\n", colon);
Sys_Printf(qtv->cluster, "Stream %i: QTV server: %s\n", qtv->streamid, colon);
}
else if (!strcmp(start, "BEGIN"))
{
@ -1835,7 +1835,7 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
}
else if (qtv->parsingqtvheader)
{
Sys_Printf(qtv->cluster, "QTV server sent no begin command - assuming incompatable\n\n");
Sys_Printf(qtv->cluster, "Stream %i: QTV server sent no begin command - assuming incompatable\n\n", qtv->streamid);
qtv->drop = true;
qtv->buffersize = 0;
qtv->forwardpoint = 0;
@ -1900,17 +1900,17 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
if (qtv->buffersize < lengthofs+4)
{ //the size parameter doesn't fit.
if (qtv->sourcefile || qtv->sourcesock != INVALID_SOCKET)
QTV_Printf(qtv, "Not enough buffered\n");
QTV_Printf(qtv, "Stream %i: Not enough buffered\n", qtv->streamid);
qtv->parsetime = qtv->curtime + 2*1000; //add two seconds
break;
}
length = (buffer[lengthofs]<<0) + (buffer[lengthofs+1]<<8) + (buffer[lengthofs+2]<<16) + (buffer[lengthofs+3]<<24);
if (length > 1500)
if (length > MAX_MSGLEN)
{ //THIS SHOULDN'T HAPPEN!
//Blame the upstream proxy!
QTV_Printf(qtv, "Warning: corrupt input packet (%i bytes) too big! Flushing and reconnecting!\n", length);
Sys_Printf(qtv->cluster, "Stream %i: Warning: corrupt input packet (%i bytes) too big! Flushing and reconnecting!\n", qtv->streamid, length);
if (qtv->sourcefile)
{
fclose(qtv->sourcefile);
@ -1929,7 +1929,7 @@ printf("%i, %s\n", qtv->buffersize, qtv->buffer);
if (length+lengthofs+4 > qtv->buffersize)
{
if (qtv->sourcefile || qtv->sourcesock != INVALID_SOCKET)
QTV_Printf(qtv, "Not enough buffered\n");
QTV_Printf(qtv, "Stream %i: Not enough buffered\n", qtv->streamid);
qtv->parsetime = qtv->curtime + 2*1000; //add two seconds
break; //can't parse it yet.
}