1 // SONIC ROBO BLAST 2 2 //----------------------------------------------------------------------------- 3 // Copyright (C) 1998-2000 by DooM Legacy Team. 4 // Copyright (C) 1999-2020 by Sonic Team Junior. 5 // Copyright (C) 2020 by James R. 6 // 7 // This program is free software distributed under the 8 // terms of the GNU General Public License, version 2. 9 // See the 'LICENSE' file for more details. 10 //----------------------------------------------------------------------------- 11 /// \file mserv.h 12 /// \brief Header file for the master server routines 13 14 #ifndef _MSERV_H_ 15 #define _MSERV_H_ 16 17 #include "i_threads.h" 18 19 // lowered from 32 due to menu changes 20 #define NUM_LIST_ROOMS 16 21 22 #if defined(_MSC_VER) 23 #pragma pack(1) 24 #endif 25 26 typedef union 27 { 28 char buffer[16]; // information such as password 29 UINT32 signature; 30 } ATTRPACK msg_header_t; 31 32 // Keep this structure 8 bytes aligned (current size is 80) 33 typedef struct 34 { 35 msg_header_t header; 36 char ip[16]; 37 char port[8]; 38 char name[32]; 39 INT32 room; 40 char version[8]; // format is: x.yy.z (like 1.30.2 or 1.31) 41 } ATTRPACK msg_server_t; 42 43 typedef struct 44 { 45 msg_header_t header; 46 INT32 id; 47 char name[32]; 48 char motd[255]; 49 } ATTRPACK msg_rooms_t; 50 51 typedef struct 52 { 53 msg_header_t header; 54 char ipstart[16]; 55 char ipend[16]; 56 char endstamp[32]; 57 char reason[255]; 58 INT32 hostonly; 59 } ATTRPACK msg_ban_t; 60 61 #if defined(_MSC_VER) 62 #pragma pack() 63 #endif 64 65 // ================================ GLOBALS =============================== 66 67 extern consvar_t cv_masterserver, cv_servername; 68 extern consvar_t cv_masterserver_update_rate; 69 extern consvar_t cv_masterserver_timeout; 70 extern consvar_t cv_masterserver_debug; 71 extern consvar_t cv_masterserver_token; 72 73 // < 0 to not connect (usually -1) (offline mode) 74 // == 0 to show all rooms, not a valid hosting room 75 // anything else is whatever room the MS assigns to that number (online mode) 76 extern INT16 ms_RoomId; 77 78 #ifdef HAVE_THREADS 79 extern int ms_QueryId; 80 extern I_mutex ms_QueryId_mutex; 81 82 extern msg_server_t *ms_ServerList; 83 extern I_mutex ms_ServerList_mutex; 84 #endif 85 86 void RegisterServer(void); 87 void UnregisterServer(void); 88 89 void MasterClient_Ticker(void); 90 91 msg_server_t *GetShortServersList(INT32 room, int id); 92 INT32 GetRoomsList(boolean hosting, int id); 93 #ifdef UPDATE_ALERT 94 char *GetMODVersion(int id); 95 void GetMODVersion_Console(void); 96 #endif 97 extern msg_rooms_t room_list[NUM_LIST_ROOMS+1]; 98 99 void AddMServCommands(void); 100 101 /* HTTP */ 102 void HMS_set_api (char *api); 103 int HMS_fetch_rooms (int joining, int id); 104 int HMS_register (void); 105 int HMS_unlist (void); 106 int HMS_update (void); 107 void HMS_list_servers (void); 108 msg_server_t * HMS_fetch_servers (msg_server_t *list, int room, int id); 109 int HMS_compare_mod_version (char *buffer, size_t size_of_buffer); 110 111 #endif 112