Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

93 lines
3.1 KiB
C

/*H*************************************************************************************************/
/*!
\File commudputil.h
\Description
CommUdp knowledge to be shared with gameserver implementation.
\Copyright
Copyright (c) 2006-2017 Electronic Arts Inc.
\Version 1.0 09/01/2017 (mclouatre) First Version
*/
/*************************************************************************************************H*/
#ifndef _commudputil_h
#define _commudputil_h
/*!
\Moduledef CommUDP CommUDP
\Modulemember Comm
*/
//@{
/*** Include files *********************************************************************/
#include "DirtySDK/platform.h"
/*** Defines ***************************************************************************/
//! define protocol packet types
enum {
COMMUDP_RAW_PACKET_INIT = 1, // initiate a connection
COMMUDP_RAW_PACKET_CONN, // confirm a connection
COMMUDP_RAW_PACKET_DISC, // terminate a connection
COMMUDP_RAW_PACKET_NAK, // force resend of lost data
COMMUDP_RAW_PACKET_POKE, // try and poke through firewall
COMMUDP_RAW_PACKET_UNREL = 128, // unreliable packet send (must be power of two)
// 128-255 reserved for unreliable packet sequence
COMMUDP_RAW_PACKET_DATA = 256, // initial data packet sequence number (must be power of two)
/* Width of the sequence window, can be anything provided
RAW_PACKET_DATA + RAW_PACKET_DATA_WINDOW
doesn't overlap the meta-data bits. */
COMMUDP_RAW_PACKET_DATA_WINDOW = (1 << 24) - 256
};
#define COMMUDP_RAW_METATYPE1_SIZE (8)
#define COMMUDP_SEQ_META_SHIFT (28 - 4)
#define COMMUDP_SEQ_MULTI_SHIFT (28)
#define COMMUDP_SEQ_MULTI_INC (1 << COMMUDP_SEQ_MULTI_SHIFT)
#define COMMUDP_SEQ_MASK (0x00ffffff)
/*** Macros ****************************************************************************/
/*** Type Definitions ******************************************************************/
/*** Variables *************************************************************************/
/*** Functions *************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
// Encodes a subpacket size field.
DIRTYCODE_API uint32_t CommUDPUtilEncodeSubpacketSize(uint8_t *pBuf, uint32_t uVal);
// Decodes a subpacket size field (see _CommUDPEncodeSubpacketSize for notes)
DIRTYCODE_API uint32_t CommUDPUtilDecodeSubpacketSize(const uint8_t *pBuf, int32_t *pVal);
// Extracts metatype from host-ordered commupd header seq field (RawUDPPacketT.body.uSeq)
DIRTYCODE_API uint32_t CommUDPUtilGetMetaTypeFromSeq(uint32_t uSeq);
// Returns the metadata size for a given metadata type.
DIRTYCODE_API uint32_t CommUDPUtilGetMetaSize(uint32_t uMetaType);
// Extracts the number of extra subpackets (excluding the main subpacket) from host - ordered commupd header seq field(RawUDPPacketT.body.uSeq)
DIRTYCODE_API uint32_t CommUDPUtilGetExtraSubPktCountFromSeq(uint32_t uSeq);
#ifdef __cplusplus
}
#endif
//@}
#endif // _commudputil_h