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.
136 lines
4.1 KiB
C
136 lines
4.1 KiB
C
/*H********************************************************************************/
|
|
/*!
|
|
\File dirtyaddr.c
|
|
|
|
\Description
|
|
Opaque address functions.
|
|
|
|
\Copyright
|
|
Copyright (c) Electronic Arts 2004. ALL RIGHTS RESERVED.
|
|
|
|
\Version 04/09/2004 (jbrookes) First Version
|
|
*/
|
|
/********************************************************************************H*/
|
|
|
|
/*** Include files ****************************************************************/
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "DirtySDK/dirtysock.h"
|
|
#include "DirtySDK/dirtysock/dirtyaddr.h"
|
|
#include "DirtySDK/dirtysock/netconn.h"
|
|
|
|
/*** Defines **********************************************************************/
|
|
|
|
/*** Type Definitions *************************************************************/
|
|
|
|
/*** Variables ********************************************************************/
|
|
|
|
/*** Private Functions ************************************************************/
|
|
|
|
/*** Public functions *************************************************************/
|
|
|
|
/*F********************************************************************************/
|
|
/*!
|
|
\Function DirtyAddrToHostAddr
|
|
|
|
\Description
|
|
Convert from DirtyAddrT to native format.
|
|
|
|
\Input *pOutput - [out] storage for native format address
|
|
\Input iBufLen - length of output buffer
|
|
\Input *pAddr - source address to convert
|
|
|
|
\Output
|
|
uint32_t - number of characters consumed from input, or zero on failure
|
|
|
|
\Notes
|
|
On common platforms, a DirtyAddrT is a string-encoded network-order address
|
|
field. This function converts that input to a binary-encoded host-order
|
|
address.
|
|
|
|
\Version 04/09/2004 (jbrookes)
|
|
*/
|
|
/********************************************************************************F*/
|
|
uint32_t DirtyAddrToHostAddr(void *pOutput, int32_t iBufLen, const DirtyAddrT *pAddr)
|
|
{
|
|
uint32_t uAddress;
|
|
|
|
// make sure our buffer is big enough
|
|
if (iBufLen < (signed)sizeof(uAddress))
|
|
{
|
|
NetPrintf(("dirtyaddr: output buffer too small\n"));
|
|
return(0);
|
|
}
|
|
|
|
// convert from string to int32_t
|
|
uAddress = (uint32_t)strtoul(&pAddr->strMachineAddr[1], NULL, 16);
|
|
|
|
// convert from network order to host order
|
|
uAddress = SocketNtohl(uAddress);
|
|
|
|
// copy to output
|
|
ds_memcpy(pOutput, &uAddress, sizeof(uAddress));
|
|
return(9);
|
|
}
|
|
|
|
/*F********************************************************************************/
|
|
/*!
|
|
\Function DirtyAddrFromHostAddr
|
|
|
|
\Description
|
|
Convert from native format to DirtyAddrT.
|
|
|
|
\Input *pAddr - [out] storage for output DirtyAddrT
|
|
\Input *pInput - pointer to native format address
|
|
|
|
\Output
|
|
uint32_t - TRUE if successful, else FALSE
|
|
|
|
\Notes
|
|
On common platforms, a DirtyAddrT is a string-encoded network-order address
|
|
field. This function converts a binary-encoded host-order address to that
|
|
format.
|
|
|
|
\Version 04/09/2004 (jbrookes)
|
|
*/
|
|
/********************************************************************************F*/
|
|
uint32_t DirtyAddrFromHostAddr(DirtyAddrT *pAddr, const void *pInput)
|
|
{
|
|
uint32_t uAddress;
|
|
|
|
// make sure output buffer is okay
|
|
if ((pInput == NULL) || (((intptr_t)pInput & 0x3) != 0))
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
uAddress = SocketHtonl(*(const uint32_t *)pInput);
|
|
ds_snzprintf(pAddr->strMachineAddr, sizeof(pAddr->strMachineAddr), "$%08x", uAddress);
|
|
return(TRUE);
|
|
}
|
|
|
|
/*F********************************************************************************/
|
|
/*!
|
|
\Function DirtyAddrGetLocalAddr
|
|
|
|
\Description
|
|
Get the local address in DirtyAddr form.
|
|
|
|
\Input *pAddr - [out] storage for output DirtyAddrT
|
|
|
|
\Output
|
|
uint32_t - TRUE if successful, else FALSE
|
|
|
|
\Version 09/29/2004 (jbrookes)
|
|
*/
|
|
/********************************************************************************F*/
|
|
uint32_t DirtyAddrGetLocalAddr(DirtyAddrT *pAddr)
|
|
{
|
|
uint32_t uLocalAddr = NetConnStatus('addr', 0, NULL, 0);
|
|
DirtyAddrFromHostAddr(pAddr, &uLocalAddr);
|
|
return(TRUE);
|
|
}
|