Skip to content

Commit c92bb9b

Browse files
authored
Merge pull request #8954 from jepler/ssl-anything
ssl: work on anything implementing the socket protocol
2 parents 463fc17 + a93cbb2 commit c92bb9b

File tree

17 files changed

+292
-137
lines changed

17 files changed

+292
-137
lines changed

ports/espressif/boards/espressif_esp32_eye/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ CIRCUITPY_CREATION_ID = 0x00320001
33

44
IDF_TARGET = esp32
55

6+
CIRCUITPY_MESSAGE_COMPRESSION_LEVEL = 9
7+
68
CIRCUITPY_ESP_FLASH_SIZE = 4MB
79
CIRCUITPY_ESP_FLASH_MODE = qio
810
CIRCUITPY_ESP_FLASH_FREQ = 80m
@@ -17,3 +19,4 @@ CIRCUITPY_PIXELBUF = 0
1719
CIRCUITPY_PS2IO = 0
1820
CIRCUITPY_ROTARYIO = 0
1921
CIRCUITPY_TOUCHIO = 0
22+
CIRCUITPY_KEYPAD = 0

ports/espressif/boards/mixgo_ce_serial/mpconfigboard.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
1010
CIRCUITPY_ESP_FLASH_SIZE = 4MB
1111

1212
CIRCUITPY_AESIO = 0
13+
CIRCUITPY_AUDIOBUSIO = 0
14+
CIRCUITPY_CANIO = 0
1315
CIRCUITPY_CODEOP = 0
1416
CIRCUITPY_ESPCAMERA = 0
1517

ports/espressif/common-hal/socketpool/Socket.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,10 @@ void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t *self, uint
602602
self->timeout_ms = timeout_ms;
603603
}
604604

605+
mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self) {
606+
return self->type;
607+
}
608+
605609

606610
int common_hal_socketpool_socket_setsockopt(socketpool_socket_obj_t *self, int level, int optname, const void *value, size_t optlen) {
607611
int err = lwip_setsockopt(self->num, level, optname, value, optlen);

ports/raspberrypi/boards/wiznet_w5500_evb_pico/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ CHIP_FAMILY = rp2
99
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
1010

1111
CIRCUITPY__EVE = 1
12+
CIRCUITPY_SSL = 1

ports/raspberrypi/boards/wiznet_w5500_evb_pico/pins.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,25 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
1919
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
2020
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
2121
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },
22+
23+
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO16) },
2224
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
25+
26+
{ MP_ROM_QSTR(MP_QSTR_W5500_CS), MP_ROM_PTR(&pin_GPIO17) },
2327
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
28+
29+
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO18) },
2430
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
31+
32+
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO19) },
2533
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
34+
35+
{ MP_ROM_QSTR(MP_QSTR_W5500_RST), MP_ROM_PTR(&pin_GPIO20) },
2636
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
37+
38+
{ MP_ROM_QSTR(MP_QSTR_W5500_INT), MP_ROM_PTR(&pin_GPIO21) },
2739
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
40+
2841
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
2942

3043
{ MP_ROM_QSTR(MP_QSTR_SMPS_MODE), MP_ROM_PTR(&pin_GPIO23) },
@@ -36,10 +49,12 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
3649
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO25) },
3750
{ MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25) },
3851

52+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO26) },
3953
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
4054
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
4155
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
4256

57+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO27) },
4358
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
4459
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
4560
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
@@ -50,5 +65,9 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
5065

5166
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
5267
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO29) },
68+
69+
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
70+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
71+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
5372
};
5473
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

ports/raspberrypi/common-hal/socketpool/Socket.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,10 @@ void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t *self, uint
11831183
self->timeout = timeout_ms;
11841184
}
11851185

1186+
mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self) {
1187+
return self->type;
1188+
}
1189+
11861190
int common_hal_socketpool_socket_setsockopt(socketpool_socket_obj_t *self, int level, int optname, const void *value, size_t optlen) {
11871191
int zero = 0;
11881192
bool enable = optlen == sizeof(&zero) && memcmp(value, &zero, optlen);

shared-bindings/socketpool/Socket.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
#include "py/mperrno.h"
3434
#include "py/objlist.h"
35+
#include "py/objproperty.h"
3536
#include "py/objtuple.h"
3637
#include "py/runtime.h"
3738
#include "py/stream.h"
@@ -383,7 +384,6 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socketpool_socket_setsockopt_obj, 4,
383384
//| :param ~int value: timeout in seconds. 0 means non-blocking. None means block indefinitely.
384385
//| """
385386
//| ...
386-
//|
387387
STATIC mp_obj_t socketpool_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
388388
socketpool_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
389389
mp_uint_t timeout_ms;
@@ -401,24 +401,38 @@ STATIC mp_obj_t socketpool_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_
401401
}
402402
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_settimeout_obj, socketpool_socket_settimeout);
403403

404+
//| type: int
405+
//| """Read-only access to the socket type"""
406+
//|
407+
STATIC mp_obj_t socketpool_socket_obj_get_type(mp_obj_t self_in) {
408+
socketpool_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
409+
return MP_OBJ_NEW_SMALL_INT(common_hal_socketpool_socket_get_type(self));
410+
}
411+
MP_DEFINE_CONST_FUN_OBJ_1(socketpool_socket_get_type_obj, socketpool_socket_obj_get_type);
412+
413+
MP_PROPERTY_GETTER(socketpool_socket_type_obj,
414+
(mp_obj_t)&socketpool_socket_get_type_obj);
415+
404416
STATIC const mp_rom_map_elem_t socketpool_socket_locals_dict_table[] = {
405417
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
406418
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&socketpool_socket___exit___obj) },
407419
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&socketpool_socket_close_obj) },
408420

421+
409422
{ MP_ROM_QSTR(MP_QSTR_accept), MP_ROM_PTR(&socketpool_socket_accept_obj) },
410423
{ MP_ROM_QSTR(MP_QSTR_bind), MP_ROM_PTR(&socketpool_socket_bind_obj) },
411424
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&socketpool_socket_close_obj) },
412425
{ MP_ROM_QSTR(MP_QSTR_connect), MP_ROM_PTR(&socketpool_socket_connect_obj) },
413426
{ MP_ROM_QSTR(MP_QSTR_listen), MP_ROM_PTR(&socketpool_socket_listen_obj) },
414427
{ MP_ROM_QSTR(MP_QSTR_recvfrom_into), MP_ROM_PTR(&socketpool_socket_recvfrom_into_obj) },
415428
{ MP_ROM_QSTR(MP_QSTR_recv_into), MP_ROM_PTR(&socketpool_socket_recv_into_obj) },
416-
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&socketpool_socket_send_obj) },
417429
{ MP_ROM_QSTR(MP_QSTR_sendall), MP_ROM_PTR(&socketpool_socket_sendall_obj) },
430+
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&socketpool_socket_send_obj) },
418431
{ MP_ROM_QSTR(MP_QSTR_sendto), MP_ROM_PTR(&socketpool_socket_sendto_obj) },
419432
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socketpool_socket_setblocking_obj) },
420433
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socketpool_socket_setsockopt_obj) },
421434
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&socketpool_socket_settimeout_obj) },
435+
{ MP_ROM_QSTR(MP_QSTR_type), MP_ROM_PTR(&socketpool_socket_type_obj) },
422436
};
423437

424438
STATIC MP_DEFINE_CONST_DICT(socketpool_socket_locals_dict, socketpool_socket_locals_dict_table);
@@ -472,7 +486,7 @@ STATIC const mp_stream_p_t socket_stream_p = {
472486
MP_DEFINE_CONST_OBJ_TYPE(
473487
socketpool_socket_type,
474488
MP_QSTR_Socket,
475-
MP_TYPE_FLAG_NONE,
489+
MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
476490
locals_dict, &socketpool_socket_locals_dict,
477491
protocol, &socket_stream_p
478492
);

shared-bindings/socketpool/Socket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *self, const c
3838
bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t *self);
3939
bool common_hal_socketpool_socket_get_connected(socketpool_socket_obj_t *self);
4040
mp_uint_t common_hal_socketpool_socket_get_timeout(socketpool_socket_obj_t *self);
41+
mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self);
4142
bool common_hal_socketpool_socket_listen(socketpool_socket_obj_t *self, int backlog);
4243
mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t *self,
4344
uint8_t *buf, uint32_t len, uint8_t *ip, uint32_t *port);

shared-bindings/socketpool/SocketPool.h

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -29,50 +29,12 @@
2929

3030
#include "common-hal/socketpool/SocketPool.h"
3131

32+
#include "shared-bindings/socketpool/__init__.h"
33+
#include "shared-bindings/socketpool/enum.h"
3234
#include "shared-bindings/socketpool/Socket.h"
3335

3436
extern const mp_obj_type_t socketpool_socketpool_type;
3537

36-
typedef enum {
37-
SOCKETPOOL_SOCK_STREAM = 1,
38-
SOCKETPOOL_SOCK_DGRAM = 2,
39-
SOCKETPOOL_SOCK_RAW = 3
40-
} socketpool_socketpool_sock_t;
41-
42-
typedef enum {
43-
SOCKETPOOL_AF_INET = 2,
44-
SOCKETPOOL_AF_INET6 = 10
45-
} socketpool_socketpool_addressfamily_t;
46-
47-
typedef enum {
48-
SOCKETPOOL_IPPROTO_IP = 0,
49-
SOCKETPOOL_IPPROTO_ICMP = 1,
50-
SOCKETPOOL_IPPROTO_TCP = 6,
51-
SOCKETPOOL_IPPROTO_UDP = 17,
52-
SOCKETPOOL_IPPROTO_IPV6 = 41,
53-
SOCKETPOOL_IPPROTO_RAW = 255,
54-
} socketpool_socketpool_ipproto_t;
55-
56-
typedef enum {
57-
SOCKETPOOL_TCP_NODELAY = 1,
58-
} socketpool_socketpool_tcpopt_t;
59-
60-
typedef enum {
61-
SOCKETPOOL_SOL_SOCKET = 0xfff,
62-
} socketpool_socketpool_optlevel_t;
63-
64-
typedef enum {
65-
SOCKETPOOL_SO_REUSEADDR = 0x0004,
66-
} socketpool_socketpool_socketopt_t;
67-
68-
typedef enum {
69-
SOCKETPOOL_IP_MULTICAST_TTL = 5,
70-
} socketpool_socketpool_ipopt_t;
71-
72-
typedef enum {
73-
SOCKETPOOL_EAI_NONAME = -2,
74-
} socketpool_eai_t;
75-
7638
void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *self, mp_obj_t radio);
7739

7840
socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,

shared-bindings/socketpool/enum.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* This file is part of the MicroPython project, http://micropython.org/
3+
*
4+
* The MIT License (MIT)
5+
*
6+
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
7+
*
8+
* Permission is hereby granted, free of charge, to any person obtaining a copy
9+
* of this software and associated documentation files (the "Software"), to deal
10+
* in the Software without restriction, including without limitation the rights
11+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12+
* copies of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be included in
16+
* all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24+
* THE SOFTWARE.
25+
*/
26+
27+
#pragma once
28+
29+
// Note: This file must be designed so it be included by ssl
30+
// whether or not CIRCUITPY_SOCKETPOOL is set.
31+
//
32+
typedef enum {
33+
SOCKETPOOL_SOCK_STREAM = 1,
34+
SOCKETPOOL_SOCK_DGRAM = 2,
35+
SOCKETPOOL_SOCK_RAW = 3
36+
} socketpool_socketpool_sock_t;
37+
38+
typedef enum {
39+
SOCKETPOOL_AF_INET = 2,
40+
SOCKETPOOL_AF_INET6 = 10
41+
} socketpool_socketpool_addressfamily_t;
42+
43+
typedef enum {
44+
SOCKETPOOL_IPPROTO_IP = 0,
45+
SOCKETPOOL_IPPROTO_ICMP = 1,
46+
SOCKETPOOL_IPPROTO_TCP = 6,
47+
SOCKETPOOL_IPPROTO_UDP = 17,
48+
SOCKETPOOL_IPPROTO_IPV6 = 41,
49+
SOCKETPOOL_IPPROTO_RAW = 255,
50+
} socketpool_socketpool_ipproto_t;
51+
52+
typedef enum {
53+
SOCKETPOOL_TCP_NODELAY = 1,
54+
} socketpool_socketpool_tcpopt_t;
55+
56+
typedef enum {
57+
SOCKETPOOL_SOL_SOCKET = 0xfff,
58+
} socketpool_socketpool_optlevel_t;
59+
60+
typedef enum {
61+
SOCKETPOOL_SO_REUSEADDR = 0x0004,
62+
} socketpool_socketpool_socketopt_t;
63+
64+
typedef enum {
65+
SOCKETPOOL_IP_MULTICAST_TTL = 5,
66+
} socketpool_socketpool_ipopt_t;
67+
68+
typedef enum {
69+
SOCKETPOOL_EAI_NONAME = -2,
70+
} socketpool_eai_t;

shared-bindings/ssl/SSLContext.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,9 @@ STATIC mp_obj_t ssl_sslcontext_wrap_socket(size_t n_args, const mp_obj_t *pos_ar
200200
mp_raise_ValueError(MP_ERROR_TEXT("Server side context cannot have hostname"));
201201
}
202202

203-
socketpool_socket_obj_t *sock = args[ARG_sock].u_obj;
203+
mp_obj_t sock_obj = args[ARG_sock].u_obj;
204204

205-
return common_hal_ssl_sslcontext_wrap_socket(self, sock, server_side, server_hostname);
205+
return common_hal_ssl_sslcontext_wrap_socket(self, sock_obj, server_side, server_hostname);
206206
}
207207
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(ssl_sslcontext_wrap_socket_obj, 1, ssl_sslcontext_wrap_socket);
208208

shared-bindings/ssl/SSLContext.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@
3333
#include "common-hal/ssl/SSLContext.h"
3434
#endif
3535

36-
#include "shared-bindings/socketpool/Socket.h"
3736
#include "shared-bindings/ssl/SSLSocket.h"
3837

3938
extern const mp_obj_type_t ssl_sslcontext_type;
4039

4140
void common_hal_ssl_sslcontext_construct(ssl_sslcontext_obj_t *self);
4241

4342
ssl_sslsocket_obj_t *common_hal_ssl_sslcontext_wrap_socket(ssl_sslcontext_obj_t *self,
44-
socketpool_socket_obj_t *sock, bool server_side, const char *server_hostname);
43+
mp_obj_t socket, bool server_side, const char *server_hostname);
4544

4645
void common_hal_ssl_sslcontext_load_verify_locations(ssl_sslcontext_obj_t *self,
4746
const char *cadata);

0 commit comments

Comments
 (0)