mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-02-04 11:14:17 +00:00
engine: refactor rcon redirect, don't make it depend on global object
This commit is contained in:
parent
514da0ffa9
commit
36c2f9e9f2
@ -793,7 +793,7 @@ void VID_Init( void );
|
||||
void UI_SetActiveMenu( qboolean fActive );
|
||||
void UI_ShowConnectionWarning( void );
|
||||
void Cmd_Null_f( void );
|
||||
void Rcon_Print( const char *pMsg );
|
||||
void Rcon_Print( host_redirect_t *rd, const char *pMsg );
|
||||
qboolean COM_ParseVector( char **pfile, float *v, size_t size );
|
||||
void COM_NormalizeAngles( vec3_t angles );
|
||||
int COM_FileSize( const char *filename );
|
||||
|
@ -562,7 +562,7 @@ void Sys_Print( const char *pMsg )
|
||||
|
||||
Sys_PrintLog( pMsg );
|
||||
|
||||
Rcon_Print( pMsg );
|
||||
Rcon_Print( &host.rd, pMsg );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -564,7 +564,7 @@ qboolean SV_IsPlayerIndex( int idx );
|
||||
int SV_CalcPing( sv_client_t *cl );
|
||||
void SV_InitClientMove( void );
|
||||
void SV_UpdateServerInfo( void );
|
||||
void SV_EndRedirect( void );
|
||||
void SV_EndRedirect( host_redirect_t *rd );
|
||||
void SV_RejectConnection( netadr_t from, const char *fmt, ... ) _format( 2 );
|
||||
void SV_GetPlayerCount( int *clients, int *bots );
|
||||
|
||||
|
@ -639,7 +639,7 @@ void SV_DropClient( sv_client_t *cl, qboolean crash )
|
||||
cl->frames = NULL;
|
||||
|
||||
if( NET_CompareBaseAdr( cl->netchan.remote_address, host.rd.address ))
|
||||
SV_EndRedirect();
|
||||
SV_EndRedirect( &host.rd );
|
||||
|
||||
// throw away any residual garbage in the channel.
|
||||
Netchan_Clear( &cl->netchan );
|
||||
@ -676,22 +676,19 @@ SVC COMMAND REDIRECT
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
void SV_BeginRedirect( netadr_t adr, rdtype_t target, char *buffer, size_t buffersize, void (*flush))
|
||||
static void SV_BeginRedirect( host_redirect_t *rd, netadr_t adr, rdtype_t target, char *buffer, size_t buffersize, void (*flush))
|
||||
{
|
||||
if( !target || !buffer || !buffersize || !flush )
|
||||
return;
|
||||
|
||||
host.rd.target = target;
|
||||
host.rd.buffer = buffer;
|
||||
host.rd.buffersize = buffersize;
|
||||
host.rd.flush = flush;
|
||||
host.rd.address = adr;
|
||||
host.rd.buffer[0] = 0;
|
||||
if( host.rd.lines == 0 )
|
||||
host.rd.lines = -1;
|
||||
rd->target = target;
|
||||
rd->buffer = buffer;
|
||||
rd->buffersize = buffersize;
|
||||
rd->flush = flush;
|
||||
rd->address = adr;
|
||||
rd->buffer[0] = 0;
|
||||
if( rd->lines == 0 )
|
||||
rd->lines = -1;
|
||||
}
|
||||
|
||||
void SV_FlushRedirect( netadr_t adr, int dest, char *buf )
|
||||
static void SV_FlushRedirect( netadr_t adr, int dest, char *buf )
|
||||
{
|
||||
if( sv.current_client && FBitSet( sv.current_client->flags, FCL_FAKECLIENT ))
|
||||
return;
|
||||
@ -712,18 +709,18 @@ void SV_FlushRedirect( netadr_t adr, int dest, char *buf )
|
||||
}
|
||||
}
|
||||
|
||||
void SV_EndRedirect( void )
|
||||
void SV_EndRedirect( host_redirect_t *rd )
|
||||
{
|
||||
if( host.rd.lines > 0 )
|
||||
if( rd->lines > 0 )
|
||||
return;
|
||||
|
||||
if( host.rd.flush )
|
||||
host.rd.flush( host.rd.address, host.rd.target, host.rd.buffer );
|
||||
if( rd->flush )
|
||||
rd->flush( rd->address, rd->target, rd->buffer );
|
||||
|
||||
host.rd.target = 0;
|
||||
host.rd.buffer = NULL;
|
||||
host.rd.buffersize = 0;
|
||||
host.rd.flush = NULL;
|
||||
rd->target = RD_NONE;
|
||||
rd->buffer = NULL;
|
||||
rd->buffersize = 0;
|
||||
rd->flush = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -733,24 +730,26 @@ Rcon_Print
|
||||
Print message to rcon buffer and send to rcon redirect target
|
||||
================
|
||||
*/
|
||||
void Rcon_Print( const char *pMsg )
|
||||
void Rcon_Print( host_redirect_t *rd, const char *pMsg )
|
||||
{
|
||||
if( host.rd.target && host.rd.lines && host.rd.flush && host.rd.buffer )
|
||||
size_t len;
|
||||
|
||||
if( !rd->target || !rd->lines || !rd->flush || !rd->buffer )
|
||||
return;
|
||||
|
||||
len = Q_strncat( rd->buffer, pMsg, rd->buffersize );
|
||||
|
||||
if( len && rd->buffer[len - 1] == '\n' )
|
||||
{
|
||||
size_t len = Q_strncat( host.rd.buffer, pMsg, host.rd.buffersize );
|
||||
rd->flush( rd->address, rd->target, rd->buffer );
|
||||
|
||||
if( len && host.rd.buffer[len-1] == '\n' )
|
||||
{
|
||||
host.rd.flush( host.rd.address, host.rd.target, host.rd.buffer );
|
||||
if( rd->lines > 0 )
|
||||
rd->lines--;
|
||||
|
||||
if( host.rd.lines > 0 )
|
||||
host.rd.lines--;
|
||||
rd->buffer[0] = 0;
|
||||
|
||||
host.rd.buffer[0] = 0;
|
||||
|
||||
if( !host.rd.lines )
|
||||
Msg( "End of redirection!\n" );
|
||||
}
|
||||
if( !rd->lines )
|
||||
Msg( "End of redirection!\n" );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1090,7 +1089,7 @@ void SV_RemoteCommand( netadr_t from, sizebuf_t *msg )
|
||||
|
||||
if( Rcon_Validate( ))
|
||||
{
|
||||
SV_BeginRedirect( from, RD_PACKET, outputbuf, sizeof( outputbuf ) - 16, SV_FlushRedirect );
|
||||
SV_BeginRedirect( &host.rd, from, RD_PACKET, outputbuf, sizeof( outputbuf ) - 16, SV_FlushRedirect );
|
||||
|
||||
remaining[0] = 0;
|
||||
for( i = 2; i < Cmd_Argc(); i++ )
|
||||
@ -1101,7 +1100,7 @@ void SV_RemoteCommand( netadr_t from, sizebuf_t *msg )
|
||||
}
|
||||
Cmd_ExecuteString( remaining );
|
||||
|
||||
SV_EndRedirect();
|
||||
SV_EndRedirect( &host.rd );
|
||||
}
|
||||
else Con_Printf( S_ERROR "Bad rcon_password.\n" );
|
||||
}
|
||||
|
@ -1103,7 +1103,7 @@ void SV_Shutdown( const char *finalmsg )
|
||||
Con_Printf( "%s", finalmsg );
|
||||
|
||||
// rcon will be disconnected
|
||||
SV_EndRedirect();
|
||||
SV_EndRedirect( &host.rd );
|
||||
|
||||
if( svs.clients )
|
||||
SV_FinalMessage( finalmsg, false );
|
||||
|
Loading…
x
Reference in New Issue
Block a user