You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.0 KiB
97 lines
3.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//=============================================================================// |
|
#include "server_pch.h" |
|
#include "net.h" |
|
#include "sv_rcon.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
static redirect_t sv_redirected; |
|
static netadr_t sv_redirectto; |
|
static char sv_redirect_buffer[ 4096 ]; // can't be any bigger because then we hit other static limits in the engine print funcs |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Clears all remaining data from the redirection buffer. |
|
//----------------------------------------------------------------------------- |
|
void SV_RedirectFlush( void ) |
|
{ |
|
static bool bInFlush = false; // recursion guard |
|
|
|
Assert( bInFlush == false ); |
|
|
|
bInFlush = true; |
|
if ( sv_redirected == RD_PACKET ) // Print to remote address. |
|
{ |
|
NET_OutOfBandPrintf( sv.m_Socket, sv_redirectto, "%c%s", A2A_PRINT, sv_redirect_buffer ); |
|
} |
|
else if ( sv_redirected == RD_CLIENT ) // Send to client on message stream. |
|
{ |
|
host_client->ClientPrintf( "%s", sv_redirect_buffer ); |
|
} |
|
else if ( sv_redirected == RD_SOCKET ) |
|
{ |
|
RCONServer().FinishRedirect( sv_redirect_buffer, sv_redirectto ); |
|
} |
|
|
|
// clear it |
|
sv_redirect_buffer[0] = 0; |
|
bInFlush = false; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sents console printfs to remote client instead of to console |
|
// Input : rd - |
|
// *addr - |
|
//----------------------------------------------------------------------------- |
|
void SV_RedirectStart (redirect_t rd, const netadr_t *addr) |
|
{ |
|
sv_redirected = rd; |
|
sv_redirectto = *addr; |
|
sv_redirect_buffer[0] = 0; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Flushes buffers to network, and resets mode to inactive |
|
//----------------------------------------------------------------------------- |
|
void SV_RedirectEnd (void) |
|
{ |
|
SV_RedirectFlush (); |
|
sv_redirected = RD_NONE; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : len - |
|
//----------------------------------------------------------------------------- |
|
void SV_RedirectCheckFlush( int len ) |
|
{ |
|
if ( len + Q_strlen( sv_redirect_buffer ) > sizeof(sv_redirect_buffer) - 1) |
|
{ |
|
SV_RedirectFlush(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : bool |
|
//----------------------------------------------------------------------------- |
|
bool SV_RedirectActive( void ) |
|
{ |
|
return ( sv_redirected != RD_NONE ) ? true : false; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *txt - |
|
//----------------------------------------------------------------------------- |
|
void SV_RedirectAddText( const char *txt ) |
|
{ |
|
SV_RedirectCheckFlush( strlen( txt ) ); |
|
Q_strncat( sv_redirect_buffer, (char *)txt, sizeof( sv_redirect_buffer ), COPY_ALL_CHARACTERS ); |
|
} |