Skip to content

Commit 3cefede

Browse files
matoromaxsharabayko
authored andcommitted
[core] Correct remaining endianness issues
Fixes the last two remaining test failures on big-endian. These operations were all already no-ops on little-endian, and unnecessarily byteswapped the IP addresses on big-endian. Closes: #2697
1 parent 66c86b1 commit 3cefede

File tree

1 file changed

+2
-17
lines changed

1 file changed

+2
-17
lines changed

srtcore/common.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,7 @@ void srt::CIPAddress::ntop(const sockaddr_any& addr, uint32_t ip[4])
168168
}
169169
else
170170
{
171-
const sockaddr_in6* a = &addr.sin6;
172-
ip[3] = (a->sin6_addr.s6_addr[15] << 24) + (a->sin6_addr.s6_addr[14] << 16) + (a->sin6_addr.s6_addr[13] << 8) + a->sin6_addr.s6_addr[12];
173-
ip[2] = (a->sin6_addr.s6_addr[11] << 24) + (a->sin6_addr.s6_addr[10] << 16) + (a->sin6_addr.s6_addr[9] << 8) + a->sin6_addr.s6_addr[8];
174-
ip[1] = (a->sin6_addr.s6_addr[7] << 24) + (a->sin6_addr.s6_addr[6] << 16) + (a->sin6_addr.s6_addr[5] << 8) + a->sin6_addr.s6_addr[4];
175-
ip[0] = (a->sin6_addr.s6_addr[3] << 24) + (a->sin6_addr.s6_addr[2] << 16) + (a->sin6_addr.s6_addr[1] << 8) + a->sin6_addr.s6_addr[0];
171+
std::memcpy(ip, addr.sin6.sin6_addr.s6_addr, 16);
176172
}
177173
}
178174

@@ -223,18 +219,7 @@ void srt::CIPAddress::pton(sockaddr_any& w_addr, const uint32_t ip[4], const soc
223219
// Here both agent and peer use IPv6, in which case
224220
// `ip` contains the full IPv6 address, so just copy
225221
// it as is.
226-
227-
// XXX Possibly, a simple
228-
// memcpy( (a->sin6_addr.s6_addr), ip, 16);
229-
// would do the same thing, and faster. The address in `ip`,
230-
// even though coded here as uint32_t, is still big endian.
231-
for (int i = 0; i < 4; ++ i)
232-
{
233-
a->sin6_addr.s6_addr[i * 4 + 0] = ip[i] & 0xFF;
234-
a->sin6_addr.s6_addr[i * 4 + 1] = (unsigned char)((ip[i] & 0xFF00) >> 8);
235-
a->sin6_addr.s6_addr[i * 4 + 2] = (unsigned char)((ip[i] & 0xFF0000) >> 16);
236-
a->sin6_addr.s6_addr[i * 4 + 3] = (unsigned char)((ip[i] & 0xFF000000) >> 24);
237-
}
222+
std::memcpy(a->sin6_addr.s6_addr, ip, 16);
238223
return; // The address is written, nothing left to do.
239224
}
240225

0 commit comments

Comments
 (0)