summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDave Hylands <dhylands@gmail.com>2016-01-10 21:37:59 -0800
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-11 12:08:07 +0200
commit11b97d7ec5f6ae715de1c1a77597413fccd8edab (patch)
tree8ac0e746f91d6b76c257cb6e5d11487c4a41b889
parent5b3f0b7f39bd67cc9182993c288f09f67a0890df (diff)
downloadmicropython-11b97d7ec5f6ae715de1c1a77597413fccd8edab.tar.gz
micropython-11b97d7ec5f6ae715de1c1a77597413fccd8edab.zip
unix: Add socket.inet_ntop function
-rw-r--r--unix/modsocket.c15
-rw-r--r--unix/qstrdefsport.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/unix/modsocket.c b/unix/modsocket.c
index 8af229cde4..dd535d2bce 100644
--- a/unix/modsocket.c
+++ b/unix/modsocket.c
@@ -421,6 +421,20 @@ STATIC mp_obj_t mod_socket_inet_pton(mp_obj_t family_in, mp_obj_t addr_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_socket_inet_pton_obj, mod_socket_inet_pton);
+STATIC mp_obj_t mod_socket_inet_ntop(mp_obj_t family_in, mp_obj_t binaddr_in) {
+ int family = mp_obj_get_int(family_in);
+ mp_buffer_info_t bufinfo;
+ mp_get_buffer_raise(binaddr_in, &bufinfo, MP_BUFFER_READ);
+ vstr_t vstr;
+ vstr_init_len(&vstr, family == AF_INET ? INET_ADDRSTRLEN : INET6_ADDRSTRLEN);
+ if (inet_ntop(family, bufinfo.buf, vstr.buf, vstr.len) == NULL) {
+ nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno)));
+ }
+ vstr.len = strlen(vstr.buf);
+ return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_socket_inet_ntop_obj, mod_socket_inet_ntop);
+
STATIC mp_obj_t mod_socket_getaddrinfo(size_t n_args, const mp_obj_t *args) {
// TODO: Implement all args
assert(n_args >= 2 && n_args <= 4);
@@ -522,6 +536,7 @@ STATIC const mp_rom_map_elem_t mp_module_socket_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_socket), MP_ROM_PTR(&usocket_type) },
{ MP_ROM_QSTR(MP_QSTR_getaddrinfo), MP_ROM_PTR(&mod_socket_getaddrinfo_obj) },
{ MP_ROM_QSTR(MP_QSTR_inet_pton), MP_ROM_PTR(&mod_socket_inet_pton_obj) },
+ { MP_ROM_QSTR(MP_QSTR_inet_ntop), MP_ROM_PTR(&mod_socket_inet_ntop_obj) },
{ MP_ROM_QSTR(MP_QSTR_sockaddr), MP_ROM_PTR(&mod_socket_sockaddr_obj) },
#if MICROPY_SOCKET_EXTRA
{ MP_ROM_QSTR(MP_QSTR_htons), MP_ROM_PTR(&mod_socket_htons_obj) },
diff --git a/unix/qstrdefsport.h b/unix/qstrdefsport.h
index 167a2be28f..60a39c39f1 100644
--- a/unix/qstrdefsport.h
+++ b/unix/qstrdefsport.h
@@ -88,6 +88,7 @@ Q(socket)
Q(sockaddr)
Q(htons)
Q(inet_pton)
+Q(inet_ntop)
Q(gethostbyname)
Q(getaddrinfo)
Q(usocket)