225 lines
5.7 KiB
C++
225 lines
5.7 KiB
C++
// Copyright (C) 2001-2003 Even Balance, Inc.
|
|
//
|
|
//
|
|
// pbsv.cpp
|
|
//
|
|
// EVEN BALANCE - T.RAY
|
|
//
|
|
|
|
|
|
#define _cplusplus
|
|
|
|
|
|
|
|
#define PbSdk_DEFINED
|
|
#include "pbsdk.h"
|
|
|
|
#if !defined(NOT_USE_PUNKBUSTER_SDK)
|
|
|
|
#ifdef __WITH_PB__
|
|
|
|
|
|
|
|
//
|
|
// Functions and wrappers
|
|
// these are declared in pbcommon.h
|
|
|
|
extern "C" {
|
|
|
|
void __cdecl PbSvAddEvent ( int event , int clientIndex , int datalen , char *data )
|
|
{
|
|
if ( pbsdk == NULL ) return ;
|
|
pbsdk->pbsv.AddPbEvent ( event , clientIndex , datalen , data , 0 ) ;
|
|
}
|
|
|
|
void __cdecl PbServerInitialize ( void )
|
|
{
|
|
if ( pbsdk == NULL ) return ;
|
|
pbsdk->pbsv.initialize() ;
|
|
|
|
pbsdk->pb_getBasePath ( pbsdk->pbsv.m_basepath , PB_Q_MAXRESULTLEN ) ;
|
|
pbsdk->pb_getHomePath ( pbsdk->pbsv.m_homepath , PB_Q_MAXRESULTLEN ) ;
|
|
|
|
PbSvAddEvent ( PB_EV_CONFIG , -1 , 0 , "" ) ;
|
|
if ( pbsdk->pbsv.m_AddPbEvent == NULL ) pbsdk->pb_SetSvPunkBuster ( "0" ) ;
|
|
}
|
|
|
|
void __cdecl PbServerProcessEvents ( void )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
pbsdk->pbsv.ProcessPbEvents() ;
|
|
}
|
|
|
|
void __cdecl PbServerForceProcess ( void )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
pbsdk->pbsv.ProcessPbEvents ( -1 ) ;
|
|
}
|
|
|
|
void __cdecl PbServerCompleteCommand ( char *buf , int buflen )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
pbsdk->pbsv.AddPbEvent ( PB_EV_CMDCOMPL , -1 , buflen , buf ) ;
|
|
}
|
|
|
|
void __cdecl PbPassConnectString ( char *fromAddr , char *connectString )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
if ( pbsdk->pbsv.m_PassConnectString == NULL ) return ;//means PB not installed/enabled
|
|
pbsdk->pbsv.m_PassConnectString ( &pbsdk->pbsv , fromAddr , connectString ) ;
|
|
}
|
|
|
|
char * __cdecl PbAuthClient ( char *fromAddr , int cl_pb , char *cl_guid )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return NULL ;
|
|
if ( pbsdk->pbsv.m_AuthClient == NULL ) return NULL ;//means PB not installed/enabled
|
|
return pbsdk->pbsv.m_AuthClient ( &pbsdk->pbsv , fromAddr , cl_pb , cl_guid ) ;
|
|
}
|
|
|
|
int __cdecl isPbSvEnabled ( void )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return 0 ;
|
|
return (int) pbsdk->pbsv.AddPbEvent ( PB_EV_ISENABLED , -1 , 0 , NULL ) ;
|
|
}
|
|
|
|
void __cdecl EnablePbSv ( void )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
pbsdk->pbsv.AddPbEvent ( PB_EV_ENABLE , -1 , 0 , NULL ) ;
|
|
}
|
|
|
|
void __cdecl DisablePbSv ( void )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
pbsdk->pbsv.AddPbEvent ( PB_EV_DISABLE , -1 , 0 , NULL ) ;
|
|
}
|
|
|
|
} //extern "C"
|
|
|
|
extern void __cdecl PbClientTrapConsole ( char *msg , int msglen ) ;//in pbcl.cpp
|
|
void __cdecl PbCaptureConsoleOutput ( char *msg , int msglen )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return ;
|
|
|
|
if ( pbsdk->pbcl.m_ReloadClient == 0 ) PbClientTrapConsole ( msg , msglen ) ;
|
|
|
|
if ( pbsdk->pbsv.m_ReloadServer == 0 ) if ( pbsdk->pbsv.m_TrapConsole != NULL ) pbsdk->pbsv.m_TrapConsole ( &pbsdk->pbsv , msg , msglen ) ;
|
|
|
|
if ( *msg == '/' || *msg == '\\' ) ++msg , --msglen ;
|
|
if ( !strnicmp ( msg , "pb_" , 3 ) ) {
|
|
if ( !strnicmp ( msg + 3 , "sv_" , 3 ) ) {
|
|
if ( pbsdk->pbsv.m_TrapConsole != NULL ) PbSvAddEvent ( PB_EV_CMD , -1 , msglen , msg ) ;
|
|
} else {
|
|
if ( pbsdk->pbcl.m_ReloadClient == 0 ) PbClAddEvent ( PB_EV_CMD , msglen , msg ) ;
|
|
}
|
|
}
|
|
|
|
if ( pbsdk->ConsoleCaptureBuf == NULL ) return ;
|
|
int sl = strlen ( pbsdk->ConsoleCaptureBuf ) ;
|
|
if ( sl + (int) strlen ( msg ) + 1 >= pbsdk->ConsoleCaptureBufLen ) return ;
|
|
strcpy ( pbsdk->ConsoleCaptureBuf + sl , msg ) ;
|
|
strcat ( pbsdk->ConsoleCaptureBuf , "\n" ) ;
|
|
}
|
|
|
|
|
|
//
|
|
// PbSvGameCommand
|
|
//
|
|
extern void PBpakNames ( char *buf ) ;
|
|
char * __cdecl PbSvGameCommand ( char *Cmd , char *Result )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return NULL ;
|
|
if ( !stricmp ( Cmd , "set_sv_punkbuster" ) ) pbsdk->pb_SetSvPunkBuster ( Result ) ;
|
|
else if ( !stricmp ( Cmd , "pakNames" ) ) PBpakNames ( Result ) ;//note: Result must be 1025+ bytes for this one
|
|
else if ( !stricmp ( Cmd , "ConCapBufLen" ) ) pbsdk->ConsoleCaptureBufLen = (int) Result ;
|
|
else if ( !stricmp ( Cmd , "ConCapBuf" ) ) pbsdk->ConsoleCaptureBuf = Result ;
|
|
else if ( !stricmp ( Cmd , "Cmd_Exec" ) ) {
|
|
int pb = !strnicmp ( Result , "pb_" , 3 ) ;
|
|
pbsdk->pb_ExecCmd ( Result ) ;
|
|
if ( pb ) PbServerForceProcess() ;
|
|
} else {
|
|
char *arg1 = Result ;
|
|
while ( *arg1 == ' ' ) ++arg1 ;
|
|
while ( *arg1 && *arg1 != ' ' ) ++arg1 ;
|
|
char *endResult = arg1 ;
|
|
while ( *arg1 == ' ' ) ++arg1 ;
|
|
|
|
if ( !stricmp ( Cmd , "DropClient" ) ) pbsdk->pb_DropClient ( atoi ( Result ) , arg1 ) ;
|
|
else if ( !stricmp ( Cmd , "Cvar_Set" ) ) {
|
|
char hold = *endResult ;
|
|
*endResult = 0 ;
|
|
pbsdk->pb_CvarSet ( Result , arg1 ) ;
|
|
*endResult = hold ;
|
|
}
|
|
}
|
|
|
|
return NULL ;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// PbSvGameQuery
|
|
//
|
|
// assumes Data buffer is appropriately size/allocated for Qtype call
|
|
char * __cdecl PbSvGameQuery ( int Qtype , char *Data )
|
|
{
|
|
Data[PB_Q_MAXRESULTLEN] = 0 ;
|
|
|
|
int i ;
|
|
switch ( Qtype ) {
|
|
case PB_Q_MAXCLIENTS: itoa ( PB_MAX_CLIENTS , Data , 10 ) ; break ;
|
|
case PB_Q_CLIENT:
|
|
i = atoi ( Data ) ;
|
|
if ( !pbsdk->pb_GetClientInfo ( i , (stPb_Sv_Client *) Data ) ) return PbsQueryFail ;
|
|
break ;
|
|
case PB_Q_CVAR: strncpy ( Data , pbsdk->pb_GetCvarValue ( Data ) , PB_Q_MAXRESULTLEN ) ; break ;
|
|
case PB_Q_STATS:
|
|
i = atoi ( Data ) ;
|
|
if ( !pbsdk->pb_GetClientStats ( i , Data ) ) return PbsQueryFail ;
|
|
break ;
|
|
}
|
|
return NULL ;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// PbSvGameMsg
|
|
//
|
|
char * __cdecl PbSvGameMsg ( char *Msg , int Type )
|
|
{
|
|
if ( !isPBmultiplayerMode() ) return NULL ;
|
|
|
|
Type;//reserved
|
|
pbsdk->pb_Outf ( "%s: %s\n" , pbsdk->pbsv.m_msgPrefix , Msg ) ;
|
|
return NULL ;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// PbSvSendToClient
|
|
//
|
|
char * __cdecl PbSvSendToClient ( int DataLen , char *Data , int clientIndex )
|
|
{
|
|
pbsdk->pb_SendSvPacket ( DataLen , Data , clientIndex ) ;
|
|
return NULL ;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// PbSvSendToAddrPort
|
|
//
|
|
char * __cdecl PbSvSendToAddrPort ( char *addr , unsigned short port , int DataLen , char *Data )
|
|
{
|
|
pbsdk->pb_SendUdpPacket ( addr , port , DataLen , Data , 0 ) ; //convert bits to bytes
|
|
return NULL ;
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif //#ifdef __WITHPB__
|
|
#endif // NOT_USE_PUNKBUSTER_SDK
|