#include <UDPConnection.h>
+typedef struct
+{
+ int isConnected;
+ int hasConnectedOnce;
+} TestContext;
+
void printUsage()
{
printf("Usage: [-c] -a <addr> -p <target_port> -l <listen_port>\n");
void conCallback(void *userdata, uint32_t addr)
{
- *((int*)userdata) = 1;
+ TestContext *ctx = userdata;
+ ctx->isConnected = 1;
+ ctx->hasConnectedOnce = 1;
+ printf("Connected callback called\n");
}
void discCallback(void *userdata, uint32_t addr)
{
- *((int*)userdata) = 0;
+ TestContext *ctx = userdata;
+ ctx->isConnected = 0;
+ printf("Disconnected callback called\n");
}
void recCallback(void *userdata, char *data, uint32_t size)
uint32_t targetAddress = 0;
uint16_t targetPort = 0;
uint16_t listenPort = 0;
- int isConnected = 0;
+ TestContext testCtx = {0, 0};
--argc; ++argv;
while(argc > 0)
if(UDPC_get_error(ctx) == UDPC_SUCCESS)
{
UDPC_set_logging_type(ctx, 4);
- UDPC_set_callback_connected(ctx, conCallback, &isConnected);
- UDPC_set_callback_disconnected(ctx, discCallback, &isConnected);
+ UDPC_set_callback_connected(ctx, conCallback, &testCtx);
+ UDPC_set_callback_disconnected(ctx, discCallback, &testCtx);
UDPC_set_callback_received(ctx, recCallback, NULL);
while(UDPC_get_error(ctx) == UDPC_SUCCESS)
{
- if(isClient && isConnected == 0)
+ if(isClient && testCtx.isConnected == 0)
{
UDPC_client_initiate_connection(ctx, targetAddress, targetPort);
}
UDPC_update(ctx);
UDPC_check_events(ctx);
thrd_sleep(&(struct timespec){0, 16666666}, NULL);
+ if(testCtx.hasConnectedOnce != 0 && testCtx.isConnected == 0)
+ {
+ break;
+ }
}
}
UDPC_destroy(ctx);