Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1788867

Browse filesBrowse files
authored
fix(tls): Enable IPv6 support in ssl_client connect (espressif#9470)
Similar to NetworkClient, check the family of the passed in address and configure the socket and socket address accordingly, for both IPv6 and IPv4 support.
1 parent b6ca5a8 commit 1788867
Copy full SHA for 1788867

File tree

1 file changed

+18
-7
lines changed
Filter options

1 file changed

+18
-7
lines changed

‎libraries/NetworkClientSecure/src/ssl_client.cpp

Copy file name to clipboardExpand all lines: libraries/NetworkClientSecure/src/ssl_client.cpp
+18-7Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,32 @@ int start_ssl_client(sslclient_context *ssl_client, const IPAddress& ip, uint32_
6262
return -1;
6363
}
6464

65-
log_v("Starting socket");
65+
int domain = ip.type() == IPv6 ? AF_INET6 : AF_INET;
66+
log_v("Starting socket (domain %d)", domain);
6667
ssl_client->socket = -1;
6768

68-
ssl_client->socket = lwip_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
69+
ssl_client->socket = lwip_socket(domain, SOCK_STREAM, IPPROTO_TCP);
6970
if (ssl_client->socket < 0) {
7071
log_e("ERROR opening socket");
7172
return ssl_client->socket;
7273
}
7374

7475
fcntl( ssl_client->socket, F_SETFL, fcntl( ssl_client->socket, F_GETFL, 0 ) | O_NONBLOCK );
75-
struct sockaddr_in serv_addr;
76-
memset(&serv_addr, 0, sizeof(serv_addr));
77-
serv_addr.sin_family = AF_INET;
78-
serv_addr.sin_addr.s_addr = ip;
79-
serv_addr.sin_port = htons(port);
76+
struct sockaddr_storage serv_addr = {};
77+
if (domain == AF_INET6) {
78+
struct sockaddr_in6 *tmpaddr = (struct sockaddr_in6 *)&serv_addr;
79+
tmpaddr->sin6_family = AF_INET6;
80+
for (int index = 0; index < 16; index++) {
81+
tmpaddr->sin6_addr.s6_addr[index] = ip[index];
82+
}
83+
tmpaddr->sin6_port = htons(port);
84+
tmpaddr->sin6_scope_id = ip.zone();
85+
} else {
86+
struct sockaddr_in *tmpaddr = (struct sockaddr_in *)&serv_addr;
87+
tmpaddr->sin_family = AF_INET;
88+
tmpaddr->sin_addr.s_addr = ip;
89+
tmpaddr->sin_port = htons(port);
90+
}
8091

8192
if(timeout <= 0){
8293
timeout = 30000; // Milli seconds.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.