Skip to content

Commit 00c3def

Browse files
committed
[chip-tool] Add config_enable_https_requests flag to examples/chip-tool/BUILD.gn and replace gethostbyname by getaddrinfo
1 parent 0d27f42 commit 00c3def

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

examples/chip-tool/BUILD.gn

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ config("config") {
4747
defines += [ "CONFIG_USE_LOCAL_STORAGE" ]
4848
}
4949

50+
if (config_enable_https_requests) {
51+
defines += [ "CONFIG_ENABLE_HTTPS_REQUESTS" ]
52+
}
53+
5054
cflags = [ "-Wconversion" ]
5155
}
5256

examples/chip-tool/chip-tool.gni

+1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ declare_args() {
2121
config_use_interactive_mode = true
2222
config_enable_yaml_tests = true
2323
config_use_local_storage = true
24+
config_enable_https_requests = true
2425
}

examples/chip-tool/commands/dcl/HTTPSRequest.cpp

+23-10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <lib/support/logging/CHIPLogging.h>
2626
#include <system/SystemError.h>
2727

28+
#ifdef CONFIG_ENABLE_HTTPS_REQUESTS
2829
#if (CHIP_CRYPTO_OPENSSL || CHIP_CRYPTO_BORINGSSL)
2930
#include <netdb.h>
3031
#include <openssl/ssl.h>
@@ -33,6 +34,7 @@
3334
#define USE_CHIP_CRYPTO 1
3435
#endif
3536
#endif //(CHIP_CRYPTO_OPENSSL || CHIP_CRYPTO_BORINGSSL)
37+
#endif // CONFIG_ENABLE_HTTPS_REQUESTS
3638

3739
namespace {
3840
constexpr const char * kHttpsPrefix = "https://";
@@ -68,9 +70,18 @@ class HTTPSSessionHolder
6870
private:
6971
CHIP_ERROR LogNotImplementedError() const
7072
{
73+
#ifndef CONFIG_ENABLE_HTTPS_REQUESTS
74+
ChipLogError(chipTool, "HTTPS requests are disabled via build configuration (config_enable_https_requests=false).");
75+
#elif !(CHIP_CRYPTO_OPENSSL || CHIP_CRYPTO_BORINGSSL)
7176
ChipLogError(chipTool,
7277
"HTTPS requests are not available because neither OpenSSL nor BoringSSL is enabled. Contributions for "
7378
"alternative implementations are welcome!");
79+
#elif !defined(SHA256_DIGEST_LENGTH)
80+
ChipLogError(chipTool,
81+
"HTTPS requests are not available because SHA256_DIGEST_LENGTH is not defined, meaning response integrity "
82+
"verification via SHA-256 digest checking cannot be performed.");
83+
#endif
84+
7485
return CHIP_ERROR_NOT_IMPLEMENTED;
7586
}
7687
};
@@ -134,19 +145,21 @@ class HTTPSSessionHolder
134145
private:
135146
CHIP_ERROR InitSocket(std::string & hostname, uint16_t port, int & sock)
136147
{
137-
auto * server = gethostbyname(hostname.c_str());
138-
VerifyOrReturnError(nullptr != server, CHIP_ERROR_NOT_CONNECTED);
148+
struct addrinfo * res = nullptr;
149+
struct addrinfo hints = {};
150+
hints.ai_family = AF_INET;
151+
hints.ai_socktype = SOCK_STREAM;
139152

140-
sock = socket(AF_INET, SOCK_STREAM, 0);
141-
VerifyOrReturnError(sock >= 0, CHIP_ERROR_NOT_CONNECTED);
153+
int err = getaddrinfo(hostname.c_str(), std::to_string(port).c_str(), &hints, &res);
154+
VerifyOrReturnError(err == 0 && res != nullptr, CHIP_ERROR_NOT_CONNECTED,
155+
ChipLogError(chipTool, "getaddrinfo failed: %s", gai_strerror(err)));
142156

143-
struct sockaddr_in server_addr;
144-
memset(&server_addr, 0, sizeof(server_addr));
145-
server_addr.sin_family = AF_INET;
146-
server_addr.sin_port = htons(port);
147-
memcpy(&server_addr.sin_addr.s_addr, server->h_addr, (size_t) server->h_length);
157+
sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
158+
VerifyOrReturnError(sock >= 0, CHIP_ERROR_NOT_CONNECTED,
159+
ChipLogError(chipTool, "%s%s:%u", kErrorConnection, hostname.c_str(), port));
148160

149-
int rv = connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));
161+
int rv = connect(sock, res->ai_addr, res->ai_addrlen);
162+
freeaddrinfo(res);
150163
VerifyOrReturnError(rv >= 0, CHIP_ERROR_POSIX(errno),
151164
ChipLogError(chipTool, "%s%s:%u", kErrorConnection, hostname.c_str(), port));
152165

0 commit comments

Comments
 (0)