|
28 | 28 | #include "mesh_system.h" // from inside mbed-mesh-api
|
29 | 29 | #include "socket_api.h"
|
30 | 30 | #include "net_interface.h"
|
31 |
| -#include "ip6string.h" |
32 | 31 | // Uncomment to enable trace
|
33 | 32 | //#define HAVE_DEBUG
|
34 | 33 | #include "ns_trace.h"
|
@@ -126,16 +125,13 @@ static void convert_mbed_addr_to_ns(ns_address_t *ns_addr,
|
126 | 125 | {
|
127 | 126 | ns_addr->type = ADDRESS_IPV6;
|
128 | 127 | ns_addr->identifier = s_addr->get_port();
|
129 |
| - const char *str = s_addr->get_ip_address(); |
130 |
| - stoip6(str, strlen(str), ns_addr->address); |
| 128 | + memcpy(ns_addr->address, s_addr->get_ip_bytes(), 16); |
131 | 129 | }
|
132 | 130 |
|
133 | 131 | static void convert_ns_addr_to_mbed(SocketAddress *s_addr, const ns_address_t *ns_addr)
|
134 | 132 | {
|
135 |
| - char str[40]; |
136 |
| - ip6tos(ns_addr->address, str); |
137 | 133 | s_addr->set_port(ns_addr->identifier);
|
138 |
| - s_addr->set_ip_address(str); |
| 134 | + s_addr->set_ip_bytes(ns_addr->address, NSAPI_IPv6); |
139 | 135 | }
|
140 | 136 |
|
141 | 137 | void* NanostackSocket::operator new(std::size_t sz) {
|
@@ -716,6 +712,10 @@ int NanostackInterface::socket_sendto(void *handle, const SocketAddress &address
|
716 | 712 | return NSAPI_ERROR_NO_SOCKET;
|
717 | 713 | }
|
718 | 714 |
|
| 715 | + if (address.get_ip_version() != NSAPI_IPv6) { |
| 716 | + return NSAPI_ERROR_UNSUPPORTED; |
| 717 | + } |
| 718 | + |
719 | 719 | nanostack_lock();
|
720 | 720 |
|
721 | 721 | int ret;
|
@@ -805,12 +805,23 @@ int NanostackInterface::socket_bind(void *handle, const SocketAddress &address)
|
805 | 805 | return NSAPI_ERROR_NO_SOCKET;
|
806 | 806 | }
|
807 | 807 |
|
| 808 | + const void *addr_field; |
| 809 | + switch (address.get_ip_version()) { |
| 810 | + case NSAPI_IPv6: |
| 811 | + addr_field = address.get_ip_bytes(); |
| 812 | + break; |
| 813 | + case NSAPI_UNSPEC: |
| 814 | + addr_field = &ns_in6addr_any; |
| 815 | + break; |
| 816 | + default: |
| 817 | + return NSAPI_ERROR_UNSUPPORTED; |
| 818 | + } |
808 | 819 |
|
809 | 820 | nanostack_lock();
|
810 | 821 |
|
811 | 822 | ns_address_t ns_address;
|
812 | 823 | ns_address.type = ADDRESS_IPV6;
|
813 |
| - memset(ns_address.address, 0, sizeof ns_address.address); |
| 824 | + memcpy(ns_address.address, addr_field, sizeof ns_address.address); |
814 | 825 | ns_address.identifier = address.get_port();
|
815 | 826 | int ret = NSAPI_ERROR_DEVICE_ERROR;
|
816 | 827 | if (0 == ::socket_bind(socket->socket_id, &ns_address)) {
|
@@ -849,6 +860,10 @@ int NanostackInterface::socket_connect(void *handle, const SocketAddress &addr)
|
849 | 860 | return NSAPI_ERROR_NO_SOCKET;
|
850 | 861 | }
|
851 | 862 |
|
| 863 | + if (addr.get_ip_version() != NSAPI_IPv6) { |
| 864 | + return NSAPI_ERROR_UNSUPPORTED; |
| 865 | + } |
| 866 | + |
852 | 867 | nanostack_lock();
|
853 | 868 |
|
854 | 869 | int ret;
|
|
0 commit comments