Skip to content

Commit e5f0579

Browse files
committed
SSLSocket: implement setsockopt (untested)
1 parent 14a1972 commit e5f0579

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

shared-bindings/ssl/SSLSocket.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,22 @@ STATIC mp_obj_t ssl_sslsocket_send(mp_obj_t self_in, mp_obj_t buf_in) {
200200
}
201201
STATIC MP_DEFINE_CONST_FUN_OBJ_2(ssl_sslsocket_send_obj, ssl_sslsocket_send);
202202

203-
// //| def setsockopt(self, level: int, optname: int, value: int) -> None:
203+
// //| def setsockopt(self, level: int, optname: int, value: int | ReadableBuffer) -> None:
204204
// //| """Sets socket options"""
205205
// //| ...
206206
// //|
207-
// STATIC mp_obj_t ssl_sslsocket_setsockopt(size_t n_args, const mp_obj_t *args) {
208-
// }
209-
// STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ssl_sslsocket_setsockopt_obj, 4, 4, ssl_sslsocket_setsockopt);
207+
STATIC mp_obj_t ssl_sslsocket_setsockopt(size_t n_args, const mp_obj_t *args) {
208+
ssl_sslsocket_obj_t *self = MP_OBJ_TO_PTR(args[0]);
209+
mp_obj_t level = args[1];
210+
mp_obj_t optname = args[2];
211+
mp_obj_t optval = args[3];
212+
213+
// throws on error
214+
common_hal_ssl_sslsocket_setsockopt(self, level, optname, optval);
215+
216+
return mp_const_none;
217+
}
218+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ssl_sslsocket_setsockopt_obj, 4, 4, ssl_sslsocket_setsockopt);
210219

211220
//| def settimeout(self, value: int) -> None:
212221
//| """Set the timeout value for this socket.
@@ -252,7 +261,7 @@ STATIC const mp_rom_map_elem_t ssl_sslsocket_locals_dict_table[] = {
252261
{ MP_ROM_QSTR(MP_QSTR_recv_into), MP_ROM_PTR(&ssl_sslsocket_recv_into_obj) },
253262
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&ssl_sslsocket_send_obj) },
254263
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&ssl_sslsocket_setblocking_obj) },
255-
// { MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&ssl_sslsocket_setsockopt_obj) },
264+
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&ssl_sslsocket_setsockopt_obj) },
256265
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&ssl_sslsocket_settimeout_obj) },
257266
};
258267

shared-bindings/ssl/SSLSocket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ void common_hal_ssl_sslsocket_listen(ssl_sslsocket_obj_t *self, int backlog);
4444
mp_uint_t common_hal_ssl_sslsocket_recv_into(ssl_sslsocket_obj_t *self, uint8_t *buf, uint32_t len);
4545
mp_uint_t common_hal_ssl_sslsocket_send(ssl_sslsocket_obj_t *self, const uint8_t *buf, uint32_t len);
4646
void common_hal_ssl_sslsocket_settimeout(ssl_sslsocket_obj_t *self, mp_obj_t timeout_obj);
47+
void common_hal_ssl_sslsocket_setsockopt(ssl_sslsocket_obj_t *self, mp_obj_t level, mp_obj_t optname, mp_obj_t optval);

shared-module/ssl/SSLSocket.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ static void ssl_socket_close(ssl_sslsocket_obj_t *self) {
158158
mp_call_method_n_kw(0, 0, self->close_args);
159159
}
160160

161+
static void ssl_socket_setsockopt(ssl_sslsocket_obj_t *self, mp_obj_t level_obj, mp_obj_t opt_obj, mp_obj_t optval_obj) {
162+
self->setsockopt_args[2] = level_obj;
163+
self->setsockopt_args[3] = opt_obj;
164+
self->setsockopt_args[4] = optval_obj;
165+
mp_call_method_n_kw(3, 0, self->setsockopt_args);
166+
}
167+
161168
static void ssl_socket_settimeout(ssl_sslsocket_obj_t *self, mp_obj_t timeout_obj) {
162169
self->settimeout_args[2] = timeout_obj;
163170
mp_call_method_n_kw(1, 0, self->settimeout_args);
@@ -233,6 +240,7 @@ ssl_sslsocket_obj_t *common_hal_ssl_sslcontext_wrap_socket(ssl_sslcontext_obj_t
233240
mp_load_method(socket, MP_QSTR_recv_into, o->recv_into_args);
234241
mp_load_method(socket, MP_QSTR_send, o->send_args);
235242
mp_load_method(socket, MP_QSTR_settimeout, o->settimeout_args);
243+
mp_load_method(socket, MP_QSTR_setsockopt, o->setsockopt_args);
236244

237245
mbedtls_ssl_init(&o->ssl);
238246
mbedtls_ssl_config_init(&o->conf);
@@ -441,6 +449,10 @@ mp_obj_t common_hal_ssl_sslsocket_accept(ssl_sslsocket_obj_t *self) {
441449
return mp_obj_new_tuple(2, tuple_contents);
442450
}
443451

452+
void common_hal_ssl_sslsocket_setsockopt(ssl_sslsocket_obj_t *self, mp_obj_t level_obj, mp_obj_t optname_obj, mp_obj_t optval_obj) {
453+
ssl_socket_setsockopt(self, level_obj, optname_obj, optval_obj);
454+
}
455+
444456
void common_hal_ssl_sslsocket_settimeout(ssl_sslsocket_obj_t *self, mp_obj_t timeout_obj) {
445457
ssl_socket_settimeout(self, timeout_obj);
446458
}

shared-module/ssl/SSLSocket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,6 @@ typedef struct ssl_sslsocket_obj {
5757
mp_obj_t listen_args[3];
5858
mp_obj_t recv_into_args[3];
5959
mp_obj_t send_args[3];
60+
mp_obj_t setsockopt_args[5];
6061
mp_obj_t settimeout_args[3];
6162
} ssl_sslsocket_obj_t;

0 commit comments

Comments
 (0)