Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop b71c9eaaa -> 69b5ce5a1


native sockets; supports running on linux..


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/69b5ce5a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/69b5ce5a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/69b5ce5a

Branch: refs/heads/develop
Commit: 69b5ce5a1e08652d2b8e0e925e6ee700162a758c
Parents: 8ab7073
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Sep 16 15:21:37 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Fri Sep 16 15:23:01 2016 -0700

----------------------------------------------------------------------
 sys/mn_socket/src/arch/sim/native_sock.c | 30 ++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/69b5ce5a/sys/mn_socket/src/arch/sim/native_sock.c
----------------------------------------------------------------------
diff --git a/sys/mn_socket/src/arch/sim/native_sock.c 
b/sys/mn_socket/src/arch/sim/native_sock.c
index 64127f5..819120c 100644
--- a/sys/mn_socket/src/arch/sim/native_sock.c
+++ b/sys/mn_socket/src/arch/sim/native_sock.c
@@ -179,7 +179,8 @@ native_sock_err_to_mn_err(int err)
 }
 
 static int
-native_sock_mn_addr_to_addr(struct mn_sockaddr *ms, struct sockaddr *sa)
+native_sock_mn_addr_to_addr(struct mn_sockaddr *ms, struct sockaddr *sa,
+  int *sa_len)
 {
     struct sockaddr_in *sin = (struct sockaddr_in *)sa;
     struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
@@ -189,17 +190,23 @@ native_sock_mn_addr_to_addr(struct mn_sockaddr *ms, 
struct sockaddr *sa)
     switch (ms->msa_family) {
     case MN_AF_INET:
         sin->sin_family = AF_INET;
+#ifndef MN_LINUX
         sin->sin_len = sizeof(*sin);
+#endif
         sin->sin_addr.s_addr = msin->msin_addr.s_addr;
         sin->sin_port = msin->msin_port;
+        *sa_len = sizeof(*sin);
         break;
     case MN_AF_INET6:
         sin6->sin6_family = AF_INET6;
+#ifndef MN_LINUX
         sin6->sin6_len = sizeof(*sin6);
+#endif
         sin6->sin6_port = msin6->msin6_port;
         sin6->sin6_flowinfo = msin6->msin6_flowinfo;
         memcpy(&sin6->sin6_addr, &msin6->msin6_addr, 
sizeof(msin6->msin6_addr));
         sin6->sin6_scope_id = msin6->msin6_scope_id;
+        *sa_len = sizeof(*sin6);
         break;
     default:
         return MN_EPROTONOSUPPORT;
@@ -208,7 +215,7 @@ native_sock_mn_addr_to_addr(struct mn_sockaddr *ms, struct 
sockaddr *sa)
 }
 
 static int
-native_sock_addr_to_mn_addr( struct sockaddr *sa, struct mn_sockaddr *ms)
+native_sock_addr_to_mn_addr(struct sockaddr *sa, struct mn_sockaddr *ms)
 {
     struct mn_sockaddr_in *msin = (struct mn_sockaddr_in *)ms;
     struct mn_sockaddr_in6 *msin6 = (struct mn_sockaddr_in6 *)ms;
@@ -319,13 +326,14 @@ native_sock_connect(struct mn_socket *s, struct 
mn_sockaddr *addr)
     struct sockaddr_storage ss;
     struct sockaddr *sa = (struct sockaddr *)&ss;
     int rc;
+    int sa_len;
 
-    rc = native_sock_mn_addr_to_addr(addr, sa);
+    rc = native_sock_mn_addr_to_addr(addr, sa, &sa_len);
     if (rc) {
         return rc;
     }
     os_mutex_pend(&nss->mtx, OS_WAIT_FOREVER);
-    if (connect(ns->ns_fd, sa, sa->sa_len)) {
+    if (connect(ns->ns_fd, sa, sa_len)) {
         rc = errno;
         os_mutex_release(&nss->mtx);
         return native_sock_err_to_mn_err(rc);
@@ -345,9 +353,10 @@ native_sock_bind(struct mn_socket *s, struct mn_sockaddr 
*addr)
     struct sockaddr_storage ss;
     struct sockaddr *sa = (struct sockaddr *)&ss;
     int rc;
+    int sa_len;
     int val = 1;
 
-    rc = native_sock_mn_addr_to_addr(addr, sa);
+    rc = native_sock_mn_addr_to_addr(addr, sa, &sa_len);
     if (rc) {
         return rc;
     }
@@ -364,7 +373,7 @@ native_sock_bind(struct mn_socket *s, struct mn_sockaddr 
*addr)
     if (rc) {
         goto err;
     }
-    if (bind(ns->ns_fd, sa, sa->sa_len)) {
+    if (bind(ns->ns_fd, sa, sa_len)) {
         goto err;
     }
     if (ns->ns_type == SOCK_DGRAM) {
@@ -455,11 +464,12 @@ native_sock_sendto(struct mn_socket *s, struct os_mbuf *m,
     struct sockaddr *sa = (struct sockaddr *)&ss;
     uint8_t tmpbuf[NATIVE_SOCK_MAX_UDP];
     struct os_mbuf *o;
+    int sa_len;
     int off;
     int rc;
 
     if (ns->ns_type == SOCK_DGRAM) {
-        rc = native_sock_mn_addr_to_addr(addr, sa);
+        rc = native_sock_mn_addr_to_addr(addr, sa, &sa_len);
         if (rc) {
             return rc;
         }
@@ -471,7 +481,7 @@ native_sock_sendto(struct mn_socket *s, struct os_mbuf *m,
             os_mbuf_copydata(o, 0, o->om_len, &tmpbuf[off]);
             off += o->om_len;
         }
-        rc = sendto(ns->ns_fd, tmpbuf, off, 0, sa, sa->sa_len);
+        rc = sendto(ns->ns_fd, tmpbuf, off, 0, sa, sa_len);
         if (rc != off) {
             return native_sock_err_to_mn_err(errno);
         }
@@ -559,13 +569,17 @@ native_sock_setsockopt(struct mn_socket *s, uint8_t 
level, uint8_t name,
             greq.gr_interface = mreq->mm_idx;
             if (mreq->mm_family == MN_AF_INET) {
                 sin = (struct sockaddr_in *)&greq.gr_group;
+#ifndef MN_LINUX
                 sin->sin_len = sizeof(*sin);
+#endif
                 sin->sin_family = AF_INET;
                 memcpy(&sin->sin_addr, &mreq->mm_addr, sizeof(struct in_addr));
                 level = IPPROTO_IP;
             } else {
                 sin6 = (struct sockaddr_in6 *)&greq.gr_group;
+#ifndef MN_LINUX
                 sin6->sin6_len = sizeof(*sin6);
+#endif
                 sin6->sin6_family = AF_INET6;
                 memcpy(&sin6->sin6_addr, &mreq->mm_addr,
                   sizeof(struct in6_addr));

Reply via email to