mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
[qw] Use a callback for netchan logging
This gets outgoing packet logging working again. Yay, fill my hard-drive faster ;)
This commit is contained in:
parent
58bbed722a
commit
94871671d2
6 changed files with 72 additions and 30 deletions
|
@ -297,6 +297,10 @@ extern int net_blocksend;
|
|||
*/
|
||||
extern double *net_realtime;
|
||||
|
||||
/** Callback to log outgoing packets
|
||||
*/
|
||||
extern void (*net_log_packet) (int length, const void *data, netadr_t to);
|
||||
|
||||
/** Initialize the netchan system.
|
||||
|
||||
Currently only sets the qport cvar default to a random value.
|
||||
|
|
|
@ -57,6 +57,7 @@ double *net_realtime;
|
|||
cvar_t *showpackets;
|
||||
cvar_t *showdrop;
|
||||
cvar_t *qport;
|
||||
void (*net_log_packet) (int length, const void *data, netadr_t to);
|
||||
|
||||
|
||||
void
|
||||
|
@ -375,9 +376,8 @@ Netchan_Process (netchan_t *chan)
|
|||
void
|
||||
Netchan_SendPacket (int length, const void *data, netadr_t to)
|
||||
{
|
||||
#if 0
|
||||
if (net_packetlog->int_val)
|
||||
Log_Outgoing_Packet (data, length, 1);
|
||||
#endif
|
||||
if (net_log_packet) {
|
||||
net_log_packet (length, data, to);
|
||||
}
|
||||
NET_SendPacket (length, data, to);
|
||||
}
|
||||
|
|
|
@ -483,6 +483,11 @@ extern struct clip_hull_s *pf_hull_list[];
|
|||
// sv_main.c
|
||||
//
|
||||
|
||||
void SV_OutOfBand (netadr_t adr, unsigned length, byte *data);
|
||||
void SV_OutOfBandPrint (netadr_t adr, const char *format, ...)
|
||||
__attribute__ ((format (PRINTF,2,3)));
|
||||
|
||||
|
||||
client_t *SV_AllocClient (int spectator, int server);
|
||||
|
||||
void SV_SavePenaltyFilter (client_t *cl, filtertype_t type, double pentime);
|
||||
|
|
|
@ -949,13 +949,21 @@ Analyze_Client_Packet (const byte * data, int len, int has_sequence)
|
|||
Net_PacketLog = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
net_packet_log_f (int length, const void *data, netadr_t to)
|
||||
{
|
||||
Log_Outgoing_Packet (data, length, 1, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
Net_PacketLog_f (cvar_t *var)
|
||||
{
|
||||
if (var->int_val) {
|
||||
Net_LogStart ("qfpacket.log");
|
||||
net_log_packet = net_packet_log_f;
|
||||
} else {
|
||||
Net_LogStop (0);
|
||||
net_log_packet = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -701,8 +701,8 @@ SVC_GetChallenge (void)
|
|||
}
|
||||
|
||||
// send it to the client
|
||||
Netchan_OutOfBandPrint (net_from, "%c%i%s", S2C_CHALLENGE,
|
||||
svs.challenges[i].challenge, extended);
|
||||
SV_OutOfBandPrint (net_from, "%c%i%s", S2C_CHALLENGE,
|
||||
svs.challenges[i].challenge, extended);
|
||||
}
|
||||
|
||||
client_t *
|
||||
|
@ -776,8 +776,8 @@ SVC_DirectConnect (void)
|
|||
} else {
|
||||
version = atoi (s);
|
||||
if (version != PROTOCOL_VERSION) {
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nServer is version %s.\n",
|
||||
A2C_PRINT, QW_VERSION);
|
||||
SV_OutOfBandPrint (net_from, "%c\nServer is version %s.\n",
|
||||
A2C_PRINT, QW_VERSION);
|
||||
SV_Printf ("* rejected connect from version %i\n", version);
|
||||
return;
|
||||
}
|
||||
|
@ -793,8 +793,8 @@ SVC_DirectConnect (void)
|
|||
|
||||
// Validate the userinfo string.
|
||||
if (!userinfo) {
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nInvalid userinfo string.\n",
|
||||
A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from, "%c\nInvalid userinfo string.\n",
|
||||
A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -803,14 +803,13 @@ SVC_DirectConnect (void)
|
|||
if (NET_CompareBaseAdr (net_from, svs.challenges[i].adr)) {
|
||||
if (challenge == svs.challenges[i].challenge)
|
||||
break; // good
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nBad challenge.\n",
|
||||
A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from, "%c\nBad challenge.\n", A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (i == MAX_CHALLENGES) {
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nNo challenge for address.\n",
|
||||
A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from, "%c\nNo challenge for address.\n",
|
||||
A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -826,10 +825,10 @@ SVC_DirectConnect (void)
|
|||
NET_AdrToString (net_from), s,
|
||||
sv_minqfversion->string);
|
||||
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nserver requires QuakeForge "
|
||||
"v%s or greater. Get it from "
|
||||
"http://www.quakeforge.net/\n", A2C_PRINT,
|
||||
sv_minqfversion->string);
|
||||
SV_OutOfBandPrint (net_from, "%c\nserver requires QuakeForge "
|
||||
"v%s or greater. Get it from "
|
||||
"http://www.quakeforge.net/\n", A2C_PRINT,
|
||||
sv_minqfversion->string);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -841,9 +840,9 @@ SVC_DirectConnect (void)
|
|||
!strequal (spectator_password->string, s)) { // failed
|
||||
SV_Printf ("%s: spectator password failed\n",
|
||||
NET_AdrToString (net_from));
|
||||
Netchan_OutOfBandPrint (net_from,
|
||||
"%c\nrequires a spectator password\n\n",
|
||||
A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from,
|
||||
"%c\nrequires a spectator password\n\n",
|
||||
A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
Info_RemoveKey (userinfo, "spectator"); // remove passwd
|
||||
|
@ -856,9 +855,9 @@ SVC_DirectConnect (void)
|
|||
&& !strcaseequal (password->string, "none")
|
||||
&& !strequal (password->string, s)) {
|
||||
SV_Printf ("%s:password failed\n", NET_AdrToString (net_from));
|
||||
Netchan_OutOfBandPrint (net_from,
|
||||
"%c\nserver requires a password\n\n",
|
||||
A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from,
|
||||
"%c\nserver requires a password\n\n",
|
||||
A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
spectator = false;
|
||||
|
@ -886,7 +885,7 @@ SVC_DirectConnect (void)
|
|||
}
|
||||
if (!(newcl = SV_AllocClient (spectator, 0))) {
|
||||
SV_Printf ("%s:full connect\n", NET_AdrToString (adr));
|
||||
Netchan_OutOfBandPrint (adr, "%c\nserver is full\n\n", A2C_PRINT);
|
||||
SV_OutOfBandPrint (adr, "%c\nserver is full\n\n", A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
newcl->userinfo = userinfo;
|
||||
|
@ -901,7 +900,7 @@ SVC_DirectConnect (void)
|
|||
}
|
||||
newcl->delta.client = newcl;
|
||||
|
||||
Netchan_OutOfBandPrint (adr, "%c", S2C_CONNECTION);
|
||||
SV_OutOfBandPrint (adr, "%c", S2C_CONNECTION);
|
||||
|
||||
Netchan_Setup (&newcl->netchan, adr, qport, NC_QPORT_READ);
|
||||
newcl->backbuf.netchan = &newcl->netchan;
|
||||
|
@ -1744,6 +1743,32 @@ SV_RestorePenaltyFilter (client_t *cl, filtertype_t type)
|
|||
return 0.0;
|
||||
}
|
||||
|
||||
void
|
||||
SV_OutOfBand (netadr_t adr, unsigned length, byte *data)
|
||||
{
|
||||
if (net_packetlog->int_val) {
|
||||
Log_Outgoing_Packet (data, length, 0, 1);
|
||||
}
|
||||
Netchan_OutOfBand (adr, length, data);
|
||||
}
|
||||
|
||||
void
|
||||
SV_OutOfBandPrint (netadr_t adr, const char *format, ...)
|
||||
{
|
||||
static dstring_t *string;
|
||||
va_list argptr;
|
||||
|
||||
if (!string) {
|
||||
string = dstring_new ();
|
||||
}
|
||||
|
||||
va_start (argptr, format);
|
||||
dvsprintf (string, format, argptr);
|
||||
va_end (argptr);
|
||||
|
||||
SV_OutOfBand (adr, string->size - 1, (byte *) string->str);
|
||||
}
|
||||
|
||||
static void
|
||||
SV_ReadPackets (void)
|
||||
{
|
||||
|
@ -2368,8 +2393,8 @@ SV_ExtractFromUserinfo (client_t *cl)
|
|||
// If the new name was not set (due to the info string being too
|
||||
// long), drop the client.
|
||||
if (strcmp (val, newname)) {
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nPlease choose a "
|
||||
"different name.\n", A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from, "%c\nPlease choose a "
|
||||
"different name.\n", A2C_PRINT);
|
||||
SV_ClientPrintf (1, cl, PRINT_HIGH, "Please choose a "
|
||||
"different name.\n");
|
||||
SV_Printf ("Client %d kicked for having a invalid name\n",
|
||||
|
|
|
@ -404,7 +404,7 @@ SV_qtvConnect (int qport, info_t *info)
|
|||
|
||||
if (!(proxy = alloc_proxy ())) {
|
||||
SV_Printf ("%s:full proxy connect\n", NET_AdrToString (net_from));
|
||||
Netchan_OutOfBandPrint (net_from, "%c\nserver is full\n\n", A2C_PRINT);
|
||||
SV_OutOfBandPrint (net_from, "%c\nserver is full\n\n", A2C_PRINT);
|
||||
return;
|
||||
}
|
||||
proxy->info = info;
|
||||
|
@ -418,7 +418,7 @@ SV_qtvConnect (int qport, info_t *info)
|
|||
proxy->datagram.maxsize = sizeof (proxy->datagram_buf);
|
||||
proxy->begun = 0;
|
||||
|
||||
Netchan_OutOfBandPrint (net_from, "%c", S2C_CONNECTION);
|
||||
SV_OutOfBandPrint (net_from, "%c", S2C_CONNECTION);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in a new issue