summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2020-08-25 16:15:45 -0700
committerScott Shawcroft <scott@tannewt.org>2020-08-25 16:15:45 -0700
commit380cbfba55e45f9f0d8ccae6c28c23b1ea93147f (patch)
treed20cc56a04f3d415c56f54875b7093cf0151cf92
parentf3bc712539ec13e73fe2b809ee274df57dca5f46 (diff)
Add hash to Socket so it can be used in dicts
-rw-r--r--ports/esp32s2/common-hal/socketpool/Socket.c21
-rw-r--r--ports/esp32s2/common-hal/socketpool/SocketPool.c1
-rw-r--r--ports/esp32s2/common-hal/wifi/Radio.c5
-rw-r--r--shared-bindings/socketpool/Socket.c18
-rw-r--r--shared-bindings/socketpool/Socket.h1
5 files changed, 26 insertions, 20 deletions
diff --git a/ports/esp32s2/common-hal/socketpool/Socket.c b/ports/esp32s2/common-hal/socketpool/Socket.c
index 003ba2443..654ea42d5 100644
--- a/ports/esp32s2/common-hal/socketpool/Socket.c
+++ b/ports/esp32s2/common-hal/socketpool/Socket.c
@@ -32,9 +32,6 @@
#include "py/runtime.h"
#include "supervisor/shared/tick.h"
-#include "esp_log.h"
-static const char* TAG = "socket";
-
void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t* self, mp_uint_t timeout_ms) {
self->timeout_ms = timeout_ms;
}
@@ -49,7 +46,6 @@ bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self, const c
tls_config = &self->ssl_context->ssl_config;
}
int result = esp_tls_conn_new_sync(host, hostlen, port, tls_config, self->tcp);
- ESP_EARLY_LOGW(TAG, "connect result %d", result);
self->connected = result >= 0;
if (result < 0) {
int esp_tls_code;
@@ -58,8 +54,11 @@ bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self, const c
if (err == ESP_ERR_MBEDTLS_SSL_SETUP_FAILED) {
mp_raise_espidf_MemoryError();
+ } else if (ESP_ERR_MBEDTLS_SSL_HANDSHAKE_FAILED) {
+ // What should this error be?
+ mp_raise_OSError_msg_varg(translate("Failed SSL handshake"));
} else {
- mp_raise_OSError_msg_varg(translate("Unhandled ESP TLS error %d %d %x"), esp_tls_code, flags, err);
+ mp_raise_OSError_msg_varg(translate("Unhandled ESP TLS error %d %d %x %d"), esp_tls_code, flags, err, result);
}
}
@@ -99,37 +98,31 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
// and between encrypted TLS blocks.
int status = lwip_ioctl(sockfd, FIONREAD, &available);
if (status < 0) {
- // ESP_EARLY_LOGW(TAG, "ioctl fail. socket %d status %d errno %d available %d", sockfd, status, errno, available);
last_read = status;
break;
}
}
- // ESP_EARLY_LOGW(TAG, "available %d", available);
size_t remaining = len - received;
if (available > remaining) {
available = remaining;
}
if (available > 0) {
last_read = esp_tls_conn_read(self->tcp, (void*) buf + received, available);
- // ESP_EARLY_LOGW(TAG, "read %d out of %d", last_read, available);
received += last_read;
}
}
if (last_read == 0) {
// socket closed
- ESP_EARLY_LOGW(TAG, "receive close %d %d", received, len);
common_hal_socketpool_socket_close(self);
}
if (last_read < 0) {
- // ESP_EARLY_LOGI(TAG, "received %d", received);
mp_raise_BrokenPipeError();
}
return received;
}
void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) {
- // ESP_EARLY_LOGW(TAG, "close");
if (self->connected) {
self->connected = false;
}
@@ -144,6 +137,10 @@ void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) {
}
bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t* self) {
- // ESP_EARLY_LOGW(TAG, "tcp %p", self->tcp);
return self->tcp == NULL;
}
+
+
+mp_uint_t common_hal_socketpool_socket_get_hash(socketpool_socket_obj_t* self) {
+ return self->num;
+}
diff --git a/ports/esp32s2/common-hal/socketpool/SocketPool.c b/ports/esp32s2/common-hal/socketpool/SocketPool.c
index 2af5bf722..dbc9c9192 100644
--- a/ports/esp32s2/common-hal/socketpool/SocketPool.c
+++ b/ports/esp32s2/common-hal/socketpool/SocketPool.c
@@ -33,7 +33,6 @@
#include "bindings/espidf/__init__.h"
-
void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t* self, mp_obj_t radio) {
if (radio != MP_OBJ_FROM_PTR(&common_hal_wifi_radio_obj)) {
mp_raise_ValueError(translate("SocketPool can only be used with wifi.radio."));
diff --git a/ports/esp32s2/common-hal/wifi/Radio.c b/ports/esp32s2/common-hal/wifi/Radio.c
index 038ce9e75..ae3fa2f17 100644
--- a/ports/esp32s2/common-hal/wifi/Radio.c
+++ b/ports/esp32s2/common-hal/wifi/Radio.c
@@ -38,9 +38,6 @@
#include "esp-idf/components/esp_wifi/include/esp_wifi.h"
#include "esp-idf/components/lwip/include/apps/ping/ping_sock.h"
-#include "esp_log.h"
-static const char* TAG = "radio";
-
static void start_station(wifi_radio_obj_t *self) {
if (self->sta_mode) {
return;
@@ -170,8 +167,6 @@ mp_int_t common_hal_wifi_radio_ping(wifi_radio_obj_t *self, mp_obj_t ip_address,
uint32_t elapsed_time = 0xffffffff;
if (received > 0) {
esp_ping_get_profile(ping, ESP_PING_PROF_TIMEGAP, &elapsed_time, sizeof(elapsed_time));
- } else {
- ESP_EARLY_LOGW(TAG, "received none - time %d timeout %d", total_time_ms, timeout_ms);
}
esp_ping_delete_session(ping);
diff --git a/shared-bindings/socketpool/Socket.c b/shared-bindings/socketpool/Socket.c
index 932e8e856..250e9c874 100644
--- a/shared-bindings/socketpool/Socket.c
+++ b/shared-bindings/socketpool/Socket.c
@@ -267,8 +267,7 @@ STATIC mp_obj_t socketpool_socket_recv_into(size_t n_args, const mp_obj_t *args)
}
if (len == 0) {
- ESP_EARLY_LOGW(TAG, "len 0");
- mp_raise_OSError(0);
+ return MP_OBJ_NEW_SMALL_INT(0);
}
mp_int_t ret = common_hal_socketpool_socket_recv_into(self, (byte*)bufinfo.buf, len);
@@ -426,6 +425,20 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_settimeout_obj, socketpool_so
// }
// STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_setblocking_obj, socketpool_socket_setblocking);
+//| def __hash__(self) -> int:
+//| """Returns a hash for the Socket."""
+//| ...
+//|
+STATIC mp_obj_t socketpool_socket_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
+ switch (op) {
+ case MP_UNARY_OP_HASH: {
+ return MP_OBJ_NEW_SMALL_INT(common_hal_socketpool_socket_get_hash(MP_OBJ_TO_PTR(self_in)));
+ }
+ default:
+ return MP_OBJ_NULL; // op not supported
+ }
+}
+
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) },
@@ -451,4 +464,5 @@ const mp_obj_type_t socketpool_socket_type = {
{ &mp_type_type },
.name = MP_QSTR_Socket,
.locals_dict = (mp_obj_dict_t*)&socketpool_socket_locals_dict,
+ .unary_op = socketpool_socket_unary_op,
};
diff --git a/shared-bindings/socketpool/Socket.h b/shared-bindings/socketpool/Socket.h
index 4597aed38..f0be95c92 100644
--- a/shared-bindings/socketpool/Socket.h
+++ b/shared-bindings/socketpool/Socket.h
@@ -38,5 +38,6 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self);
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_hash(socketpool_socket_obj_t* self);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_SOCKETPOOL_SOCKET_H