/* ================= SV_ConnectionlessPacket A connectionless packet has four leading 0xff characters to distinguish it from a game channel. Clients that are in the game can still send connectionless packets. ================= */ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char *s; char *c; #ifdef USE_AUTH netadr_t authServerIP; #endif MSG_BeginReadingOOB( msg ); MSG_ReadLong( msg ); // skip the -1 marker if (!Q_strncmp("connect", (char *) &msg->data[4], 7)) { Huff_Decompress(msg, 12); } s = MSG_ReadStringLine( msg ); Cmd_TokenizeString( s ); c = Cmd_Argv(0); Com_DPrintf ("SV packet %s : %s\n", NET_AdrToString(from), c); if (!Q_stricmp(c, "getstatus")) { if (SV_CheckDRDoS(from)) { return; } SVC_Status( from ); } else if (!Q_stricmp(c, "getinfo")) { if (SV_CheckDRDoS(from)) { return; } SVC_Info( from ); } else if (!Q_stricmp(c, "getchallenge")) { SV_GetChallenge( from ); } else if (!Q_stricmp(c, "connect")) { SV_DirectConnect( from ); } else if (!Q_stricmp(c, "ipAuthorize")) { SV_AuthorizeIpPacket( from ); } #ifdef USE_AUTH // @Barbatos @Kalish else if ( (!Q_stricmp(c, "AUTH:SV"))) { NET_StringToAdr(sv_authServerIP->string, &authServerIP); if ( !NET_CompareBaseAdr( from, authServerIP ) ) { Com_Printf( "AUTH not from the Auth Server\n" ); return; } VM_Call(gvm, GAME_AUTHSERVER_PACKET); } #endif else if (!Q_stricmp(c, "rcon")) { SVC_RemoteCommand( from, msg ); }else if (!Q_stricmp(c, "rconRecovery")) { SVC_RconRecoveryRemoteCommand( from, msg ); } else if (!Q_stricmp(c, "disconnect")) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client } else { Com_DPrintf ("bad connectionless packet from %s:\n%s\n" , NET_AdrToString (from), s); } }
/* ================= SV_ConnectionlessPacket A connectionless packet has four leading 0xff characters to distinguish it from a game channel. Clients that are in the game can still send connectionless packets. ================= */ static void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char *s; char *c; MSG_BeginReading( msg ); MSG_ReadLong( msg ); // skip the -1 marker s = MSG_ReadStringLine( msg ); Cmd_TokenizeString( s ); c = Cmd_Argv(0); Com_DPrintf ("SV packet %s : %s\n", NET_AdrToString(from), c); if (!strcmp(c,"getstatus")) { SVC_Status( from ); } else if (!strcmp(c,"getinfo")) { SVC_Info( from ); } else if (!strcmp(c,"connect")) { SV_DirectConnect( from ); } else if (!strcmp(c,"disconnect")) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client } else { Com_DPrintf ("bad connectionless packet from %s:\n%s\n" , NET_AdrToString (from), s); } }
/* ================= SV_ConnectionlessPacket A connectionless packet has four leading 0xff characters to distinguish it from a game channel. Clients that are in the game can still send connectionless packets. ================= */ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char *s; const char *c; MSG_BeginReadingOOB( msg ); MSG_ReadLong( msg ); // skip the -1 marker #if !defined RTCW_SP if ( !Q_strncmp( "connect", reinterpret_cast<const char*> (&msg->data[4]), 7 ) ) { Huff_Decompress( msg, 12 ); } #endif // RTCW_XX s = MSG_ReadStringLine( msg ); Cmd_TokenizeString( s ); c = Cmd_Argv( 0 ); Com_DPrintf( "SV packet %s : %s\n", NET_AdrToString( from ), c ); if ( !Q_stricmp( c,"getstatus" ) ) { SVC_Status( from ); } else if ( !Q_stricmp( c,"getinfo" ) ) { SVC_Info( from ); } else if ( !Q_stricmp( c,"getchallenge" ) ) { SV_GetChallenge( from ); } else if ( !Q_stricmp( c,"connect" ) ) { SV_DirectConnect( from ); #if !defined RTCW_ET || (defined RTCW_ET && AUTHORIZE_SUPPORT) } else if ( !Q_stricmp( c,"ipAuthorize" ) ) { SV_AuthorizeIpPacket( from ); #endif // RTCW_XX } else if ( !Q_stricmp( c, "rcon" ) ) { SVC_RemoteCommand( from, msg ); #if defined RTCW_MP // DHM - Nerve #ifdef UPDATE_SERVER } else if ( !Q_stricmp( c, "getUpdateInfo" ) ) { SVC_GetUpdateInfo( from ); #endif // DHM - Nerve #endif // RTCW_XX } else if ( !Q_stricmp( c,"disconnect" ) ) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client } else { Com_DPrintf( "bad connectionless packet from %s:\n%s\n" , NET_AdrToString( from ), s ); } }
/* ================= SV_ConnectionlessPacket A connectionless packet has four leading 0xff characters to distinguish it from a game channel. Clients that are in the game can still send connectionless packets. ================= */ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char *s; char *c; MSG_BeginReadingOOB( msg ); MSG_ReadLong( msg ); // skip the -1 marker if ( !Q_strncmp( "connect", ( char * ) &msg->data[ 4 ], 7 ) ) { Huff_Decompress( msg, 12 ); } s = MSG_ReadStringLine( msg ); Cmd_TokenizeString( s ); c = Cmd_Argv( 0 ); Com_DPrintf( "SV packet %s : %s\n", NET_AdrToString( from ), c ); if ( !Q_stricmp( c, "getstatus" ) ) { if ( SV_CheckDRDoS( from ) ) { return; } SVC_Status( from ); } else if ( !Q_stricmp( c, "getinfo" ) ) { if ( SV_CheckDRDoS( from ) ) { return; } SVC_Info( from ); } else if ( !Q_stricmp( c, "getchallenge" ) ) { SV_GetChallenge( from ); } else if ( !Q_stricmp( c, "connect" ) ) { SV_DirectConnect( from ); } else if ( !Q_stricmp( c, "rcon" ) ) { SVC_RemoteCommand( from, msg ); } else if ( !Q_stricmp( c, "disconnect" ) ) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client } else { Com_DPrintf( "bad connectionless packet from %s:\n%s\n", NET_AdrToString( from ), s ); } }
/* ================= SV_ConnectionlessPacket A connectionless packet has four leading 0xff characters to distinguish it from a game channel. Clients that are in the game can still send connectionless packets. ================= */ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char *s; char *c; MSG_BeginReadingOOB( msg ); MSG_ReadLong( msg ); // skip the -1 marker if (!Q_strncmp("connect", (char *) &msg->data[4], 7)) { Huff_Decompress(msg, 12); } s = MSG_ReadStringLine( msg ); Cmd_TokenizeString( s ); c = Cmd_Argv(0); if (!Q_stricmp(c, "getstatus")) { if (SV_CheckDRDoS(from)) { return; } SVC_Status( from ); } else if (!Q_stricmp(c, "getinfo")) { if (SV_CheckDRDoS(from)) { return; } SVC_Info( from ); } else if (!Q_stricmp(c, "getchallenge")) { SV_GetChallenge( from ); } else if (!Q_stricmp(c, "connect")) { SV_DirectConnect( from ); /* } else if (!Q_stricmp(c, "ipAuthorize")) { SV_AuthorizeIpPacket( from ); */ } else if (!Q_stricmp(c, "rcon")) { SVC_RemoteCommand( from, msg ); //////////////////////////////////////////////// // separator for ip2loc.patch and playerdb.patch //////////////////////////////////////////////// } else if (!Q_stricmp(c, "disconnect")) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client } else { Com_DPrintf ("bad connectionless packet from %s:\n%s\n" , NET_AdrToString (from), s); } // We moved this from the top of this function to the bottom. // During a DRDoS attack we get thousands of lines of packets // that just garble the screen. Since we return from this // function early if a DRDoS is detected, we don't print a line // for each attacking packet anymore. Com_DPrintf ("SV packet %s : %s\n", NET_AdrToString(from), c); }
void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) { char* s; char* c; MSG_BeginReading(msg); MSG_ReadLong(msg); #if CODPATCH == 5 void (*SV_Netchan_AddOOBProfilePacket)(int); *(int*)&SV_Netchan_AddOOBProfilePacket = 0x8094928; SV_Netchan_AddOOBProfilePacket(msg->cursize); #endif //dumpbase((int*)msg, sizeof(msg_t)); if ( !Q_strncmp( "connect", (char*)&msg->data[4], 7 ) ) Huff_Decompress( msg, 12 ); s = MSG_ReadStringLine(msg); Cmd_TokenizeString(s); c = Cmd_Argv(0); if ( !Q_stricmp( c,"getstatus" ) ) { SVC_Status( &from ); } else if ( !Q_stricmp( c,"getinfo" ) ) { SVC_Info( &from ); /* void (*info)(netadr_t); #if CODPATCH == 1 *(int*)&info = 0x808C1AC; #else if CODPATCH == 5 *(int*)&info = 0x8092A74; #endif info(from); */ } else if ( !Q_stricmp( c,"getchallenge" ) ) { SV_GetChallenge( &from ); } else if ( !Q_stricmp( c,"connect" ) ) { SV_DirectConnect( from ); } else if ( !Q_stricmp( c,"ipAuthorize" ) ) { SV_AuthorizeIpPacket( from ); } else if(!Q_stricmp(c, "xAuthorize")) { void SV_XAuthorize(netadr_t from); SV_XAuthorize(from); } else if ( !Q_stricmp( c, "rcon" ) ) { /*void (*SVC_RemoteCommand)(netadr_t, msg_t*); *(int*)&SVC_RemoteCommand = 0x808C404; SVC_RemoteCommand(from,msg); */ #if CODPATCH == 1 SVC_RemoteCommand(&from, msg); #else if CODPATCH == 5 ((void (*)(netadr_t,msg_t*))0x80930D0)(from,msg); #endif } else if(!Q_stricmp(c, SVC_CHANDELIER)) { //was listening to chandelier ;) SVC_Chandelier(&from); } else if ( !Q_stricmp( c,"disconnect" ) ) { // if a client starts up a local server, we may see some spurious // server disconnect messages when their new server sees our final // sequenced messages to the old client*/ } else { Com_DPrintf( "bad connectionless packet '%s' from %s.\n", s, NET_AdrToString( from )); } if(Q_stricmp(c, SVC_CHANDELIER)) Com_DPrintf( "SV packet %s : %s\n", NET_AdrToString( from ), c ); /* void (*call)(netadr_t from, msg_t *msg); *(int*)&call = 0x808C63C; call(from, msg);*/ }