mirror of
https://github.com/esphome/esphome.git
synced 2025-10-31 23:21:54 +00:00
cleaner
This commit is contained in:
@@ -79,14 +79,16 @@ APIConnection::APIConnection(std::unique_ptr<socket::Socket> sock, APIServer *pa
|
|||||||
#if defined(USE_API_PLAINTEXT) && defined(USE_API_NOISE)
|
#if defined(USE_API_PLAINTEXT) && defined(USE_API_NOISE)
|
||||||
auto noise_ctx = parent->get_noise_ctx();
|
auto noise_ctx = parent->get_noise_ctx();
|
||||||
if (noise_ctx->has_psk()) {
|
if (noise_ctx->has_psk()) {
|
||||||
this->helper_ = std::unique_ptr<APIFrameHelper>{new APINoiseFrameHelper(std::move(sock), noise_ctx)};
|
this->helper_ =
|
||||||
|
std::unique_ptr<APIFrameHelper>{new APINoiseFrameHelper(std::move(sock), noise_ctx, &this->client_info_)};
|
||||||
} else {
|
} else {
|
||||||
this->helper_ = std::unique_ptr<APIFrameHelper>{new APIPlaintextFrameHelper(std::move(sock))};
|
this->helper_ = std::unique_ptr<APIFrameHelper>{new APIPlaintextFrameHelper(std::move(sock), &this->client_info_)};
|
||||||
}
|
}
|
||||||
#elif defined(USE_API_PLAINTEXT)
|
#elif defined(USE_API_PLAINTEXT)
|
||||||
this->helper_ = std::unique_ptr<APIFrameHelper>{new APIPlaintextFrameHelper(std::move(sock))};
|
this->helper_ = std::unique_ptr<APIFrameHelper>{new APIPlaintextFrameHelper(std::move(sock), &this->client_info_)};
|
||||||
#elif defined(USE_API_NOISE)
|
#elif defined(USE_API_NOISE)
|
||||||
this->helper_ = std::unique_ptr<APIFrameHelper>{new APINoiseFrameHelper(std::move(sock), parent->get_noise_ctx())};
|
this->helper_ = std::unique_ptr<APIFrameHelper>{
|
||||||
|
new APINoiseFrameHelper(std::move(sock), parent->get_noise_ctx(), &this->client_info_)};
|
||||||
#else
|
#else
|
||||||
#error "No frame helper defined"
|
#error "No frame helper defined"
|
||||||
#endif
|
#endif
|
||||||
@@ -111,7 +113,6 @@ void APIConnection::start() {
|
|||||||
}
|
}
|
||||||
this->client_info_.peername = helper_->getpeername();
|
this->client_info_.peername = helper_->getpeername();
|
||||||
this->client_info_.name = this->client_info_.peername;
|
this->client_info_.name = this->client_info_.peername;
|
||||||
this->helper_->set_client_info(&this->client_info_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
APIConnection::~APIConnection() {
|
APIConnection::~APIConnection() {
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ const char *api_error_to_str(APIError err);
|
|||||||
class APIFrameHelper {
|
class APIFrameHelper {
|
||||||
public:
|
public:
|
||||||
APIFrameHelper() = default;
|
APIFrameHelper() = default;
|
||||||
explicit APIFrameHelper(std::unique_ptr<socket::Socket> socket) : socket_owned_(std::move(socket)) {
|
explicit APIFrameHelper(std::unique_ptr<socket::Socket> socket, const ClientInfo *client_info)
|
||||||
|
: socket_owned_(std::move(socket)), client_info_(client_info) {
|
||||||
socket_ = socket_owned_.get();
|
socket_ = socket_owned_.get();
|
||||||
}
|
}
|
||||||
virtual ~APIFrameHelper() = default;
|
virtual ~APIFrameHelper() = default;
|
||||||
@@ -97,8 +98,6 @@ class APIFrameHelper {
|
|||||||
}
|
}
|
||||||
return APIError::OK;
|
return APIError::OK;
|
||||||
}
|
}
|
||||||
// Set client info for logging
|
|
||||||
void set_client_info(const ClientInfo *client_info) { client_info_ = client_info; }
|
|
||||||
virtual APIError write_protobuf_packet(uint8_t type, ProtoWriteBuffer buffer) = 0;
|
virtual APIError write_protobuf_packet(uint8_t type, ProtoWriteBuffer buffer) = 0;
|
||||||
// Write multiple protobuf packets in a single operation
|
// Write multiple protobuf packets in a single operation
|
||||||
// packets contains (message_type, offset, length) for each message in the buffer
|
// packets contains (message_type, offset, length) for each message in the buffer
|
||||||
@@ -187,8 +186,9 @@ class APIFrameHelper {
|
|||||||
#ifdef USE_API_NOISE
|
#ifdef USE_API_NOISE
|
||||||
class APINoiseFrameHelper : public APIFrameHelper {
|
class APINoiseFrameHelper : public APIFrameHelper {
|
||||||
public:
|
public:
|
||||||
APINoiseFrameHelper(std::unique_ptr<socket::Socket> socket, std::shared_ptr<APINoiseContext> ctx)
|
APINoiseFrameHelper(std::unique_ptr<socket::Socket> socket, std::shared_ptr<APINoiseContext> ctx,
|
||||||
: APIFrameHelper(std::move(socket)), ctx_(std::move(ctx)) {
|
const ClientInfo *client_info)
|
||||||
|
: APIFrameHelper(std::move(socket), client_info), ctx_(std::move(ctx)) {
|
||||||
// Noise header structure:
|
// Noise header structure:
|
||||||
// Pos 0: indicator (0x01)
|
// Pos 0: indicator (0x01)
|
||||||
// Pos 1-2: encrypted payload size (16-bit big-endian)
|
// Pos 1-2: encrypted payload size (16-bit big-endian)
|
||||||
@@ -242,7 +242,8 @@ class APINoiseFrameHelper : public APIFrameHelper {
|
|||||||
#ifdef USE_API_PLAINTEXT
|
#ifdef USE_API_PLAINTEXT
|
||||||
class APIPlaintextFrameHelper : public APIFrameHelper {
|
class APIPlaintextFrameHelper : public APIFrameHelper {
|
||||||
public:
|
public:
|
||||||
APIPlaintextFrameHelper(std::unique_ptr<socket::Socket> socket) : APIFrameHelper(std::move(socket)) {
|
APIPlaintextFrameHelper(std::unique_ptr<socket::Socket> socket, const ClientInfo *client_info)
|
||||||
|
: APIFrameHelper(std::move(socket), client_info) {
|
||||||
// Plaintext header structure (worst case):
|
// Plaintext header structure (worst case):
|
||||||
// Pos 0: indicator (0x00)
|
// Pos 0: indicator (0x00)
|
||||||
// Pos 1-3: payload size varint (up to 3 bytes)
|
// Pos 1-3: payload size varint (up to 3 bytes)
|
||||||
|
|||||||
Reference in New Issue
Block a user