Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions components/socket/include/socket.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,14 @@ class Socket : public BaseComponent {
*/
struct sockaddr_in *ipv4_ptr();

#if !defined(ESP_PLATFORM) || LWIP_IPV6
/**
* @brief Gives access to IPv6 sockaddr structure (sockaddr_in6) for use
* with low level socket calls like sendto / recvfrom.
* @return *sockaddr_in6 pointer to ipv6 data structure
*/
struct sockaddr_in6 *ipv6_ptr();
#endif // !defined(ESP_PLATFORM) || LWIP_IPV6

/**
* @brief Will update address and port based on the curent data in raw.
Expand All @@ -89,11 +91,13 @@ class Socket : public BaseComponent {
*/
void from_sockaddr(const struct sockaddr_in &source_address);

#if !defined(ESP_PLATFORM) || LWIP_IPV6
/**
* @brief Fill this Info from the provided sockaddr struct.
* @param &source_address sockaddr info filled out by recvfrom.
*/
void from_sockaddr(const struct sockaddr_in6 &source_address);
#endif // !defined(ESP_PLATFORM) || LWIP_IPV6
};

/**
Expand Down
6 changes: 6 additions & 0 deletions components/socket/src/socket.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@ struct sockaddr_in *Socket::Info::ipv4_ptr() {
return reinterpret_cast<struct sockaddr_in *>(&raw);
}

#if !defined(ESP_PLATFORM) || LWIP_IPV6
struct sockaddr_in6 *Socket::Info::ipv6_ptr() {
return reinterpret_cast<struct sockaddr_in6 *>(&raw);
}
#endif // !defined(ESP_PLATFORM) || LWIP_IPV6

void Socket::Info::update() {
if (raw.ss_family == PF_INET) {
const auto *ipv4 = reinterpret_cast<const struct sockaddr_in *>(&raw);
address = inet_ntoa(ipv4->sin_addr);
port = ntohs(ipv4->sin_port);
#if !defined(ESP_PLATFORM) || LWIP_IPV6
} else if (raw.ss_family == PF_INET6) {
const auto *ipv6 = reinterpret_cast<const struct sockaddr_in6 *>(&raw);
#if defined(ESP_PLATFORM)
Expand All @@ -34,6 +37,7 @@ void Socket::Info::update() {
address = str;
#endif
port = ntohs(ipv6->sin6_port);
#endif // !defined(ESP_PLATFORM) || LWIP_IPV6
}
}

Expand All @@ -48,6 +52,7 @@ void Socket::Info::from_sockaddr(const struct sockaddr_in &source_address) {
port = ntohs(source_address.sin_port);
}

#if !defined(ESP_PLATFORM) || LWIP_IPV6
void Socket::Info::from_sockaddr(const struct sockaddr_in6 &source_address) {
#if defined(ESP_PLATFORM)
address = inet_ntoa(source_address.sin6_addr);
Expand All @@ -59,6 +64,7 @@ void Socket::Info::from_sockaddr(const struct sockaddr_in6 &source_address) {
port = ntohs(source_address.sin6_port);
memcpy(&raw, &source_address, sizeof(source_address));
}
#endif // !defined(ESP_PLATFORM) || LWIP_IPV6

[[maybe_unused]] static bool _socket_initialized = false;
Socket::Socket(sock_type_t socket_fd, const Logger::Config &logger_config)
Expand Down