|
|
@ -38,6 +38,9 @@ |
|
|
|
* |
|
|
|
**********************************************************************************************/ |
|
|
|
|
|
|
|
#ifndef RNET_H
|
|
|
|
#define RNET_H
|
|
|
|
|
|
|
|
#include <limits.h> // Required for limits
|
|
|
|
#include <inttypes.h> // Required for platform type sizes
|
|
|
|
|
|
|
@ -168,6 +171,10 @@ typedef int socklen_t; |
|
|
|
// Network connection related defines
|
|
|
|
#define SOCKET_MAX_SET_SIZE (32) // Maximum sockets in a set
|
|
|
|
#define SOCKET_MAX_QUEUE_SIZE (16) // Maximum socket queue size
|
|
|
|
#define SOCKET_MAX_SOCK_OPTS (4) // Maximum socket options
|
|
|
|
#define SOCKET_MAX_UDPCHANNELS (32) // Maximum UDP channels
|
|
|
|
#define SOCKET_MAX_UDPADDRESSES (4) // Maximum bound UDP addresses
|
|
|
|
|
|
|
|
|
|
|
|
// Network address related defines
|
|
|
|
#define ADDRESS_IPV4_ADDRSTRLEN (22) // IPv4 string length
|
|
|
@ -216,6 +223,13 @@ typedef int socklen_t; |
|
|
|
// Types and Structures Definition
|
|
|
|
//----------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Boolean type
|
|
|
|
#if defined(__STDC__) && __STDC_VERSION__ >= 199901L
|
|
|
|
#include <stdbool.h>
|
|
|
|
#elif !defined(__cplusplus) && !defined(bool)
|
|
|
|
typedef enum { false, true } bool; |
|
|
|
#endif
|
|
|
|
|
|
|
|
// Network typedefs
|
|
|
|
typedef uint32_t SocketChannel; |
|
|
|
typedef struct _AddressInformation * AddressInformation; |
|
|
@ -301,7 +315,7 @@ typedef struct SocketResult |
|
|
|
Socket *socket; |
|
|
|
} SocketResult; |
|
|
|
|
|
|
|
//
|
|
|
|
// Packet type
|
|
|
|
typedef struct Packet |
|
|
|
{ |
|
|
|
uint32_t size; // The total size of bytes in data
|
|
|
@ -325,64 +339,64 @@ extern "C" { // Prevents name mangling of functions |
|
|
|
//----------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Initialisation and cleanup
|
|
|
|
RLAPI bool InitNetwork(void); |
|
|
|
RLAPI void CloseNetwork(void); |
|
|
|
bool InitNetwork(void); |
|
|
|
void CloseNetwork(void); |
|
|
|
|
|
|
|
// Address API
|
|
|
|
RLAPI void ResolveIP(const char *ip, const char *service, int flags, char *outhost, char *outserv); |
|
|
|
RLAPI int ResolveHost(const char *address, const char *service, int addressType, int flags, AddressInformation *outAddr); |
|
|
|
RLAPI int GetAddressFamily(AddressInformation address); |
|
|
|
RLAPI int GetAddressSocketType(AddressInformation address); |
|
|
|
RLAPI int GetAddressProtocol(AddressInformation address); |
|
|
|
RLAPI char* GetAddressCanonName(AddressInformation address); |
|
|
|
RLAPI char* GetAddressHostAndPort(AddressInformation address, char *outhost, int *outport); |
|
|
|
RLAPI void PrintAddressInfo(AddressInformation address); |
|
|
|
void ResolveIP(const char *ip, const char *service, int flags, char *outhost, char *outserv); |
|
|
|
int ResolveHost(const char *address, const char *service, int addressType, int flags, AddressInformation *outAddr); |
|
|
|
int GetAddressFamily(AddressInformation address); |
|
|
|
int GetAddressSocketType(AddressInformation address); |
|
|
|
int GetAddressProtocol(AddressInformation address); |
|
|
|
char* GetAddressCanonName(AddressInformation address); |
|
|
|
char* GetAddressHostAndPort(AddressInformation address, char *outhost, int *outport); |
|
|
|
void PrintAddressInfo(AddressInformation address); |
|
|
|
|
|
|
|
// Address Memory API
|
|
|
|
RLAPI AddressInformation AllocAddress(); |
|
|
|
RLAPI void FreeAddress(AddressInformation *addressInfo); |
|
|
|
RLAPI AddressInformation *AllocAddressList(int size); |
|
|
|
AddressInformation AllocAddress(); |
|
|
|
void FreeAddress(AddressInformation *addressInfo); |
|
|
|
AddressInformation *AllocAddressList(int size); |
|
|
|
|
|
|
|
// Socket API
|
|
|
|
RLAPI bool SocketCreate(SocketConfig *config, SocketResult *result); |
|
|
|
RLAPI bool SocketBind(SocketConfig *config, SocketResult *result); |
|
|
|
RLAPI bool SocketListen(SocketConfig *config, SocketResult *result); |
|
|
|
RLAPI bool SocketConnect(SocketConfig *config, SocketResult *result); |
|
|
|
RLAPI Socket *SocketAccept(Socket *server, SocketConfig *config); |
|
|
|
bool SocketCreate(SocketConfig *config, SocketResult *result); |
|
|
|
bool SocketBind(SocketConfig *config, SocketResult *result); |
|
|
|
bool SocketListen(SocketConfig *config, SocketResult *result); |
|
|
|
bool SocketConnect(SocketConfig *config, SocketResult *result); |
|
|
|
Socket *SocketAccept(Socket *server, SocketConfig *config); |
|
|
|
|
|
|
|
// UDP Socket API
|
|
|
|
RLAPI int SocketSetChannel(Socket *socket, int channel, const IPAddress *address); |
|
|
|
RLAPI void SocketUnsetChannel(Socket *socket, int channel); |
|
|
|
int SocketSetChannel(Socket *socket, int channel, const IPAddress *address); |
|
|
|
void SocketUnsetChannel(Socket *socket, int channel); |
|
|
|
|
|
|
|
// UDP DataPacket API
|
|
|
|
RLAPI SocketDataPacket *AllocPacket(int size); |
|
|
|
RLAPI int ResizePacket(SocketDataPacket *packet, int newsize); |
|
|
|
RLAPI void FreePacket(SocketDataPacket *packet); |
|
|
|
RLAPI SocketDataPacket **AllocPacketList(int count, int size); |
|
|
|
RLAPI void FreePacketList(SocketDataPacket **packets); |
|
|
|
SocketDataPacket *AllocPacket(int size); |
|
|
|
int ResizePacket(SocketDataPacket *packet, int newsize); |
|
|
|
void FreePacket(SocketDataPacket *packet); |
|
|
|
SocketDataPacket **AllocPacketList(int count, int size); |
|
|
|
void FreePacketList(SocketDataPacket **packets); |
|
|
|
|
|
|
|
// General Socket API
|
|
|
|
RLAPI int SocketSend(Socket *sock, const void *datap, int len); |
|
|
|
RLAPI int SocketReceive(Socket *sock, void *data, int maxlen); |
|
|
|
RLAPI void SocketClose(Socket *sock); |
|
|
|
RLAPI SocketAddressStorage SocketGetPeerAddress(Socket *sock); |
|
|
|
RLAPI char* GetSocketAddressHost(SocketAddressStorage storage); |
|
|
|
RLAPI short GetSocketAddressPort(SocketAddressStorage storage); |
|
|
|
int SocketSend(Socket *sock, const void *datap, int len); |
|
|
|
int SocketReceive(Socket *sock, void *data, int maxlen); |
|
|
|
void SocketClose(Socket *sock); |
|
|
|
SocketAddressStorage SocketGetPeerAddress(Socket *sock); |
|
|
|
char* GetSocketAddressHost(SocketAddressStorage storage); |
|
|
|
short GetSocketAddressPort(SocketAddressStorage storage); |
|
|
|
|
|
|
|
// Socket Memory API
|
|
|
|
RLAPI Socket *AllocSocket(); |
|
|
|
RLAPI void FreeSocket(Socket **sock); |
|
|
|
RLAPI SocketResult *AllocSocketResult(); |
|
|
|
RLAPI void FreeSocketResult(SocketResult **result); |
|
|
|
RLAPI SocketSet *AllocSocketSet(int max); |
|
|
|
RLAPI void FreeSocketSet(SocketSet *sockset); |
|
|
|
Socket *AllocSocket(); |
|
|
|
void FreeSocket(Socket **sock); |
|
|
|
SocketResult *AllocSocketResult(); |
|
|
|
void FreeSocketResult(SocketResult **result); |
|
|
|
SocketSet *AllocSocketSet(int max); |
|
|
|
void FreeSocketSet(SocketSet *sockset); |
|
|
|
|
|
|
|
// Socket I/O API
|
|
|
|
RLAPI bool IsSocketReady(Socket *sock); |
|
|
|
RLAPI bool IsSocketConnected(Socket *sock); |
|
|
|
RLAPI int AddSocket(SocketSet *set, Socket *sock); |
|
|
|
RLAPI int RemoveSocket(SocketSet *set, Socket *sock); |
|
|
|
RLAPI int CheckSockets(SocketSet *set, unsigned int timeout); |
|
|
|
bool IsSocketReady(Socket *sock); |
|
|
|
bool IsSocketConnected(Socket *sock); |
|
|
|
int AddSocket(SocketSet *set, Socket *sock); |
|
|
|
int RemoveSocket(SocketSet *set, Socket *sock); |
|
|
|
int CheckSockets(SocketSet *set, unsigned int timeout); |
|
|
|
|
|
|
|
// Packet API
|
|
|
|
void PacketSend(Packet *packet); |
|
|
@ -400,4 +414,4 @@ uint64_t PacketRead64(Packet *packet); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // RNET_H |
|
|
|
#endif // RNET_H |