@ -77,15 +77,15 @@
# define NOMSG // typedef MSG and associated routines
# define NOOPENFILE // OpenFile(), OemToAnsi, AnsiToOem, and OF_*
# define NOSCROLL // SB_* and scrolling routines
# define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc.
# define NOSOUND // Sound driver routines
# define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc.
# define NOSOUND // Sound driver routines
# define NOTEXTMETRIC // typedef TEXTMETRIC and associated routines
# define NOWH // SetWindowsHook and WH_*
# define NOWINOFFSETS // GWL_*, GCL_*, associated routines
# define NOCOMM // COMM driver routines
# define NOKANJI // Kanji support stuff.
# define NOHELP // Help engine interface.
# define NOPROFILER // Profiler interface.
# define NOCOMM // COMM driver routines
# define NOKANJI // Kanji support stuff.
# define NOHELP // Help engine interface.
# define NOPROFILER // Profiler interface.
# define NODEFERWINDOWPOS // DeferWindowPos routines
# define NOMCX // Modem Configuration Extensions
# define MMNOSOUND
@ -256,6 +256,11 @@ typedef struct IPAddress {
unsigned short port ; // 16-bit protocol port
} IPAddress ;
typedef struct UDPChannel {
int numbound ; // The total number of addresses this channel is bound to
IPAddress address [ SOCKET_MAX_UDPADDRESSES ] ; // The list of remote addresses this channel is bound to
} UDPChannel ;
// An option ID, value, sizeof(value) tuple for setsockopt(2).
typedef struct SocketOpt {
int id ; // Socked option id
@ -263,17 +268,13 @@ typedef struct SocketOpt {
void * value ; // Socked option value data
} SocketOpt ;
typedef struct UDPChannel {
int numbound ; // The total number of addresses this channel is bound to
IPAddress address [ SOCKET_MAX_UDPADDRESSES ] ; // The list of remote addresses this channel is bound to
} UDPChannel ;
typedef struct Socket {
int ready ; // Is the socket ready? i.e. has information
int status ; // The last status code to have occured using this socket
bool isServer ; // Is this socket a server socket (i.e. TCP/UDP Listen Server)
SocketChannel channel ; // The socket handle id
SocketType type ; // Is this socket a TCP or UDP socket?
bool isIPv6 ; // Is this socket address an ipv6 address?
SocketAddressIPv4 addripv4 ; // The host/target IPv4 for this socket (in network byte order)
SocketAddressIPv6 addripv6 ; // The host/target IPv6 for this socket (in network byte order)
@ -281,6 +282,26 @@ typedef struct Socket {
struct UDPChannel binding [ SOCKET_MAX_UDPCHANNELS ] ; // The amount of channels (if UDP) this socket is bound to
} Socket ;
// Configuration for a socket
typedef struct SocketConfig {
SocketType type ; // The type of socket, TCP/UDP
char * host ; // The host address in xxx.xxx.xxx.xxx form
char * port ; // The target port/service in the form "http" or "25565"
bool server ; // Listen for incoming clients?
bool nonblocking ; // non-blocking operation?
int backlog_size ; // set a custom backlog size
SocketOpt sockopts [ SOCKET_MAX_SOCK_OPTS ] ;
} SocketConfig ;
typedef struct SocketDataPacket {
IPAddress address ; // The source/dest address of an incoming/outgoing packet
int channel ; // The src/dst channel of the packet
int maxlen ; // The size of the data buffer
int status ; // Packet status after sending
unsigned int len ; // The length of the packet data
unsigned char * data ; // The packet data
} SocketDataPacket ;
// Result from calling open with a given config
typedef struct SocketResult {
int status ; // Socket result state
@ -293,26 +314,6 @@ typedef struct SocketSet {
struct Socket * * sockets ; // Sockets array
} SocketSet ;
typedef struct SocketDataPacket {
IPAddress address ; // The source/dest address of an incoming/outgoing packet
int channel ; // The src/dst channel of the packet
int maxlen ; // The size of the data buffer
int status ; // Packet status after sending
unsigned int len ; // The length of the packet data
unsigned char * data ; // The packet data
} SocketDataPacket ;
// Configuration for a socket
typedef struct SocketConfig {
SocketType type ; // The type of socket, TCP/UDP
char * host ; // The host address in xxx.xxx.xxx.xxx form
char * port ; // The target port/service in the form "http" or "25565"
bool server ; // Listen for incoming clients?
bool nonblocking ; // non-blocking operation?
int backlog_size ; // set a custom backlog size
SocketOpt sockopts [ SOCKET_MAX_SOCK_OPTS ] ;
} SocketConfig ;
// Packet type
typedef struct Packet {
uint32_t size ; // The total size of bytes in data
@ -347,12 +348,11 @@ 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
AddressInformation AllocAddress ( ) ;
void Free Address( AddressInformation * addressInfo ) ;
AddressInformation * Alloc AddressList( int size ) ;
AddressInformation LoadAddress ( void ) ;
void Unload Address( AddressInformation * addressInfo ) ;
AddressInformation * Load AddressList( int size ) ;
// Socket API
bool SocketCreate ( SocketConfig * config , SocketResult * result ) ;
@ -361,6 +361,14 @@ bool SocketListen(SocketConfig *config, SocketResult *result);
bool SocketConnect ( SocketConfig * config , SocketResult * result ) ;
Socket * SocketAccept ( Socket * server , SocketConfig * config ) ;
// General Socket API
int SocketSend ( Socket * sock , const void * datap , int len ) ;
int SocketReceive ( Socket * sock , void * data , int maxlen ) ;
SocketAddressStorage SocketGetPeerAddress ( Socket * sock ) ;
char * GetSocketAddressHost ( SocketAddressStorage storage ) ;
short GetSocketAddressPort ( SocketAddressStorage storage ) ;
void SocketClose ( Socket * sock ) ;
// UDP Socket API
int SocketSetChannel ( Socket * socket , int channel , const IPAddress * address ) ;
void SocketUnsetChannel ( Socket * socket , int channel ) ;
@ -372,21 +380,13 @@ void FreePacket(SocketDataPacket *packet);
SocketDataPacket * * AllocPacketList ( int count , int size ) ;
void FreePacketList ( SocketDataPacket * * packets ) ;
// General Socket API
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
Socket * AllocSocket ( ) ;
void Free Socket( Socket * * sock ) ;
SocketResult * AllocSocketResult ( ) ;
void Free SocketResult( SocketResult * * result ) ;
SocketSet * Alloc SocketSet( int max ) ;
void Free SocketSet( SocketSet * sockset ) ;
Socket * LoadSocket ( void ) ;
void UnloadSocket ( Socket * * sock ) ;
SocketResult * LoadSocketResult ( void ) ;
void UnloadSocketResult ( SocketResult * * result ) ;
SocketSet * LoadSocketSet ( int max ) ;
void UnloadSocketSet ( SocketSet * sockset ) ;
// Socket I/O API
bool IsSocketReady ( Socket * sock ) ;
@ -1120,7 +1120,7 @@ int ResolveHost(const char *address, const char *service, int addressType, int f
int i ;
for ( i = 0 ; i < size ; + + i )
{
outAddr [ i ] = Alloc Address( ) ;
outAddr [ i ] = Load Address( ) ;
if ( outAddr [ i ] = = NULL )
{
break ;
@ -1475,7 +1475,7 @@ Socket *SocketAccept(Socket *server, SocketConfig *config)
struct sockaddr_storage sock_addr ;
socklen_t sock_alen ;
Socket * sock = Alloc Socket( ) ;
Socket * sock = Load Socket( ) ;
server - > ready = 0 ;
sock_alen = sizeof ( sock_addr ) ;
sock - > channel = accept ( server - > channel , ( struct sockaddr * ) & sock_addr , & sock_alen ) ;
@ -1863,14 +1863,14 @@ bool IsSocketConnected(Socket *sock)
}
// Allocate and return a SocketResult struct
SocketResult * Alloc SocketResult( void )
SocketResult * Load SocketResult( void )
{
struct SocketResult * res = ( struct SocketResult * ) RNET_MALLOC ( sizeof ( * res ) ) ;
if ( res ! = NULL )
{
memset ( res , 0 , sizeof ( * res ) ) ;
if ( ( res - > socket = Alloc Socket( ) ) = = NULL )
if ( ( res - > socket = Load Socket( ) ) = = NULL )
{
RNET_FREE ( res ) ;
res = NULL ;
@ -1881,11 +1881,11 @@ SocketResult *AllocSocketResult(void)
}
// Free an allocated SocketResult
void Free SocketResult( SocketResult * * result )
void Unload SocketResult( SocketResult * * result )
{
if ( * result ! = NULL )
{
if ( ( * result ) - > socket ! = NULL ) Free Socket( & ( ( * result ) - > socket ) ) ;
if ( ( * result ) - > socket ! = NULL ) Unload Socket( & ( ( * result ) - > socket ) ) ;
RNET_FREE ( * result ) ;
* result = NULL ;
@ -1893,7 +1893,7 @@ void FreeSocketResult(SocketResult **result)
}
// Allocate a Socket
Socket * Alloc Socket( void )
Socket * Load Socket( void )
{
struct Socket * sock ;
sock = ( Socket * ) RNET_MALLOC ( sizeof ( * sock ) ) ;
@ -1911,7 +1911,7 @@ Socket *AllocSocket(void)
}
// Free an allocated Socket
void Free Socket( Socket * * sock )
void Unload Socket( Socket * * sock )
{
if ( * sock ! = NULL )
{
@ -1921,7 +1921,7 @@ void FreeSocket(Socket **sock)
}
// Allocate a SocketSet
SocketSet * Alloc SocketSet( int max )
SocketSet * Load SocketSet( int max )
{
struct SocketSet * set = ( struct SocketSet * ) RNET_MALLOC ( sizeof ( * set ) ) ;
@ -1945,7 +1945,7 @@ SocketSet *AllocSocketSet(int max)
}
// Free an allocated SocketSet
void Free SocketSet( SocketSet * set )
void Unload SocketSet( SocketSet * set )
{
if ( set )
{
@ -2053,10 +2053,10 @@ int CheckSockets(SocketSet *set, unsigned int timeout)
}
// Allocate an AddressInformation
AddressInformation Alloc Address( void )
AddressInformation Load Address( void )
{
AddressInformation addressInfo = NULL ;
addressInfo = ( AddressInformation ) RNET_CALLOC ( 1 , sizeof ( * addressInfo ) ) ;
addressInfo = ( AddressInformation ) RNET_CALLOC ( 1 , sizeof ( * addressInfo ) ) ;
if ( addressInfo ! = NULL )
{
@ -2069,7 +2069,7 @@ AddressInformation AllocAddress(void)
}
// Free an AddressInformation struct
void Free Address( AddressInformation * addressInfo )
void Unload Address( AddressInformation * addressInfo )
{
if ( * addressInfo ! = NULL )
{
@ -2085,7 +2085,7 @@ void FreeAddress(AddressInformation *addressInfo)
}
// Allocate a list of AddressInformation
AddressInformation * Alloc AddressList( int size )
AddressInformation * Load AddressList( int size )
{
AddressInformation * addr ;
addr = ( AddressInformation * ) RNET_MALLOC ( size * sizeof ( AddressInformation ) ) ;