diff options
author | Josef Gajdusek <atx@atx.name> | 2015-05-03 20:26:08 +0200 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-05-04 11:48:40 +0100 |
commit | 04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c (patch) | |
tree | aafdf5cd87c2fc5004644ed46749d0a9f7134183 /cc3200 | |
parent | 47b9809d231c4359c56316130a76f13de2b907f7 (diff) | |
download | micropython-04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c.tar.gz micropython-04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c.zip |
lib: Move some common mod_network_* functions to lib/netutils.
Diffstat (limited to 'cc3200')
-rw-r--r-- | cc3200/application.mk | 2 | ||||
-rw-r--r-- | cc3200/mods/modnetwork.c | 57 | ||||
-rw-r--r-- | cc3200/mods/modnetwork.h | 5 | ||||
-rw-r--r-- | cc3200/mods/modusocket.c | 13 | ||||
-rw-r--r-- | cc3200/mods/modwlan.c | 17 |
5 files changed, 18 insertions, 76 deletions
diff --git a/cc3200/application.mk b/cc3200/application.mk index 48db12b2aa..f3ed40a72b 100644 --- a/cc3200/application.mk +++ b/cc3200/application.mk @@ -20,6 +20,7 @@ APP_INC += -I$(BUILD) APP_INC += -I$(BUILD)/genhdr APP_INC += -I../lib/fatfs APP_INC += -I../lib/mp-readline +APP_INC += -I../lib/netutils APP_INC += -I../stmhal APP_CPPDEFINES = -Dgcc -DTARGET_IS_CC3200 -DSL_FULL -DUSE_FREERTOS @@ -142,6 +143,7 @@ APP_LIB_SRC_C = $(addprefix lib/,\ fatfs/option/ccsbcs.c \ libc/string0.c \ mp-readline/readline.c \ + netutils/netutils.c \ ) APP_STM_SRC_C = $(addprefix stmhal/,\ diff --git a/cc3200/mods/modnetwork.c b/cc3200/mods/modnetwork.c index b63cb484dc..f9536ccb5e 100644 --- a/cc3200/mods/modnetwork.c +++ b/cc3200/mods/modnetwork.c @@ -114,60 +114,3 @@ const mp_obj_module_t mp_module_network = { .name = MP_QSTR_network, .globals = (mp_obj_dict_t*)&mp_module_network_globals, }; - -/******************************************************************************/ -// Miscellaneous helpers - -// Takes an address of the form '192.168.0.1' and converts it to integer -// in out_ip (little endian, so the 192 is the last byte). -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_uint_t addr_len; - const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len); - if (addr_len == 0) { - // special case of no address given - memset(out_ip, 0, MOD_NETWORK_IPV4ADDR_BUF_SIZE); - return; - } - const char *s = addr_str; - const char *s_top = addr_str + addr_len; - for (mp_uint_t i = 3 ; ; i--) { - mp_uint_t val = 0; - for (; s < s_top && *s != '.'; s++) { - val = val * 10 + *s - '0'; - } - out_ip[i] = val; - if (i == 0 && s == s_top) { - return; - } else if (i > 0 && s < s_top && *s == '.') { - s++; - } else { - nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments)); - } - } -} - -// Takes an address of the form ('192.168.0.1', 8080), returns the port and -// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes). -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_obj_t *addr_items; - mp_obj_get_array_fixed_n(addr_in, 2, &addr_items); - mod_network_parse_ipv4_addr(addr_items[0], out_ip); - return mp_obj_get_int(addr_items[1]); -} - -// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'. -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip) { - char ip_str[16]; - mp_uint_t ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[3], ip[2], ip[1], ip[0]); - return mp_obj_new_str(ip_str, ip_len, false); -} - -// Takes an array with a raw IP address, and a port, and returns a net-address -// tuple such as ('192.168.0.1', 8080). -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port) { - mp_obj_t tuple[2] = { - tuple[0] = mod_network_format_ipv4_addr(ip), - tuple[1] = mp_obj_new_int(port), - }; - return mp_obj_new_tuple(2, tuple); -} diff --git a/cc3200/mods/modnetwork.h b/cc3200/mods/modnetwork.h index a8f6facf41..1b7811c93f 100644 --- a/cc3200/mods/modnetwork.h +++ b/cc3200/mods/modnetwork.h @@ -77,9 +77,4 @@ void mod_network_init0(void); void mod_network_register_nic(mp_obj_t nic); mp_obj_t mod_network_find_nic(void); -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip); -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port); - #endif // MODNETWORK_H_ diff --git a/cc3200/mods/modusocket.c b/cc3200/mods/modusocket.c index d3e596b03b..f74f2673dd 100644 --- a/cc3200/mods/modusocket.c +++ b/cc3200/mods/modusocket.c @@ -32,6 +32,7 @@ #include "py/mpstate.h" #include MICROPY_HAL_H #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "mpexception.h" @@ -99,7 +100,7 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to bind the socket int _errno; @@ -155,7 +156,7 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) { // make the return value mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL); client->items[0] = socket2; - client->items[1] = mod_network_format_inet_addr(ip, port); + client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_LITTLE); return client; } @@ -167,7 +168,7 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to connect the socket int _errno; @@ -231,7 +232,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_ // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to sendto int _errno; @@ -268,7 +269,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) { vstr.buf[vstr.len] = '\0'; tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } - tuple[1] = mod_network_format_inet_addr(ip, port); + tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_LITTLE); return mp_obj_new_tuple(2, tuple); } STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recvfrom_obj, socket_recvfrom); @@ -399,7 +400,7 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) { tuple->items[1] = MP_OBJ_NEW_SMALL_INT(SOCK_STREAM); tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0); tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_); - tuple->items[4] = mod_network_format_inet_addr(out_ip, port); + tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_LITTLE); return mp_obj_new_list(1, (mp_obj_t*)&tuple); } } diff --git a/cc3200/mods/modwlan.c b/cc3200/mods/modwlan.c index f5935bf825..e2fbdf5031 100644 --- a/cc3200/mods/modwlan.c +++ b/cc3200/mods/modwlan.c @@ -34,6 +34,7 @@ #include "py/obj.h" #include "py/objstr.h" #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "modwlan.h" #include "pybioctl.h" @@ -836,10 +837,10 @@ STATIC mp_obj_t wlan_ifconfig (mp_obj_t self_in) { ifconfig[1] = mp_obj_new_str((const char *)wlan_obj.ssid, strlen((const char *)wlan_obj.ssid), false); ifconfig[2] = mp_obj_new_bytes((const byte *)wlan_obj.bssid, SL_BSSID_LENGTH); ifconfig[3] = mp_obj_new_bytes((const byte *)wlan_obj.mac, SL_BSSID_LENGTH); - ifconfig[4] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.ip); - ifconfig[5] = mod_network_format_ipv4_addr((uint8_t *)&ipV4.ipV4Mask); - ifconfig[6] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.gateway); - ifconfig[7] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.dns); + ifconfig[4] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.ip, NETUTILS_LITTLE); + ifconfig[5] = netutils_format_ipv4_addr((uint8_t *)&ipV4.ipV4Mask, NETUTILS_LITTLE); + ifconfig[6] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.gateway, NETUTILS_LITTLE); + ifconfig[7] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.dns, NETUTILS_LITTLE); return mp_obj_new_attrtuple(wlan_ifconfig_fields, 8, ifconfig); } @@ -992,10 +993,10 @@ STATIC mp_obj_t wlan_config_ip (mp_uint_t n_args, const mp_obj_t *pos_args, mp_m } SlNetCfgIpV4Args_t ipV4; - mod_network_parse_ipv4_addr(args[1].u_obj, (uint8_t *)&ipV4.ipV4); - mod_network_parse_ipv4_addr(args[2].u_obj, (uint8_t *)&ipV4.ipV4Mask); - mod_network_parse_ipv4_addr(args[3].u_obj, (uint8_t *)&ipV4.ipV4Gateway); - mod_network_parse_ipv4_addr(args[4].u_obj, (uint8_t *)&ipV4.ipV4DnsServer); + netutils_parse_ipv4_addr(args[1].u_obj, (uint8_t *)&ipV4.ipV4, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[2].u_obj, (uint8_t *)&ipV4.ipV4Mask, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[3].u_obj, (uint8_t *)&ipV4.ipV4Gateway, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[4].u_obj, (uint8_t *)&ipV4.ipV4DnsServer, NETUTILS_LITTLE); wlan_servers_stop(); |