]> git.seodisparate.com - UDPConnection/commitdiff
Change UDPConnection to set listen address
authorStephen Seo <seo.disparate@gmail.com>
Wed, 6 Mar 2019 10:53:15 +0000 (19:53 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 6 Mar 2019 10:53:15 +0000 (19:53 +0900)
Add some documentation, fix NetworkTest with new change.

src/UDPConnection.c
src/UDPConnection.h
src/test/UDPC_NetworkTest.c

index f626001338a3f84f24e4eacac111b11c250d7d65..ad3966b05d049d9aba46bfdd75dc750b8eb2cdcc 100644 (file)
@@ -6,7 +6,7 @@
 #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;
@@ -44,8 +44,8 @@ UDPC_Context* UDPC_init(uint16_t listenPort, int isClient)
 
     // 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,
@@ -85,9 +85,9 @@ UDPC_Context* UDPC_init(uint16_t listenPort, int isClient)
     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)
index af5cdc2f1af05451dd9a7cdf487056c2b552c84a..5ebad773079dfd33775c33905df159c90e221f38 100644 (file)
@@ -137,9 +137,9 @@ typedef struct {
     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);
 
@@ -240,6 +240,10 @@ uint32_t UDPC_INTERNAL_generate_id(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
index d3b1819d20021041a77d1b629f695a71160a39d2..380e4725ce9b3f296892181b804908aa3d738914 100644 (file)
@@ -14,7 +14,8 @@ typedef struct
 
 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)
@@ -64,6 +65,7 @@ int main(int argc, char** argv)
     int isThreaded = 0;
     uint32_t targetAddress = 0;
     uint16_t targetPort = 0;
+    uint32_t listenAddress = 0;
     uint16_t listenPort = 0;
     TestContext testCtx = {0, 0};
 
@@ -100,6 +102,11 @@ int main(int argc, char** argv)
             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();
@@ -111,11 +118,11 @@ int main(int argc, char** argv)
     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",