mirror of
https://github.com/esphome/esphome.git
synced 2024-12-26 07:24:54 +01:00
commit
f3ec4b514d
7 changed files with 39 additions and 16 deletions
|
@ -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")
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
"""Constants used by esphome."""
|
||||
|
||||
__version__ = "2021.9.2"
|
||||
__version__ = "2021.9.3"
|
||||
|
||||
ESP_PLATFORM_ESP32 = "ESP32"
|
||||
ESP_PLATFORM_ESP8266 = "ESP8266"
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue