Skip to content

Commit

Permalink
Merge pull request #8954 from jepler/ssl-anything
Browse files Browse the repository at this point in the history
ssl: work on anything implementing the socket protocol
  • Loading branch information
jepler authored Apr 25, 2024
2 parents 463fc17 + a93cbb2 commit c92bb9b
Show file tree
Hide file tree
Showing 17 changed files with 292 additions and 137 deletions.
3 changes: 3 additions & 0 deletions ports/espressif/boards/espressif_esp32_eye/mpconfigboard.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ CIRCUITPY_CREATION_ID = 0x00320001

IDF_TARGET = esp32

CIRCUITPY_MESSAGE_COMPRESSION_LEVEL = 9

CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
Expand All @@ -17,3 +19,4 @@ CIRCUITPY_PIXELBUF = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_TOUCHIO = 0
CIRCUITPY_KEYPAD = 0
2 changes: 2 additions & 0 deletions ports/espressif/boards/mixgo_ce_serial/mpconfigboard.mk
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB

CIRCUITPY_AESIO = 0
CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_CANIO = 0
CIRCUITPY_CODEOP = 0
CIRCUITPY_ESPCAMERA = 0

Expand Down
4 changes: 4 additions & 0 deletions ports/espressif/common-hal/socketpool/Socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,10 @@ void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t *self, uint
self->timeout_ms = timeout_ms;
}

mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self) {
return self->type;
}


int common_hal_socketpool_socket_setsockopt(socketpool_socket_obj_t *self, int level, int optname, const void *value, size_t optlen) {
int err = lwip_setsockopt(self->num, level, optname, value, optlen);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"

CIRCUITPY__EVE = 1
CIRCUITPY_SSL = 1
19 changes: 19 additions & 0 deletions ports/raspberrypi/boards/wiznet_w5500_evb_pico/pins.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,25 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },

{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },

{ MP_ROM_QSTR(MP_QSTR_W5500_CS), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },

{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },

{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },

{ MP_ROM_QSTR(MP_QSTR_W5500_RST), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },

{ MP_ROM_QSTR(MP_QSTR_W5500_INT), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },

{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },

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

{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },

{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
Expand All @@ -50,5 +65,9 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {

{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO29) },

{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
4 changes: 4 additions & 0 deletions ports/raspberrypi/common-hal/socketpool/Socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -1183,6 +1183,10 @@ void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t *self, uint
self->timeout = timeout_ms;
}

mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self) {
return self->type;
}

int common_hal_socketpool_socket_setsockopt(socketpool_socket_obj_t *self, int level, int optname, const void *value, size_t optlen) {
int zero = 0;
bool enable = optlen == sizeof(&zero) && memcmp(value, &zero, optlen);
Expand Down
20 changes: 17 additions & 3 deletions shared-bindings/socketpool/Socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

#include "py/mperrno.h"
#include "py/objlist.h"
#include "py/objproperty.h"
#include "py/objtuple.h"
#include "py/runtime.h"
#include "py/stream.h"
Expand Down Expand Up @@ -383,7 +384,6 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socketpool_socket_setsockopt_obj, 4,
//| :param ~int value: timeout in seconds. 0 means non-blocking. None means block indefinitely.
//| """
//| ...
//|
STATIC mp_obj_t socketpool_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
socketpool_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_uint_t timeout_ms;
Expand All @@ -401,24 +401,38 @@ STATIC mp_obj_t socketpool_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_settimeout_obj, socketpool_socket_settimeout);

//| type: int
//| """Read-only access to the socket type"""
//|
STATIC mp_obj_t socketpool_socket_obj_get_type(mp_obj_t self_in) {
socketpool_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(common_hal_socketpool_socket_get_type(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(socketpool_socket_get_type_obj, socketpool_socket_obj_get_type);

MP_PROPERTY_GETTER(socketpool_socket_type_obj,
(mp_obj_t)&socketpool_socket_get_type_obj);

STATIC const mp_rom_map_elem_t socketpool_socket_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&socketpool_socket___exit___obj) },
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&socketpool_socket_close_obj) },


{ MP_ROM_QSTR(MP_QSTR_accept), MP_ROM_PTR(&socketpool_socket_accept_obj) },
{ MP_ROM_QSTR(MP_QSTR_bind), MP_ROM_PTR(&socketpool_socket_bind_obj) },
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&socketpool_socket_close_obj) },
{ MP_ROM_QSTR(MP_QSTR_connect), MP_ROM_PTR(&socketpool_socket_connect_obj) },
{ MP_ROM_QSTR(MP_QSTR_listen), MP_ROM_PTR(&socketpool_socket_listen_obj) },
{ MP_ROM_QSTR(MP_QSTR_recvfrom_into), MP_ROM_PTR(&socketpool_socket_recvfrom_into_obj) },
{ MP_ROM_QSTR(MP_QSTR_recv_into), MP_ROM_PTR(&socketpool_socket_recv_into_obj) },
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&socketpool_socket_send_obj) },
{ MP_ROM_QSTR(MP_QSTR_sendall), MP_ROM_PTR(&socketpool_socket_sendall_obj) },
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&socketpool_socket_send_obj) },
{ MP_ROM_QSTR(MP_QSTR_sendto), MP_ROM_PTR(&socketpool_socket_sendto_obj) },
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socketpool_socket_setblocking_obj) },
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socketpool_socket_setsockopt_obj) },
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&socketpool_socket_settimeout_obj) },
{ MP_ROM_QSTR(MP_QSTR_type), MP_ROM_PTR(&socketpool_socket_type_obj) },
};

STATIC MP_DEFINE_CONST_DICT(socketpool_socket_locals_dict, socketpool_socket_locals_dict_table);
Expand Down Expand Up @@ -472,7 +486,7 @@ STATIC const mp_stream_p_t socket_stream_p = {
MP_DEFINE_CONST_OBJ_TYPE(
socketpool_socket_type,
MP_QSTR_Socket,
MP_TYPE_FLAG_NONE,
MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
locals_dict, &socketpool_socket_locals_dict,
protocol, &socket_stream_p
);
1 change: 1 addition & 0 deletions shared-bindings/socketpool/Socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *self, const c
bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t *self);
bool common_hal_socketpool_socket_get_connected(socketpool_socket_obj_t *self);
mp_uint_t common_hal_socketpool_socket_get_timeout(socketpool_socket_obj_t *self);
mp_int_t common_hal_socketpool_socket_get_type(socketpool_socket_obj_t *self);
bool common_hal_socketpool_socket_listen(socketpool_socket_obj_t *self, int backlog);
mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t *self,
uint8_t *buf, uint32_t len, uint8_t *ip, uint32_t *port);
Expand Down
42 changes: 2 additions & 40 deletions shared-bindings/socketpool/SocketPool.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,50 +29,12 @@

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

#include "shared-bindings/socketpool/__init__.h"
#include "shared-bindings/socketpool/enum.h"
#include "shared-bindings/socketpool/Socket.h"

extern const mp_obj_type_t socketpool_socketpool_type;

typedef enum {
SOCKETPOOL_SOCK_STREAM = 1,
SOCKETPOOL_SOCK_DGRAM = 2,
SOCKETPOOL_SOCK_RAW = 3
} socketpool_socketpool_sock_t;

typedef enum {
SOCKETPOOL_AF_INET = 2,
SOCKETPOOL_AF_INET6 = 10
} socketpool_socketpool_addressfamily_t;

typedef enum {
SOCKETPOOL_IPPROTO_IP = 0,
SOCKETPOOL_IPPROTO_ICMP = 1,
SOCKETPOOL_IPPROTO_TCP = 6,
SOCKETPOOL_IPPROTO_UDP = 17,
SOCKETPOOL_IPPROTO_IPV6 = 41,
SOCKETPOOL_IPPROTO_RAW = 255,
} socketpool_socketpool_ipproto_t;

typedef enum {
SOCKETPOOL_TCP_NODELAY = 1,
} socketpool_socketpool_tcpopt_t;

typedef enum {
SOCKETPOOL_SOL_SOCKET = 0xfff,
} socketpool_socketpool_optlevel_t;

typedef enum {
SOCKETPOOL_SO_REUSEADDR = 0x0004,
} socketpool_socketpool_socketopt_t;

typedef enum {
SOCKETPOOL_IP_MULTICAST_TTL = 5,
} socketpool_socketpool_ipopt_t;

typedef enum {
SOCKETPOOL_EAI_NONAME = -2,
} socketpool_eai_t;

void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *self, mp_obj_t radio);

socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,
Expand Down
70 changes: 70 additions & 0 deletions shared-bindings/socketpool/enum.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#pragma once

// Note: This file must be designed so it be included by ssl
// whether or not CIRCUITPY_SOCKETPOOL is set.
//
typedef enum {
SOCKETPOOL_SOCK_STREAM = 1,
SOCKETPOOL_SOCK_DGRAM = 2,
SOCKETPOOL_SOCK_RAW = 3
} socketpool_socketpool_sock_t;

typedef enum {
SOCKETPOOL_AF_INET = 2,
SOCKETPOOL_AF_INET6 = 10
} socketpool_socketpool_addressfamily_t;

typedef enum {
SOCKETPOOL_IPPROTO_IP = 0,
SOCKETPOOL_IPPROTO_ICMP = 1,
SOCKETPOOL_IPPROTO_TCP = 6,
SOCKETPOOL_IPPROTO_UDP = 17,
SOCKETPOOL_IPPROTO_IPV6 = 41,
SOCKETPOOL_IPPROTO_RAW = 255,
} socketpool_socketpool_ipproto_t;

typedef enum {
SOCKETPOOL_TCP_NODELAY = 1,
} socketpool_socketpool_tcpopt_t;

typedef enum {
SOCKETPOOL_SOL_SOCKET = 0xfff,
} socketpool_socketpool_optlevel_t;

typedef enum {
SOCKETPOOL_SO_REUSEADDR = 0x0004,
} socketpool_socketpool_socketopt_t;

typedef enum {
SOCKETPOOL_IP_MULTICAST_TTL = 5,
} socketpool_socketpool_ipopt_t;

typedef enum {
SOCKETPOOL_EAI_NONAME = -2,
} socketpool_eai_t;
4 changes: 2 additions & 2 deletions shared-bindings/ssl/SSLContext.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,9 +200,9 @@ STATIC mp_obj_t ssl_sslcontext_wrap_socket(size_t n_args, const mp_obj_t *pos_ar
mp_raise_ValueError(MP_ERROR_TEXT("Server side context cannot have hostname"));
}

socketpool_socket_obj_t *sock = args[ARG_sock].u_obj;
mp_obj_t sock_obj = args[ARG_sock].u_obj;

return common_hal_ssl_sslcontext_wrap_socket(self, sock, server_side, server_hostname);
return common_hal_ssl_sslcontext_wrap_socket(self, sock_obj, server_side, server_hostname);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(ssl_sslcontext_wrap_socket_obj, 1, ssl_sslcontext_wrap_socket);

Expand Down
3 changes: 1 addition & 2 deletions shared-bindings/ssl/SSLContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,14 @@
#include "common-hal/ssl/SSLContext.h"
#endif

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

extern const mp_obj_type_t ssl_sslcontext_type;

void common_hal_ssl_sslcontext_construct(ssl_sslcontext_obj_t *self);

ssl_sslsocket_obj_t *common_hal_ssl_sslcontext_wrap_socket(ssl_sslcontext_obj_t *self,
socketpool_socket_obj_t *sock, bool server_side, const char *server_hostname);
mp_obj_t socket, bool server_side, const char *server_hostname);

void common_hal_ssl_sslcontext_load_verify_locations(ssl_sslcontext_obj_t *self,
const char *cadata);
Expand Down
Loading

0 comments on commit c92bb9b

Please sign in to comment.