summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSShared/dnssd_clientstub.c
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSShared/dnssd_clientstub.c')
-rw-r--r--mDNSResponder/mDNSShared/dnssd_clientstub.c42
1 files changed, 26 insertions, 16 deletions
diff --git a/mDNSResponder/mDNSShared/dnssd_clientstub.c b/mDNSResponder/mDNSShared/dnssd_clientstub.c
index 5cf4ebe9..27e90eee 100644
--- a/mDNSResponder/mDNSShared/dnssd_clientstub.c
+++ b/mDNSResponder/mDNSShared/dnssd_clientstub.c
@@ -35,7 +35,7 @@
#include <mach-o/dyld.h>
#include <uuid/uuid.h>
#include <TargetConditionals.h>
-#include "dns_sd_private.h"
+#include "dns_sd_internal.h"
#endif
#if defined(_WIN32)
@@ -195,9 +195,10 @@ static int write_all(dnssd_sock_t sd, char *buf, size_t len)
ssize_t num_written = send(sd, buf, (long)len, 0);
if (num_written < 0 || (size_t)num_written > len)
{
- // Should never happen. If it does, it indicates some OS bug,
+ // Check whether socket has gone defunct,
+ // otherwise, an error here indicates some OS bug
// or that the mDNSResponder daemon crashed (which should never happen).
- #if !defined(__ppc__) && defined(SO_ISDEFUNCT)
+#if !defined(__ppc__) && defined(SO_ISDEFUNCT)
int defunct = 0;
socklen_t dlen = sizeof (defunct);
if (getsockopt(sd, SOL_SOCKET, SO_ISDEFUNCT, &defunct, &dlen) < 0)
@@ -209,12 +210,12 @@ static int write_all(dnssd_sock_t sd, char *buf, size_t len)
(num_written < 0) ? dnssd_strerror(dnssd_errno) : "");
else
syslog(LOG_INFO, "dnssd_clientstub write_all(%d) DEFUNCT", sd);
- #else
+#else
syslog(LOG_WARNING, "dnssd_clientstub write_all(%d) failed %ld/%ld %d %s", sd,
(long)num_written, (long)len,
(num_written < 0) ? dnssd_errno : 0,
(num_written < 0) ? dnssd_strerror(dnssd_errno) : "");
- #endif
+#endif
return -1;
}
buf += num_written;
@@ -245,7 +246,9 @@ static int read_all(dnssd_sock_t sd, char *buf, int len)
{
int printWarn = 0;
int defunct = 0;
- // Should never happen. If it does, it indicates some OS bug,
+
+ // Check whether socket has gone defunct,
+ // otherwise, an error here indicates some OS bug
// or that the mDNSResponder daemon crashed (which should never happen).
#if defined(WIN32)
// <rdar://problem/7481776> Suppress logs for "A non-blocking socket operation
@@ -450,8 +453,8 @@ static void FreeDNSServiceOp(DNSServiceOp *x)
x->disp_queue = NULL;
#endif
// DNSRecords may have been added to subordinate sdRef e.g., DNSServiceRegister/DNSServiceAddRecord
- // or on the main sdRef e.g., DNSServiceCreateConnection/DNSServiveRegisterRecord. DNSRecords may have
- // been freed if the application called DNSRemoveRecord
+ // or on the main sdRef e.g., DNSServiceCreateConnection/DNSServiceRegisterRecord.
+ // DNSRecords may have been freed if the application called DNSRemoveRecord.
FreeDNSRecords(x);
if (x->kacontext)
{
@@ -629,24 +632,30 @@ static DNSServiceErrorType ConnectToServer(DNSServiceRef *ref, DNSServiceFlags f
static DNSServiceErrorType deliver_request(ipc_msg_hdr *hdr, DNSServiceOp *sdr)
{
+ uint32_t datalen;
+ dnssd_sock_t listenfd = dnssd_InvalidSocket, errsd = dnssd_InvalidSocket;
+ DNSServiceErrorType err = kDNSServiceErr_Unknown; // Default for the "goto cleanup" cases
+ int MakeSeparateReturnSocket;
+ #if defined(USE_TCP_LOOPBACK) || defined(USE_NAMED_ERROR_RETURN_SOCKET)
+ char *data;
+ #endif
+
if (!hdr)
{
syslog(LOG_WARNING, "dnssd_clientstub deliver_request: !hdr");
return kDNSServiceErr_Unknown;
}
- uint32_t datalen = hdr->datalen; // We take a copy here because we're going to convert hdr->datalen to network byte order
+ datalen = hdr->datalen; // We take a copy here because we're going to convert hdr->datalen to network byte order
#if defined(USE_TCP_LOOPBACK) || defined(USE_NAMED_ERROR_RETURN_SOCKET)
- char *const data = (char *)hdr + sizeof(ipc_msg_hdr);
+ data = (char *)hdr + sizeof(ipc_msg_hdr);
#endif
- dnssd_sock_t listenfd = dnssd_InvalidSocket, errsd = dnssd_InvalidSocket;
- DNSServiceErrorType err = kDNSServiceErr_Unknown; // Default for the "goto cleanup" cases
// Note: need to check hdr->op, not sdr->op.
// hdr->op contains the code for the specific operation we're currently doing, whereas sdr->op
// contains the original parent DNSServiceOp (e.g. for an add_record_request, hdr->op will be
// add_record_request but the parent sdr->op will be connection_request or reg_service_request)
- const int MakeSeparateReturnSocket = (sdr->primary ||
+ MakeSeparateReturnSocket = (sdr->primary ||
hdr->op == reg_record_request || hdr->op == add_record_request || hdr->op == update_record_request || hdr->op == remove_record_request);
if (!DNSServiceRefValid(sdr))
@@ -1215,7 +1224,7 @@ DNSServiceErrorType DNSSD_API DNSServiceGetPID(const uint16_t srcport, int32_t *
{
char *ptr;
ipc_msg_hdr *hdr;
- DNSServiceOp *tmp;
+ DNSServiceOp *tmp = NULL;
size_t len = sizeof(int32_t);
DNSServiceErrorType err = ConnectToServer(&tmp, 0, getpid_request, NULL, NULL, NULL);
@@ -1312,7 +1321,8 @@ DNSServiceErrorType DNSSD_API DNSServiceResolve
((interfaceIndex == kDNSServiceInterfaceIndexAny) ||
(interfaceIndex == kDNSServiceInterfaceIndexLocalOnly) ||
(interfaceIndex == kDNSServiceInterfaceIndexUnicast) ||
- (interfaceIndex == kDNSServiceInterfaceIndexP2P)))
+ (interfaceIndex == kDNSServiceInterfaceIndexP2P) ||
+ (interfaceIndex == kDNSServiceInterfaceIndexBLE)))
{
return kDNSServiceErr_BadParam;
}
@@ -2123,7 +2133,7 @@ DNSServiceErrorType DNSSD_API DNSServiceReconfirmRecord
char *ptr;
size_t len;
ipc_msg_hdr *hdr;
- DNSServiceOp *tmp;
+ DNSServiceOp *tmp = NULL;
if (!fullname || (!rdata && rdlen)) return kDNSServiceErr_BadParam;