#ifndef UDPC_CONNECTION_H #define UDPC_CONNECTION_H // Determine platform macros #define UDPC_PLATFORM_WINDOWS 1 #define UDPC_PLATFORM_MAC 2 #define UDPC_PLATFORM_LINUX 3 #define UDPC_PLATFORM_UNKNOWN 0 #if defined _WIN32 #define UDPC_PLATFORM UDPC_PLATFORM_WINDOWS #elif defined __APPLE__ #define UDPC_PLATFORM UDPC_PLATFORM_MAC #elif defined __linux__ #define UDPC_PLATFORM UDPC_PLATFORM_LINUX #else #define UDPC_PLATFORM UDPC_PLATFORM_UNKNOWN #endif // OS-based networking macros #if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS #include #define CleanupSocket(x) closesocket(x) #elif UDPC_PLATFORM == UDPC_PLATFORM_MAC || UDPC_PLATFORM == UDPC_PLATFORM_LINUX #include #include #include #include #define CleanupSocket(x) close(x) #else #define CleanupSocket(x) ((void)0) #endif // other defines #define UDPC_PACKET_MAX_SIZE 8192 #define UDPC_DEFAULT_PROTOCOL_ID 1357924680 #ifdef __cplusplus #include extern "C" { #else #include #endif typedef enum { SILENT, ERROR, WARNING, VERBOSE, INFO } UDPC_LoggingType; typedef struct { // id is stored at offset 8, size 4 (uint32_t) even for "empty" PktInfos char data[UDPC_PACKET_MAX_SIZE]; /* * 0x1 - connect * 0x2 - ping * 0x4 - no_rec_chk * 0x8 - resending */ uint32_t flags; uint16_t dataSize; // zero if invalid uint32_t sender; uint32_t receiver; uint16_t senderPort; uint16_t receiverPort; } UDPC_PacketInfo; void *UDPC_init(uint16_t listenPort, uint32_t listenAddr, int isClient); void *UDPC_init_threaded_update(uint16_t listenPort, uint32_t listenAddr, int isClient); void UDPC_destroy(void *ctx); void UDPC_update(void *ctx); int UDPC_get_queue_send_available(void *ctx, uint32_t addr); void UDPC_queue_send(void *ctx, uint32_t destAddr, uint32_t isChecked, void *data, uint32_t size); int UDPC_set_accept_new_connections(void *ctx, int isAccepting); int UDPC_drop_connection(void *ctx, uint32_t addr); uint32_t UDPC_set_protocol_id(void *ctx, uint32_t id); UDPC_LoggingType set_logging_type(void *ctx, UDPC_LoggingType loggingType); UDPC_PacketInfo UDPC_get_received(void *ctx); const char *UDPC_atostr(void *ctx, uint32_t addr); uint32_t UDPC_strtoa(const char *addrStr); #ifdef __cplusplus } #endif #endif