FS2_Open
Open source remastering of the Freespace 2 engine
tcp_client.h
Go to the documentation of this file.
1 // Client.h
2 // Client Functions for FS2Open PXO
3 // Derek Meek
4 // 2-14-2003
5 
6 // ############## ATTENTION ##########
7 // Licensed under the Academic Free License version 2.0
8 // View License at http://www.opensource.org/licenses/afl-2.0.php
9 // ###################################
10 
11 
12 
13 
14 #if !defined(__pxo_client_h_)
15 #define __pxo_client_h_
16 
17 
18 #include "fs2netd/protocol.h"
19 #include "fs2netd/tcp_socket.h"
20 #include "globalincs/pstypes.h"
21 
22 #include <string>
23 
24 class player;
25 struct netgame_info;
26 
27 
28 int FS2NetD_CheckSingleMission(const char *m_name, uint crc32, bool do_send);
29 
30 int FS2NetD_SendPlayerData(const char *player_name, player *pl, bool do_send);
31 int FS2NetD_GetPlayerData(const char *player_name, player *pl, bool can_create, bool do_send);
32 
33 int FS2NetD_GetBanList(SCP_vector<SCP_string> &mask_list, bool do_send);
34 
35 int FS2NetD_GetMissionsList(SCP_vector<file_record> &m_list, bool do_send);
36 
37 int FS2NetD_ValidateTableList(bool do_send);
38 
39 int FS2NetD_Login(const char *username, const char *password, bool do_send);
42 
46 
48 
49 void FS2NetD_GameCountUpdate(const char *chan_name);
50 
51 void FS2NetD_Ping();
52 void FS2NetD_Pong(int tstamp);
53 
54 
55 
56 // Some easy to use macros for handling the packet data
57 #define BASE_PACKET_SIZE (int)(sizeof(ubyte) + sizeof(int))
58 
59 #define PXO_ADD_DATA(d) do { Assert(buffer_size+sizeof(d) <= sizeof(buffer)); memcpy(buffer+buffer_size, &d, sizeof(d)); buffer_size += sizeof(d); } while (0)
60 #define PXO_ADD_SHORT(d) do { Assert(buffer_size+sizeof(short) <= sizeof(buffer)); short swap = INTEL_SHORT(d); memcpy(buffer+buffer_size, &swap, sizeof(short)); buffer_size += sizeof(short); } while (0)
61 #define PXO_ADD_USHORT(d) do { Assert(buffer_size+sizeof(ushort) <= sizeof(buffer)); ushort swap = INTEL_SHORT(d); memcpy(buffer+buffer_size, &swap, sizeof(ushort)); buffer_size += sizeof(ushort); } while (0)
62 #define PXO_ADD_INT(d) do { Assert(buffer_size+sizeof(int) <= sizeof(buffer)); int swap = INTEL_INT(d); memcpy(buffer+buffer_size, &swap, sizeof(int)); buffer_size += sizeof(int); } while (0)
63 #define PXO_ADD_UINT(d) do { Assert(buffer_size+sizeof(uint) <= sizeof(buffer)); uint swap = INTEL_INT(d); memcpy(buffer+buffer_size, &swap, sizeof(uint)); buffer_size += sizeof(uint); } while (0)
64 #define PXO_ADD_STRING(s) do { Assert(buffer_size+strlen(s)+sizeof(int) <= sizeof(buffer)); int len = strlen(s); PXO_ADD_INT(len); if (len > 0) { memcpy(buffer+buffer_size, s, len ); buffer_size += len; } } while(0)
65 
66 #define PXO_GET_DATA(d) do { Assert(buffer_offset+sizeof(d) <= sizeof(buffer)); memcpy(&d, buffer+buffer_offset, sizeof(d) ); buffer_offset += sizeof(d); } while(0)
67 #define PXO_GET_SHORT(d) do { Assert(buffer_offset+sizeof(short) <= sizeof(buffer)); short swap; memcpy(&swap, buffer+buffer_offset, sizeof(short) ); d = INTEL_SHORT(swap); buffer_offset += sizeof(short); } while(0)
68 #define PXO_GET_USHORT(d) do { Assert(buffer_offset+sizeof(ushort) <= sizeof(buffer)); ushort swap; memcpy(&swap, buffer+buffer_offset, sizeof(ushort) ); d = INTEL_SHORT(swap); buffer_offset += sizeof(ushort); } while(0)
69 #define PXO_GET_INT(d) do { Assert(buffer_offset+sizeof(int) <= sizeof(buffer)); int swap; memcpy(&swap, buffer+buffer_offset, sizeof(int) ); d = INTEL_INT(swap); buffer_offset += sizeof(int); } while(0)
70 #define PXO_GET_UINT(d) do { Assert(buffer_offset+sizeof(uint) <= sizeof(buffer)); uint swap; memcpy(&swap, buffer+buffer_offset, sizeof(uint) ); d = INTEL_INT(swap); buffer_offset += sizeof(uint); } while(0)
71 #define PXO_GET_STRING(s) do { Assert(buffer_offset+sizeof(int) <= sizeof(buffer)); s[0] = '\0'; int len; memcpy(&len, buffer+buffer_offset, sizeof(int)); len = INTEL_INT(len); buffer_offset += sizeof(int); if (len > 0) { memcpy(s, buffer+buffer_offset, len); buffer_offset += len; s[len] = '\0'; } } while(0)
72 
73 // initialize a packet
74 #define INIT_PACKET(x) { memset(buffer, 0, sizeof(buffer)); buffer_size = 0; ubyte pckt = (x); PXO_ADD_DATA(pckt); PXO_ADD_INT(buffer_size); }
75 // we are done with a new packet, so update the final packet size
76 #define DONE_PACKET() { int swap = INTEL_INT(buffer_size); memcpy(buffer+sizeof(ubyte), &swap, sizeof(buffer_size)); }
77 // verify received packet
78 #define VRFY_PACKET(x) { buffer_offset = 0; ubyte pckt; PXO_GET_DATA(pckt); if (pckt != (x)) break; my_packet = true; PXO_GET_INT(buffer_size); }
79 #define VRFY_PACKET2(x) { buffer_offset = 0; ubyte pckt; PXO_GET_DATA(pckt); if (pckt == (x)) my_packet = true; PXO_GET_INT(buffer_size); }
80 
81 
82 #endif
int FS2NetD_GetPlayerData(const char *player_name, player *pl, bool can_create, bool do_send)
Definition: tcp_client.cpp:195
void FS2NetD_Pong(int tstamp)
Definition: tcp_client.cpp:652
int FS2NetD_SendPlayerData(const char *player_name, player *pl, bool do_send)
Definition: tcp_client.cpp:94
int FS2NetD_ValidateTableList(bool do_send)
Definition: tcp_client.cpp:685
int FS2NetD_Login(const char *username, const char *password, bool do_send)
Definition: tcp_client.cpp:470
void FS2NetD_SendServerDisconnect()
Definition: tcp_client.cpp:599
void FS2NetD_SendServerUpdate()
Definition: tcp_client.cpp:574
int FS2NetD_GetMissionsList(SCP_vector< file_record > &m_list, bool do_send)
Definition: tcp_client.cpp:392
void FS2NetD_GameCountUpdate(const char *chan_name)
Definition: tcp_client.cpp:777
Definition: player.h:85
unsigned int uint
Definition: pstypes.h:64
void FS2NetD_RequestServerList()
Definition: tcp_client.cpp:611
void FS2NetD_CheckDuplicateLogin()
Definition: tcp_client.cpp:791
void FS2NetD_Ping()
Definition: tcp_client.cpp:637
void FS2NetD_SendServerStart()
Definition: tcp_client.cpp:533
int FS2NetD_CheckSingleMission(const char *m_name, uint crc32, bool do_send)
Definition: tcp_client.cpp:36
int FS2NetD_GetBanList(SCP_vector< SCP_string > &mask_list, bool do_send)
Definition: tcp_client.cpp:317
int FS2NetD_CheckValidID()
Definition: tcp_client.cpp:666