44 if (wolf_ssl_counter++ == 0 || wolf_ctx ==
nullptr) {
60 if (--wolf_ssl_counter == 0 && wolf_ctx) {
67 int read(
uint8_t* buffer,
size_t len)
override {
72 int result = ::wolfSSL_read(ssl, buffer, len);
97 int connect(
const char* address,
uint16_t port)
override {
98 return connect(address, port, -1);
104 int connect(
const char* address,
uint16_t port,
int32_t timeout_ms)
override {
113 memset(&serv_addr, 0,
sizeof(serv_addr));
114 serv_addr.sin_family =
AF_INET;
115 serv_addr.sin_port =
htons(port);
116 if (::inet_pton(
AF_INET, address, &serv_addr.sin_addr) <= 0) {
124 if (timeout_ms < 0) {
125 if (::connect(sock, (
struct sockaddr*)&serv_addr,
sizeof(serv_addr)) < 0) {
132 setSocketNonBlocking(sock,
true);
134 int result = ::connect(sock, (
struct sockaddr*)&serv_addr,
sizeof(serv_addr));
137 setSocketNonBlocking(sock,
false);
149 timeval timeout{.tv_sec = timeout_ms / 1000,
150 .tv_usec = (timeout_ms % 1000) * 1000};
159 result == 0 ?
"Connection timeout" :
"Connection failed");
160 setSocketNonBlocking(sock,
false);
167 setSocketNonBlocking(sock,
false);
176 if (ssl !=
nullptr) {
180 if (is_insecure && ssl !=
nullptr) {
197 "SSL handshake failed, error code: %d reason: %s",
err,
211 size_t write(
const uint8_t* str,
size_t len) {
213 if (ssl ==
nullptr) {
217 return ::wolfSSL_write(ssl, str, len);
220 void setCACert(
const char*
cert)
override {
221 if (wolf_ctx ==
nullptr)
return;
233 if (wolf_ctx ==
nullptr)
return;
242 bool is_insecure =
false;