1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-02 08:01:50 +00:00

Compare commits

..

8 Commits

Author SHA1 Message Date
Otto Winter
f3ec4b514d Merge pull request #2461 from esphome/bump-2021.9.3
2021.9.3
2021-10-08 10:37:52 +02:00
Otto winter
fc5798fa71 Bump version to 2021.9.3 2021-10-07 22:05:30 +02:00
Otto Winter
95d7ad543f API encryption switch to libsodium backend (#2456) 2021-10-07 22:05:26 +02:00
Jesse Hills
d9b2903d78 Add log line to show if API encryption is being used (#2450) 2021-10-07 22:04:55 +02:00
dependabot[bot]
32a664eedc Bump aioesphomeapi from 9.1.2 to 9.1.4 (#2443) 2021-10-07 22:04:16 +02:00
dependabot[bot]
e7477890cf Bump aioesphomeapi from 9.1.1 to 9.1.2 (#2426)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-07 22:03:52 +02:00
Otto Winter
9bf72ff05f Re-enable TCP nodelay for ESP32 (#2390) 2021-10-07 22:03:05 +02:00
Stefan Agner
46b4c970d1 Fix socket abstraction for ESP-IDF v4 (#2434) 2021-10-03 22:21:45 +02:00
8 changed files with 45 additions and 16 deletions

View File

@@ -121,7 +121,7 @@ async def to_code(config):
decoded = base64.b64decode(conf[CONF_KEY])
cg.add(var.set_noise_psk(list(decoded)))
cg.add_define("USE_API_NOISE")
cg.add_library("esphome/noise-c", "0.1.1")
cg.add_library("esphome/noise-c", "0.1.3")
else:
cg.add_define("USE_API_PLAINTEXT")

View File

@@ -126,6 +126,14 @@ APIError APINoiseFrameHelper::init() {
return APIError::TCP_NONBLOCKING_FAILED;
}
int enable = 1;
err = socket_->setsockopt(IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int));
if (err != 0) {
state_ = State::FAILED;
HELPER_LOG("Setting nodelay failed with errno %d", errno);
return APIError::TCP_NODELAY_FAILED;
}
// init prologue
prologue_.insert(prologue_.end(), PROLOGUE_INIT, PROLOGUE_INIT + strlen(PROLOGUE_INIT));
@@ -721,6 +729,13 @@ APIError APIPlaintextFrameHelper::init() {
HELPER_LOG("Setting nonblocking failed with errno %d", errno);
return APIError::TCP_NONBLOCKING_FAILED;
}
int enable = 1;
err = socket_->setsockopt(IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int));
if (err != 0) {
state_ = State::FAILED;
HELPER_LOG("Setting nodelay failed with errno %d", errno);
return APIError::TCP_NODELAY_FAILED;
}
state_ = State::DATA;
return APIError::OK;

View File

@@ -134,6 +134,11 @@ void APIServer::loop() {
void APIServer::dump_config() {
ESP_LOGCONFIG(TAG, "API Server:");
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
#ifdef USE_API_NOISE
ESP_LOGCONFIG(TAG, " Using noise encryption: YES");
#else
ESP_LOGCONFIG(TAG, " Using noise encryption: NO");
#endif
}
bool APIServer::uses_password() const { return !this->password_.empty(); }
bool APIServer::check_password(const std::string &password) const {

View File

@@ -96,6 +96,9 @@ class BSDSocketImpl : public Socket {
break;
}
return ret;
#elif defined(ARDUINO_ARCH_ESP32)
// ESP-IDF v4 only has symbol lwip_readv
return ::lwip_readv(fd_, iov, iovcnt);
#else
return ::readv(fd_, iov, iovcnt);
#endif
@@ -120,6 +123,9 @@ class BSDSocketImpl : public Socket {
break;
}
return ret;
#elif defined(ARDUINO_ARCH_ESP32)
// ESP-IDF v4 only has symbol lwip_writev
return ::lwip_writev(fd_, iov, iovcnt);
#else
return ::writev(fd_, iov, iovcnt);
#endif

View File

@@ -256,7 +256,7 @@ class LWIPRawImpl : public Socket {
errno = EINVAL;
return -1;
}
*reinterpret_cast<int *>(optval) = tcp_nagle_disabled(pcb_);
*reinterpret_cast<int *>(optval) = nodelay_;
*optlen = 4;
return 0;
}
@@ -285,11 +285,7 @@ class LWIPRawImpl : public Socket {
return -1;
}
int val = *reinterpret_cast<const int *>(optval);
if (val != 0) {
tcp_nagle_disable(pcb_);
} else {
tcp_nagle_enable(pcb_);
}
nodelay_ = val;
return 0;
}
@@ -443,9 +439,11 @@ class LWIPRawImpl : public Socket {
if (written == 0)
// no need to output if nothing written
return 0;
int err = internal_output();
if (err == -1)
return -1;
if (nodelay_) {
int err = internal_output();
if (err == -1)
return -1;
}
return written;
}
ssize_t writev(const struct iovec *iov, int iovcnt) override {
@@ -465,9 +463,11 @@ class LWIPRawImpl : public Socket {
if (written == 0)
// no need to output if nothing written
return 0;
int err = internal_output();
if (err == -1)
return -1;
if (nodelay_) {
int err = internal_output();
if (err == -1)
return -1;
}
return written;
}
int setblocking(bool blocking) override {
@@ -549,6 +549,9 @@ class LWIPRawImpl : public Socket {
bool rx_closed_ = false;
pbuf *rx_buf_ = nullptr;
size_t rx_buf_offset_ = 0;
// don't use lwip nodelay flag, it sometimes causes reconnect
// instead use it for determining whether to call lwip_output
bool nodelay_ = false;
};
std::unique_ptr<Socket> socket(int domain, int type, int protocol) {

View File

@@ -1,6 +1,6 @@
"""Constants used by esphome."""
__version__ = "2021.9.2"
__version__ = "2021.9.3"
ESP_PLATFORM_ESP32 = "ESP32"
ESP_PLATFORM_ESP8266 = "ESP8266"

View File

@@ -36,7 +36,7 @@ lib_deps =
6306@1.0.3 ; HM3301
glmnet/Dsmr@0.3 ; used by dsmr
rweather/Crypto@0.2.0 ; used by dsmr
esphome/noise-c@0.1.1 ; used by api
esphome/noise-c@0.1.3 ; used by api
dudanov/MideaUART@1.1.8 ; used by midea
build_flags =

View File

@@ -10,4 +10,4 @@ platformio==5.2.0
esptool==3.1
click==7.1.2
esphome-dashboard==20210908.0
aioesphomeapi==9.1.1
aioesphomeapi==9.1.4