flatten 20260225
This commit is contained in:
68
resources/packages/msquic/android-datapath_epoll.c.diff
Normal file
68
resources/packages/msquic/android-datapath_epoll.c.diff
Normal file
@@ -0,0 +1,68 @@
|
||||
diff --git a/src/platform/datapath_epoll.c b/src/platform/datapath_epoll.c
|
||||
index 422509a..0eab584 100644
|
||||
--- a/src/platform/datapath_epoll.c
|
||||
+++ b/src/platform/datapath_epoll.c
|
||||
@@ -1819,6 +1819,21 @@ CxPlatSocketContextRecvComplete(
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef QUIC_ANDROID_FIX_MISSING_LOCALADDRESS_ON_CLIENT
|
||||
+ if (!FoundLocalAddr) {
|
||||
+ LocalAddr->Ip.sa_family = SocketContext->Binding->LocalAddress.Ip.sa_family;
|
||||
+
|
||||
+ // TJP - not sure if these copies are correct, should they be a memcpy?
|
||||
+ if (LocalAddr->Ip.sa_family == QUIC_ADDRESS_FAMILY_INET6) {
|
||||
+ LocalAddr->Ipv6 = SocketContext->Binding->LocalAddress.Ipv6;
|
||||
+ } else {
|
||||
+ LocalAddr->Ipv4 = SocketContext->Binding->LocalAddress.Ipv4;
|
||||
+ }
|
||||
+
|
||||
+ FoundLocalAddr = TRUE;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
CXPLAT_FRE_ASSERT(FoundLocalAddr);
|
||||
CXPLAT_FRE_ASSERT(FoundTOS);
|
||||
|
||||
@@ -2305,17 +2320,22 @@ CxPlatSendDataPopulateAncillaryData(
|
||||
_Inout_ struct msghdr* Mhdr
|
||||
)
|
||||
{
|
||||
+#ifdef QUIC_ANDROID_NO_ECN
|
||||
+ Mhdr->msg_controllen = 0;
|
||||
+ struct cmsghdr *CMsg = NULL;
|
||||
+#else
|
||||
Mhdr->msg_controllen = CMSG_SPACE(sizeof(int));
|
||||
struct cmsghdr *CMsg = CMSG_FIRSTHDR(Mhdr);
|
||||
CMsg->cmsg_level = SendData->LocalAddress.Ip.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
|
||||
CMsg->cmsg_type = SendData->LocalAddress.Ip.sa_family == AF_INET ? IP_TOS : IPV6_TCLASS;
|
||||
CMsg->cmsg_len = CMSG_LEN(sizeof(int));
|
||||
*(int*)CMSG_DATA(CMsg) = SendData->ECN;
|
||||
+#endif
|
||||
|
||||
if (!SendData->OnConnectedSocket) {
|
||||
if (SendData->LocalAddress.Ip.sa_family == AF_INET) {
|
||||
Mhdr->msg_controllen += CMSG_SPACE(sizeof(struct in_pktinfo));
|
||||
- CMsg = CXPLAT_CMSG_NXTHDR(CMsg);
|
||||
+ CMsg = CMsg ? CXPLAT_CMSG_NXTHDR(CMsg) : CMSG_FIRSTHDR(Mhdr);
|
||||
CMsg->cmsg_level = IPPROTO_IP;
|
||||
CMsg->cmsg_type = IP_PKTINFO;
|
||||
CMsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
|
||||
@@ -2325,7 +2345,7 @@ CxPlatSendDataPopulateAncillaryData(
|
||||
PktInfo->ipi_addr = SendData->LocalAddress.Ipv4.sin_addr;
|
||||
} else {
|
||||
Mhdr->msg_controllen += CMSG_SPACE(sizeof(struct in6_pktinfo));
|
||||
- CMsg = CXPLAT_CMSG_NXTHDR(CMsg);
|
||||
+ CMsg = CMsg ? CXPLAT_CMSG_NXTHDR(CMsg) : CMSG_FIRSTHDR(Mhdr);
|
||||
CMsg->cmsg_level = IPPROTO_IPV6;
|
||||
CMsg->cmsg_type = IPV6_PKTINFO;
|
||||
CMsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
|
||||
@@ -2338,7 +2358,7 @@ CxPlatSendDataPopulateAncillaryData(
|
||||
#ifdef UDP_SEGMENT
|
||||
if (SendData->SegmentationSupported && SendData->SegmentSize > 0) {
|
||||
Mhdr->msg_controllen += CMSG_SPACE(sizeof(uint16_t));
|
||||
- CMsg = CXPLAT_CMSG_NXTHDR(CMsg);
|
||||
+ CMsg = CMsg ? CXPLAT_CMSG_NXTHDR(CMsg) : CMSG_FIRSTHDR(Mhdr);
|
||||
CMsg->cmsg_level = SOL_UDP;
|
||||
CMsg->cmsg_type = UDP_SEGMENT;
|
||||
CMsg->cmsg_len = CMSG_LEN(sizeof(uint16_t));
|
||||
Reference in New Issue
Block a user