From 944d4db18c603ad9fd770e0157438dc05595b788 Mon Sep 17 00:00:00 2001 From: Spoike Date: Fri, 16 Nov 2007 14:53:45 +0000 Subject: [PATCH] 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 --- fteqtv/bsp.c | 2 +- fteqtv/qtv.h | 31 +++++++++++++++----------- fteqtv/qw.c | 23 ++++++++++---------- fteqtv/source.c | 58 ++++++++++++++++++++++++------------------------- 4 files changed, 60 insertions(+), 54 deletions(-) diff --git a/fteqtv/bsp.c b/fteqtv/bsp.c index a656ee526..81016cf06 100644 --- a/fteqtv/bsp.c +++ b/fteqtv/bsp.c @@ -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; } diff --git a/fteqtv/qtv.h b/fteqtv/qtv.h index 8cc9f119b..cf1dea400 100644 --- a/fteqtv/qtv.h +++ b/fteqtv/qtv.h @@ -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 + diff --git a/fteqtv/qw.c b/fteqtv/qw.c index 19cc1de4e..46023c68e 100644 --- a/fteqtv/qw.c +++ b/fteqtv/qw.c @@ -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) diff --git a/fteqtv/source.c b/fteqtv/source.c index 90a43ba7a..3a77ac762 100644 --- a/fteqtv/source.c +++ b/fteqtv/source.c @@ -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. }