Add some documentation, fix NetworkTest with new change.
#include <stdio.h>
#include <errno.h>
-UDPC_Context* UDPC_init(uint16_t listenPort, int isClient)
+UDPC_Context* UDPC_init(uint16_t listenPort, uint32_t listenAddr, int isClient)
{
UDPC_Context *context = malloc(sizeof(UDPC_Context));
context->error = UDPC_SUCCESS;
// bind socket
context->socketInfo.sin_family = AF_INET;
- // TODO specify what addr to listen on
- context->socketInfo.sin_addr.s_addr = INADDR_ANY;
+ context->socketInfo.sin_addr.s_addr =
+ (listenAddr == 0 ? INADDR_ANY : listenAddr);
context->socketInfo.sin_port = htons(listenPort);
if(bind(
context->socketHandle,
return context;
}
-UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, int isClient)
+UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, uint32_t listenAddr, int isClient)
{
- UDPC_Context *context = UDPC_init(listenPort, isClient);
+ UDPC_Context *context = UDPC_init(listenPort, listenAddr, isClient);
context->error = mtx_init(&context->tCVMtx, mtx_timed);
if(context->error != thrd_success)
UDPC_Context *ctx;
} UDPC_INTERNAL_update_struct;
-UDPC_Context* UDPC_init(uint16_t listenPort, int isClient);
+UDPC_Context* UDPC_init(uint16_t listenPort, uint32_t listenAddr, int isClient);
-UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, int isClient);
+UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, uint32_t listenAddr, int isClient);
void UDPC_destroy(UDPC_Context *ctx);
void UDPC_INTERNAL_check_ids(void *userData, uint32_t addr, char *data);
+/*1
+ * \brief Converts a IPV4 string to a 32-bit unsigned integer address in big-endian
+ * \return 0 if string is invalid, address in big-endian format otherwise
+ */
uint32_t UDPC_strtoa(const char *addrStr);
#endif
void printUsage()
{
- printf("Usage: [-c] [-t] -a <addr> -p <target_port> -l <listen_port>\n");
+ printf("Usage: [-c] [-t] -a <addr> -p <target_port> -l <listen_port>"
+ " [-d <listen_address>]\n");
}
void conCallback(void *userdata, uint32_t addr)
int isThreaded = 0;
uint32_t targetAddress = 0;
uint16_t targetPort = 0;
+ uint32_t listenAddress = 0;
uint16_t listenPort = 0;
TestContext testCtx = {0, 0};
listenPort = strtoul(argv[1], NULL, 10);
--argc; ++argv;
}
+ else if(strcmp("-d", argv[0]) == 0 && argc > 1)
+ {
+ listenAddress = UDPC_strtoa(argv[1]);
+ --argc; ++argv;
+ }
else if(strcmp("-h", argv[0]) == 0 || strcmp("--help", argv[0]) == 0)
{
printUsage();
UDPC_Context *ctx;
if(isThreaded == 0)
{
- ctx = UDPC_init(listenPort, isClient);
+ ctx = UDPC_init(listenPort, listenAddress, isClient);
}
else
{
- ctx = UDPC_init_threaded_update(listenPort, isClient);
+ ctx = UDPC_init_threaded_update(listenPort, listenAddress, isClient);
}
printf("isClient: %s, targetAddr: %s, targetPort: %u, listenPort: %u\n",