Files
Taylor Richards 0e059459d8 improve PXO data validation code (#3817)
* add batch validation for tables
* add batch validation for missions
* handle server connection errors in a more useful way
2021-12-23 09:06:26 -05:00

113 lines
3.8 KiB
C++

/*
* Copyright (C) Volition, Inc. 2005. All rights reserved.
*
* All source code herein is the property of Volition, Inc. You may not sell
* or otherwise commercially exploit the source or things you created based on the
* source.
*
*/
#ifndef _FREESPACE_SPECIFIC_MASTER_TRACKER_HEADER
#define _FREESPACE_SPECIFIC_MASTER_TRACKER_HEADER
#include "network/ptrack.h"
// -----------------------------------------------------------------------------------
// FREESPACE MASTER TRACKER DEFINES/VARS
//
// tracker mission validation status
#define MVALID_STATUS_UNKNOWN -1
#define MVALID_STATUS_VALID 0
#define MVALID_STATUS_INVALID 1
// tracker squad war validation status
#define MSW_STATUS_UNKNOWN -1
#define MSW_STATUS_VALID 0
#define MSW_STATUS_INVALID 1
//struct vmt_freespace2_struct;
class scoring_struct;
struct squad_war_request;
struct squad_war_result;
struct netgame_info;
struct multi_create_info;
// channel to associate when creating a server
extern char Multi_fs_tracker_channel[MAX_PATH];
// channel to use when polling the tracker for games
extern char Multi_fs_tracker_filter[MAX_PATH];
// used for mod detection
extern short Multi_fs_tracker_game_id;
extern SCP_string Multi_fs_tracker_game_name;
extern SCP_string Multi_fs_tracker_game_tag;
// -----------------------------------------------------------------------------------
// FREESPACE MASTER TRACKER DECLARATIONS
//
// give some processor time to the tracker API
void multi_fs_tracker_process();
// initialize the master tracker API for Freespace
void multi_fs_tracker_init();
// validate the current player with the master tracker (will create the pilot on the MT if necessary)
int multi_fs_tracker_validate(int show_error);
// attempt to log the current game server in with the master tracker
void multi_fs_tracker_login_freespace();
// attempt to update all player statistics and scores on the tracker
int multi_fs_tracker_store_stats();
// attempt to update all player statistics (standalone mode)
int multi_fs_std_tracker_store_stats();
// log freespace out of the tracker
void multi_fs_tracker_logout();
// send a request for a list of games
void multi_fs_tracker_send_game_request();
// if the API has successfully been initialized and is running
int multi_fs_tracker_inited();
// update our settings on the tracker regarding the current netgame stuff
void multi_fs_tracker_update_game(netgame_info *ng);
// if we're currently busy performing some tracker operation (ie, you should wait or not)
int multi_fs_tracker_busy();
// copy a freespace stats struct to a tracker-freespace stats struct
void multi_stats_fs_to_tracker(scoring_struct *fs, vmt_stats_struct *vmt, player *pl, int tracker_id);
// copy a tracker-freespace stats struct to a freespace stats struct
void multi_stats_tracker_to_fs(vmt_stats_struct *vmt, scoring_struct *fs);
// return an MVALID_STATUS_* value, or -2 if the user has "cancelled"
int multi_fs_tracker_validate_mission(char *filename);
// return true if all missions were checked, false if the user has "cancelled"
bool multi_fs_tracker_validate_mission_list(SCP_vector<multi_create_info> &file_list);
// return an MSW_STATUS_* value
int multi_fs_tracker_validate_sw(squad_war_request *sw_req, char *bad_reply, const size_t max_reply_len);
// store the results of a squad war mission on PXO, return 1 on success
int multi_fs_tracker_store_sw(squad_war_result *sw_res, char *bad_reply, const size_t max_reply_len);
// check all tables with tracker
// this is hacked data check as well as mod ident
int multi_fs_tracker_validate_game_data();
// verify and possibly update Multi_options_g with sane PXO values
void multi_fs_tracker_verify_options();
// report the status of PXO game probe (firewall check)
void multi_fs_tracker_report_probe_status(int flags, int next_try);
#endif