#include <stdlib.h>
-UDPC_Context* UDPC_init(uint16_t listenPort)
+UDPC_Context* UDPC_init(uint16_t listenPort, int isClient)
{
UDPC_Context *context = malloc(sizeof(UDPC_Context));
context->error = UDPC_SUCCESS;
context->flags = 0;
context->threadFlags = 0;
+ if(isClient != 0) context->flags |= 0x2;
// create socket
context->socketHandle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
CleanupSocket(context->socketHandle);
context->socketHandle = 0;
fprintf(stderr, "Failed to set non-blocking on socket\n");
+#if UDPC_PLATFORM == UDPC_PLATFORM_UNKNOWN
+ fprintf(stderr, "(Unknown platform)\n");
+#endif
return context;
}
+ context->connected = UDPC_Deque_init(sizeof(UDPC_INTERNAL_ConnectionData)
+ * (isClient != 0 ? 1 : UDPC_CD_AMOUNT));
+
return context;
}
-UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort)
+UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, int isClient)
{
- UDPC_Context *context = UDPC_init(listenPort);
+ UDPC_Context *context = UDPC_init(listenPort, isClient);
context->error = mtx_init(&context->tCVMtx, mtx_timed);
if(context->error != thrd_success)
void UDPC_destroy(UDPC_Context *ctx)
{
CleanupSocket(ctx->socketHandle);
+ UDPC_Deque_destroy(ctx->connected);
if((ctx->flags & 0x1) != 0)
{
#include <stdint.h>
#include "UDPC_Defines.h"
+#include "UDPC_Deque.h"
#if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
#include <winsock2.h>
#define CleanupSocket(x) close(x)
#endif
+#define UDPC_CD_AMOUNT 32
+
// This struct should not be used outside of this library
typedef struct
{
float toggleTimer;
float toggledTimer;
uint16_t port;
- UDPC_INTERNAL_PacketInfo *sentPkts;
- UDPC_INTERNAL_PacketInfo *sendPktQueue;
+ UDPC_Deque *sentPkts;
+ UDPC_Deque *sendPktQueue;
struct timespec received;
struct timespec sent;
struct timespec rtt;
{
/*
* 0x1 - is threaded
+ * 0x2 - is client
*/
uint32_t flags;
/*
mtx_t tCVMtx;
mtx_t tflagsMtx;
cnd_t threadCV;
+ UDPC_Deque *connected;
} UDPC_Context;
-UDPC_Context* UDPC_init(uint16_t listenPort);
+UDPC_Context* UDPC_init(uint16_t listenPort, int isClient);
-UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort);
+UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, int isClient);
void UDPC_destroy(UDPC_Context *ctx);