1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00
Files
mvfst/quic/common/udpsocket/QuicAsyncUDPSocket.cpp
Yedidya Feldblum f8ccdde463 migrate from FOLLY_MAYBE_UNUSED to [[maybe_unused]]
Reviewed By: ot, Orvid, xinchenguo

Differential Revision: D54089810

fbshipit-source-id: c88eb520404590c9759e0e29966d1399c26a2244
2024-02-28 13:28:26 -08:00

58 lines
1.6 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include <type_traits>
#include <quic/common/udpsocket/QuicAsyncUDPSocket.h>
namespace quic {
template <typename T, typename>
T* QuicAsyncUDPSocket::getTypedSocket() const {
auto sock = dynamic_cast<T*>(this);
if (sock) {
return sock;
} else {
LOG(WARNING) << "Failed to cast QuicAsyncUDPSocket to " << typeid(T).name();
return nullptr;
}
}
void QuicAsyncUDPSocket::fromMsg(
[[maybe_unused]] ReadCallback::OnDataAvailableParams& params,
[[maybe_unused]] struct msghdr& msg) {
#ifdef FOLLY_HAVE_MSG_ERRQUEUE
struct cmsghdr* cmsg;
uint16_t* grosizeptr;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr;
cmsg = CMSG_NXTHDR(&msg, cmsg)) {
if (cmsg->cmsg_level == SOL_UDP) {
if (cmsg->cmsg_type == UDP_GRO) {
grosizeptr = (uint16_t*)CMSG_DATA(cmsg);
params.gro = *grosizeptr;
}
} else if (cmsg->cmsg_level == SOL_SOCKET) {
if (cmsg->cmsg_type == SO_TIMESTAMPING ||
cmsg->cmsg_type == SO_TIMESTAMPNS) {
ReadCallback::OnDataAvailableParams::Timestamp ts;
memcpy(
&ts,
reinterpret_cast<struct timespec*>(CMSG_DATA(cmsg)),
sizeof(ts));
params.ts = ts;
}
} else if (
(cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_TOS) ||
(cmsg->cmsg_level == SOL_IPV6 && cmsg->cmsg_type == IPV6_TCLASS)) {
params.tos = *(uint8_t*)CMSG_DATA(cmsg);
}
}
#endif
}
} // namespace quic