diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-01-01 02:36:30 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-03-09 09:12:32 +0700 |
commit | c7fb87caff7dc07009a910ad82f336171c95b4f4 (patch) | |
tree | 84e7fa5de1d4281c6f2d2ac9007de366f47cc5e0 /extmod/modlwip.c | |
parent | f7be80398e8f38c9695d2ebabcb2e19e80e60f0f (diff) | |
download | micropython-c7fb87caff7dc07009a910ad82f336171c95b4f4.tar.gz micropython-c7fb87caff7dc07009a910ad82f336171c95b4f4.zip |
extmod/modlwip: Add stream protocol read method.
Diffstat (limited to 'extmod/modlwip.c')
-rw-r--r-- | extmod/modlwip.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c index 21a500740f..ea3f80985e 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -878,6 +878,19 @@ STATIC mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(lwip_socket_setsockopt_obj, 4, 4, lwip_socket_setsockopt); +STATIC mp_uint_t lwip_socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *errcode) { + lwip_socket_obj_t *socket = self_in; + + switch (socket->type) { + case MOD_NETWORK_SOCK_STREAM: + return lwip_tcp_receive(socket, buf, size, errcode); + case MOD_NETWORK_SOCK_DGRAM: + return lwip_udp_receive(socket, buf, size, NULL, NULL, errcode); + } + // Unreachable + return MP_STREAM_ERROR; +} + STATIC const mp_map_elem_t lwip_socket_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&lwip_socket_close_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&lwip_socket_close_obj }, @@ -894,11 +907,17 @@ STATIC const mp_map_elem_t lwip_socket_locals_dict_table[] = { }; STATIC MP_DEFINE_CONST_DICT(lwip_socket_locals_dict, lwip_socket_locals_dict_table); +STATIC const mp_stream_p_t lwip_socket_stream_p = { + .read = lwip_socket_read, + //.write = lwip_socket_write, +}; + STATIC const mp_obj_type_t lwip_socket_type = { { &mp_type_type }, .name = MP_QSTR_socket, .print = lwip_socket_print, .make_new = lwip_socket_make_new, + .stream_p = &lwip_socket_stream_p, .locals_dict = (mp_obj_t)&lwip_socket_locals_dict, }; |