int DownloadRequest(void);
/*
================
vmMain
This is the only way control passes into the module.
This must be the very first function compiled into the .q3vm file
================
*/
int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) {
switch ( command ) {
case GAME_INIT:
G_InitGame( arg0, arg1, arg2 );
return 0;
case GAME_SHUTDOWN:
G_ShutdownGame( arg0 );
return 0;
case GAME_CLIENT_CONNECT:
return (int)ClientConnect( arg0, arg1, arg2 );
case GAME_CLIENT_THINK:
ClientThink( arg0 );
return 0;
case GAME_CLIENT_USERINFO_CHANGED:
ClientUserinfoChanged( arg0 );
return 0;
case GAME_CLIENT_DISCONNECT:
ClientDisconnect( arg0 );
return 0;
case GAME_CLIENT_BEGIN:
ClientBegin( arg0, qtrue );
return 0;
case GAME_CLIENT_COMMAND:
ClientCommand( arg0 );
return 0;
case GAME_RUN_FRAME:
G_RunFrame( arg0 );
return 0;
case GAME_CONSOLE_COMMAND:
return ConsoleCommand();
case BOTAI_START_FRAME:
return BotAIStartFrame( arg0 );
case GAME_ROFF_NOTETRACK_CALLBACK:
G_ROFF_NotetrackCallback( &g_entities[arg0], (const char *)arg1 );
return 0;
// JK2MF: receiving the JK2MF_DOWNLOAD_REQUEST event
case JK2MF_DOWNLOAD_REQUEST:
return DownloadRequest();
}
return -1;
}
int DownloadRequest(void)
{
mfDownloadInfo downInf;
trap_JK2MF_GetDownloadRequestInfo(&downInf);
// Block a specific file programmatically
if ( !Q_stricmp(downInf.fileName, "base/UltraSecretFile.pk3") )
{
trap_SendServerCommand(-1, "print \"Someone requested base/UltraSecretFile.pk3^1! ^7NOPE^1!^7\n\"");
// If this is a UDP request kick the client
if ( downInf.clientNum != CLIENTNUM_UNKNOWN )
trap_DropClient(downInf.clientNum, "has been kicked from the server ( requested a secret file! )");
return DOWNLOAD_REJECT;
}
trap_SendServerCommand(-1, va("print \"%i^1.^7%i^1.^7%i^1.^7%i is requesting a download (via ^1%s^7) for the file ^1'%s^1'^7\n"
"We are going to accept it.\n\"", downInf.IP[0], downInf.IP[1], downInf.IP[2], downInf.IP[3],
( downInf.protocol == REQUEST_UDP ) ? "UDP" : "HTTP", downInf.fileName));
return DOWNLOAD_PROCEED;
}