You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/09/12 21:17:30 UTC

incubator-mynewt-core git commit: mn_socket; add mn_inet_ntop().

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop d56270d97 -> 77ddfe7fc


mn_socket; add mn_inet_ntop().


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/77ddfe7f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/77ddfe7f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/77ddfe7f

Branch: refs/heads/develop
Commit: 77ddfe7fc1550ab6e7a25b9394d16528504742a6
Parents: d56270d
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Mon Sep 12 14:13:46 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Mon Sep 12 14:13:46 2016 -0700

----------------------------------------------------------------------
 sys/mn_socket/include/mn_socket/mn_socket.h | 11 +++++++++
 sys/mn_socket/src/mn_socket_aconv.c         | 20 +++++++++++++++
 sys/mn_socket/src/test/mn_sock_test.c       | 31 ++++++++++++++++++++++++
 3 files changed, 62 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/77ddfe7f/sys/mn_socket/include/mn_socket/mn_socket.h
----------------------------------------------------------------------
diff --git a/sys/mn_socket/include/mn_socket/mn_socket.h b/sys/mn_socket/include/mn_socket/mn_socket.h
index 6b457be..a852dcb 100644
--- a/sys/mn_socket/include/mn_socket/mn_socket.h
+++ b/sys/mn_socket/include/mn_socket/mn_socket.h
@@ -50,6 +50,16 @@
 #define MN_EAGAIN               10
 #define MN_EUNKNOWN             11
 
+/*
+ * Multicast macros
+ */
+#define MN_IN_MULTICAST(a)                                              \
+    (((a) & 0xf0000000) == 0xe0000000)
+
+/* XXXX notyet */
+#define MN_IN6_IS_ADDR_MULTICAST(a)                                     \
+    0
+
 struct mn_socket;
 struct mn_socket_ops;
 struct mn_sock_cb;
@@ -142,5 +152,6 @@ int mn_close(struct mn_socket *);
  * Address conversion
  */
 int mn_inet_pton(int af, const char *src, void *dst);
+const char *mn_inet_ntop(int af, const void *src, void *dst, int len);
 
 #endif /* __SYS_MN_SOCKET_H_ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/77ddfe7f/sys/mn_socket/src/mn_socket_aconv.c
----------------------------------------------------------------------
diff --git a/sys/mn_socket/src/mn_socket_aconv.c b/sys/mn_socket/src/mn_socket_aconv.c
index 5053eac..23c500b 100644
--- a/sys/mn_socket/src/mn_socket_aconv.c
+++ b/sys/mn_socket/src/mn_socket_aconv.c
@@ -17,6 +17,7 @@
  * under the License.
  */
 #include <ctype.h>
+#include <stdio.h>
 #include <os/queue.h>
 #include "mn_socket/mn_socket.h"
 
@@ -55,3 +56,22 @@ mn_inet_pton(int af, const char *src, void *dst)
         return MN_EAFNOSUPPORT;
     }
 }
+
+const char *
+mn_inet_ntop(int af, const void *src_v, void *dst, int len)
+{
+    const unsigned char *src = src_v;
+    int rc;
+
+    if (af == MN_PF_INET) {
+        rc = snprintf(dst, len, "%u.%u.%u.%u",
+          src[0], src[1], src[2], src[3]);
+        if (rc >= len) {
+            return NULL;
+        } else {
+            return dst;
+        }
+    } else {
+        return NULL;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/77ddfe7f/sys/mn_socket/src/test/mn_sock_test.c
----------------------------------------------------------------------
diff --git a/sys/mn_socket/src/test/mn_sock_test.c b/sys/mn_socket/src/test/mn_sock_test.c
index a8d9cc2..d49fab0 100644
--- a/sys/mn_socket/src/test/mn_sock_test.c
+++ b/sys/mn_socket/src/test/mn_sock_test.c
@@ -61,9 +61,40 @@ TEST_CASE(inet_pton_test)
     }
 }
 
+TEST_CASE(inet_ntop_test)
+{
+    const char *rstr;
+    char addr[48];
+    struct test_vec {
+        char *str;
+        uint8_t cmp[4];
+    };
+    struct test_vec ok_vec[] = {
+        { "1.1.1.1", { 1, 1, 1, 1 } },
+        { "1.2.3.4", { 1, 2, 3, 4 } },
+        { "255.1.255.255", { 255, 1, 255, 255 } },
+        { "1.2.5.6", { 1, 2, 5, 6 } }
+    };
+    int i;
+
+    for (i = 0; i < sizeof(ok_vec) / sizeof(ok_vec[0]); i++) {
+        memset(addr, 0xa5, sizeof(addr));
+        rstr = mn_inet_ntop(MN_PF_INET, ok_vec[i].cmp, addr, sizeof(addr));
+        TEST_ASSERT(rstr);
+        TEST_ASSERT(!strcmp(ok_vec[i].str, addr));
+    }
+    rstr = mn_inet_ntop(MN_PF_INET, ok_vec[0].cmp, addr, 1);
+    TEST_ASSERT(rstr == NULL);
+
+    /* does not have space to null terminate */
+    rstr = mn_inet_ntop(MN_PF_INET, ok_vec[0].cmp, addr, 7);
+    TEST_ASSERT(rstr == NULL);
+}
+
 TEST_SUITE(mn_socket_test_all)
 {
     inet_pton_test();
+    inet_ntop_test();
 }
 
 #ifdef MYNEWT_SELFTEST