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