mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
94 lines
2.9 KiB
C
94 lines
2.9 KiB
C
/*H*************************************************************************************/
|
|
/*!
|
|
\File protobufcommon.h
|
|
|
|
\Description
|
|
Shared definitions and functionality for the protobuf encoder / decoder
|
|
|
|
\Copyright
|
|
Copyright (c) Electronic Arts 2017. ALL RIGHTS RESERVED.
|
|
|
|
\Version 07/05/2017 (eesponda)
|
|
*/
|
|
/*************************************************************************************H*/
|
|
|
|
/*** Include Files *********************************************************************/
|
|
|
|
#include "DirtySDK/platform.h"
|
|
#include "DirtySDK/util/protobufcommon.h"
|
|
|
|
/*** Varibles **************************************************************************/
|
|
|
|
//! strings representation for debugging
|
|
static const char *_ProtobufCommon_aTypes[] =
|
|
{
|
|
"PROTOBUF_TYPE_VARINT",
|
|
"PROTOBUF_TYPE_64BIT",
|
|
"PROTOBUF_TYPE_LENGTH_DELIMITED",
|
|
"PROTOBUF_TYPE_START_GROUP",
|
|
"PROTOBUF_TYPE_END_GROUP",
|
|
"PROTOBUF_TYPE_32BIT"
|
|
};
|
|
|
|
/*** Public Functions ******************************************************************/
|
|
|
|
/*F*************************************************************************************/
|
|
/*!
|
|
\Function ProtobufCommonReadSize
|
|
|
|
\Description
|
|
Reads the encoded size of the message from the buffer
|
|
|
|
\Input *pBuffer - buffer we are using to read
|
|
\Input iBufLen - size of the buffer
|
|
\Input *pResult - [out] size of the message
|
|
|
|
\Output
|
|
const uint8_t * - location past the encoded size or NULL if iBufLen is less than
|
|
4 bytes or the size of the message
|
|
|
|
\Version 07/05/2017 (eesponda)
|
|
*/
|
|
/*************************************************************************************F*/
|
|
const uint8_t *ProtobufCommonReadSize(const uint8_t *pBuffer, int32_t iBufLen, int32_t *pResult)
|
|
{
|
|
*pResult = 0;
|
|
|
|
/* if the full size of the buffer is less than the size
|
|
we cannot read the message size */
|
|
if (iBufLen < 4)
|
|
{
|
|
return(pBuffer);
|
|
}
|
|
iBufLen -= 4;
|
|
|
|
*pResult |= (*pBuffer++ << 24);
|
|
*pResult |= (*pBuffer++ << 16);
|
|
*pResult |= (*pBuffer++ << 8);
|
|
*pResult |= (*pBuffer++ << 0);
|
|
|
|
// make sure that the size of the message isn't larger than the buffer
|
|
return((*pResult <= iBufLen) ? pBuffer : NULL);
|
|
}
|
|
|
|
/*F*************************************************************************************/
|
|
/*!
|
|
\Function ProtobufCommonGetType
|
|
|
|
\Description
|
|
Converts the type to its string representation
|
|
|
|
\Input eType - type we are converting
|
|
|
|
\Output
|
|
const char * - string representation or empty string if no mapping found
|
|
|
|
\Version 07/05/2017 (eesponda)
|
|
*/
|
|
/*************************************************************************************F*/
|
|
const char *ProtobufCommonGetType(ProtobufTypeE eType)
|
|
{
|
|
return((eType >= PROTOBUF_TYPE_VARINT) && (eType <= PROTOBUF_TYPE_32BIT) ? _ProtobufCommon_aTypes[eType] : "");
|
|
}
|
|
|