Imported Upstream version 878.70.2
[platform/upstream/mdnsresponder.git] / mDNSMacOSX / DNSProxySupport.c
index 7666cbc..8a2e70b 100644 (file)
@@ -23,6 +23,8 @@
 #include <sys/event.h>
 #include <netinet/tcp.h>
 
+mDNSexport mDNS mDNSStorage;
+
 #define ValidSocket(s) ((s) >= 0)
 
 // Global to store the 4 DNS Proxy Listeners (UDPv4/6, TCPv4/6)
@@ -92,7 +94,7 @@ mDNSlocal int ProxyTCPRead(ProxyTCPInfo_t *tcpInfo)
         return 1;
 }
 
-mDNSlocal void ProxyTCPSocketCallBack(int s1, short filter, void *context)
+mDNSlocal void ProxyTCPSocketCallBack(int s1, short filter, void *context, __unused mDNSBool encounteredEOF)
 {
     int ret;
     struct sockaddr_storage from;
@@ -185,11 +187,11 @@ mDNSlocal void ProxyTCPSocketCallBack(int s1, short filter, void *context)
     // We pass sock for the TCPSocket and the "ti" for context as that's what we want to free at the end.
     // In the UDP case, there is just a single socket and nothing to free. Hence, the context (last argument)
     // would be NULL.
-    kq->m->p->TCPProxyCallback(kq->m, sock, ti->reply, (mDNSu8 *)ti->reply + ti->replyLen, &senderAddr, senderPort, &destAddr,
+    kq->m->p->TCPProxyCallback(sock, ti->reply, (mDNSu8 *)ti->reply + ti->replyLen, &senderAddr, senderPort, &destAddr,
         UnicastDNSPort, (mDNSInterfaceID)(uintptr_t)intf_id, ti);
 }
 
-mDNSlocal void ProxyTCPAccept(int s1, short filter, void *context)
+mDNSlocal void ProxyTCPAccept(int s1, short filter, void *context, __unused mDNSBool encounteredEOF)
 {
     int newfd;
     struct sockaddr_storage ss;
@@ -271,14 +273,14 @@ mDNSlocal void ProxyTCPAccept(int s1, short filter, void *context)
     }
 }
 
-mDNSlocal mStatus SetupUDPProxySocket(mDNS *const m, int skt, KQSocketSet *cp, u_short sa_family, mDNSBool useBackgroundTrafficClass)
+mDNSlocal mStatus SetupUDPProxySocket(int skt, KQSocketSet *cp, u_short sa_family, mDNSBool useBackgroundTrafficClass)
 {
     int         *s        = (sa_family == AF_INET) ? &cp->sktv4 : &cp->sktv6;
     KQueueEntry *k        = (sa_family == AF_INET) ? &cp->kqsv4 : &cp->kqsv6;
     const int on = 1;
     mStatus err = mStatus_NoError;
 
-    cp->m = m;
+    cp->m = &mDNSStorage;
     cp->closeFlag = mDNSNULL;
 
     // set default traffic class
@@ -348,13 +350,13 @@ mDNSlocal mStatus SetupUDPProxySocket(mDNS *const m, int skt, KQSocketSet *cp, u
     return(err);
 }
 
-mDNSlocal mStatus SetupTCPProxySocket(mDNS *const m, int skt, KQSocketSet *cp, u_short sa_family, mDNSBool useBackgroundTrafficClass)
+mDNSlocal mStatus SetupTCPProxySocket(int skt, KQSocketSet *cp, u_short sa_family, mDNSBool useBackgroundTrafficClass)
 {
     int         *s        = (sa_family == AF_INET) ? &cp->sktv4 : &cp->sktv6;
     KQueueEntry *k        = (sa_family == AF_INET) ? &cp->kqsv4 : &cp->kqsv6;
     mStatus err;
 
-    cp->m = m;
+    cp->m = &mDNSStorage;
     // XXX may not be used by the TCP codepath 
     cp->closeFlag = mDNSNULL;
 
@@ -438,9 +440,10 @@ mDNSlocal void BindDPSocket(int fd, int sa_family)
 }
 
 // Setup DNS Proxy Skts in main kevent loop and set the skt options
-mDNSlocal void SetupDNSProxySkts(mDNS *const m, int fd[4])
+mDNSlocal void SetupDNSProxySkts(int fd[4])
 {
-    int i;
+    mDNS *const m = &mDNSStorage;
+       int i;
     mStatus err;
     KQSocketSet *udpSS;
     KQSocketSet *tcpSS;
@@ -454,19 +457,19 @@ mDNSlocal void SetupDNSProxySkts(mDNS *const m, int fd[4])
 
     // myKQSocketCallBack checks for proxy and calls the m->p->ProxyCallback instead of mDNSCoreReceive
     udpSS->proxy = mDNStrue;
-    err = SetupUDPProxySocket(m, fd[0], udpSS, AF_INET, mDNSfalse);
+    err = SetupUDPProxySocket(fd[0], udpSS, AF_INET, mDNSfalse);
     if (err)
         LogMsg("SetupDNSProxySkts: ERROR!! UDPv4 Socket");
 
-    err = SetupUDPProxySocket(m, fd[1], udpSS, AF_INET6, mDNSfalse);
+    err = SetupUDPProxySocket(fd[1], udpSS, AF_INET6, mDNSfalse);
     if (err)
         LogMsg("SetupDNSProxySkts: ERROR!! UDPv6 Socket");
 
-    err = SetupTCPProxySocket(m, fd[2], tcpSS, AF_INET, mDNSfalse);
+    err = SetupTCPProxySocket(fd[2], tcpSS, AF_INET, mDNSfalse);
     if (err)
         LogMsg("SetupDNSProxySkts: ERROR!! TCPv4 Socket");
 
-    err = SetupTCPProxySocket(m, fd[3], tcpSS, AF_INET6, mDNSfalse);
+    err = SetupTCPProxySocket(fd[3], tcpSS, AF_INET6, mDNSfalse);
     if (err)
         LogMsg("SetupDNSProxySkts: ERROR!! TCPv6 Socket");
 
@@ -475,7 +478,7 @@ mDNSlocal void SetupDNSProxySkts(mDNS *const m, int fd[4])
 } 
 
 // Create and bind the DNS Proxy Skts for use
-mDNSexport void mDNSPlatformInitDNSProxySkts(mDNS *const m, ProxyCallback UDPCallback, ProxyCallback TCPCallback)
+mDNSexport void mDNSPlatformInitDNSProxySkts(ProxyCallback UDPCallback, ProxyCallback TCPCallback)
 {
     int dpskt[4];
     
@@ -506,10 +509,10 @@ mDNSexport void mDNSPlatformInitDNSProxySkts(mDNS *const m, ProxyCallback UDPCal
     LogInfo("mDNSPlatformInitDNSProxySkts: Opened Listener Sockets for DNS Proxy : %d, %d, %d, %d", 
              dpskt[0], dpskt[1], dpskt[2], dpskt[3]);
 
-    m->p->UDPProxyCallback = UDPCallback;
-    m->p->TCPProxyCallback = TCPCallback;
+    mDNSStorage.p->UDPProxyCallback = UDPCallback;
+    mDNSStorage.p->TCPProxyCallback = TCPCallback;
 
-    SetupDNSProxySkts(m, dpskt);
+    SetupDNSProxySkts(dpskt);
 }
 
 mDNSexport void mDNSPlatformCloseDNSProxySkts(mDNS *const m)