Fix warnings when compiling for Windows
authorsherscher@apple.com <sherscher@apple.com@214c2c4a-bf3b-4dcf-9390-e4dd3010487d>
Thu, 27 Aug 2009 04:48:00 +0000 (04:48 +0000)
committersherscher@apple.com <sherscher@apple.com@214c2c4a-bf3b-4dcf-9390-e4dd3010487d>
Thu, 27 Aug 2009 04:48:00 +0000 (04:48 +0000)
git-svn-id: http://svn.macosforge.org/repository/mdnsresponder/trunk@6620 214c2c4a-bf3b-4dcf-9390-e4dd3010487d

mDNSCore/DNSCommon.c
mDNSCore/DNSCommon.h
mDNSCore/mDNS.c
mDNSCore/mDNSEmbeddedAPI.h
mDNSCore/uDNS.c
mDNSMacOSX/LegacyNATTraversal.c
mDNSShared/dns_sd.h
mDNSShared/dnssd_clientstub.c
mDNSShared/dnssd_ipc.h
mDNSShared/uds_daemon.c

index edf43c3..6cd47ab 100644 (file)
@@ -238,7 +238,7 @@ mDNSexport char *GetRRDisplayString_rdb(const ResourceRecord *const rr, const RD
                                                        break;
 
                case kDNSType_NSEC: {
-                                                       int i;
+                                                       mDNSu16 i;
                                                        for (i=0; i<255; i++)
                                                                if (rd->nsec.bitmap[i>>3] & (128 >> (i&7)))
                                                                        length += mDNS_snprintf(buffer+length, RemSpc, "%s ", DNSTypeName(i));
@@ -1273,7 +1273,7 @@ mDNSexport mDNSu16 GetRDLength(const ResourceRecord *const rr, mDNSBool estimate
                                                        // the block number is always 0,
                                                        // the count byte is a value in the range 1-32,
                                                        // followed by the 1-32 data bytes
-                                                       return((estimate ? 1 : DomainNameLength(rr->name)) + 2 + i);
+                                                       return(mDNSu16)((estimate ? 1 : DomainNameLength(rr->name)) + 2 + i);
                                                        }
 
                default:                        debugf("Warning! Don't know how to get length of resource type %d", rr->rrtype);
@@ -1558,7 +1558,7 @@ mDNSexport mDNSu8 *putRData(const DNSMessage *const msg, mDNSu8 *ptr, const mDNS
                                                                {
                                                                const int space = DNSOpt_Data_Space(opt);
                                                                ptr = putVal16(ptr, opt->opt);
-                                                               ptr = putVal16(ptr, space - 4);
+                                                               ptr = putVal16(ptr, (mDNSu16)space - 4);
                                                                switch (opt->opt)
                                                                        {
                                                                        case kDNSOpt_LLQ:
@@ -1605,7 +1605,7 @@ mDNSexport mDNSu8 *putRData(const DNSMessage *const msg, mDNSu8 *ptr, const mDNS
                                                        if (!ptr) return(mDNSNULL);
                                                        if (ptr + 2 + i > limit) return(mDNSNULL);
                                                        *ptr++ = 0;
-                                                       *ptr++ = i;
+                                                       *ptr++ = (mDNSu8)i;
                                                        for (j=0; j<i; j++) *ptr++ = rdb->nsec.bitmap[j];
                                                        return ptr;
                                                        }
@@ -2133,7 +2133,7 @@ mDNSexport const mDNSu8 *GetLargeResourceRecord(mDNS *const m, const DNSMessage
                                                                        }
                                                                opt++;  // increment pointer into rdatabody
                                                                }
-                                                       rr->resrec.rdlength = (mDNSu8*)opt - rr->resrec.rdata->u.data;
+                                                       rr->resrec.rdlength = (mDNSu16)((mDNSu8*)opt - rr->resrec.rdata->u.data);
                                                        if (ptr != end) { LogMsg("GetLargeResourceRecord: Malformed OptRdata"); return(mDNSNULL); }
                                                        break;
                                                        }
index c58961e..4cfbb38 100644 (file)
@@ -115,7 +115,7 @@ extern const domainname *SkipLeadingLabels(const domainname *d, int skip);
 extern mDNSu32 TruncateUTF8ToLength(mDNSu8 *string, mDNSu32 length, mDNSu32 max);
 extern mDNSBool LabelContainsSuffix(const domainlabel *const name, const mDNSBool RichText);
 extern mDNSu32 RemoveLabelSuffix(domainlabel *name, mDNSBool RichText);
-extern void AppendLabelSuffix(domainlabel *name, mDNSu32 val, mDNSBool RichText);
+extern void AppendLabelSuffix(domainlabel *const name, mDNSu32 val, const mDNSBool RichText);
 #define ValidateDomainName(N) (DomainNameLength(N) <= MAX_DOMAIN_NAME)
 
 // ***************************************************************************
@@ -209,7 +209,7 @@ extern mDNSu8 *PutResourceRecordTTLWithLimit(DNSMessage *const msg, mDNSu8 *ptr,
 
 extern mDNSu8 *putQuestion(DNSMessage *const msg, mDNSu8 *ptr, const mDNSu8 *const limit, const domainname *const name, mDNSu16 rrtype, mDNSu16 rrclass);
 extern mDNSu8 *putZone(DNSMessage *const msg, mDNSu8 *ptr, mDNSu8 *limit, const domainname *zone, mDNSOpaque16 zoneClass);
-extern mDNSu8 *putPrereqNameNotInUse(const domainname *const name, DNSMessage *msg, mDNSu8 *ptr, mDNSu8 *end);
+extern mDNSu8 *putPrereqNameNotInUse(const domainname *const name, DNSMessage *const msg, mDNSu8 *const ptr, mDNSu8 *const end);
 extern mDNSu8 *putDeletionRecord(DNSMessage *msg, mDNSu8 *ptr, ResourceRecord *rr);
 extern mDNSu8 *putDeleteRRSet(DNSMessage *msg, mDNSu8 *ptr, const domainname *name, mDNSu16 rrtype);
 extern mDNSu8 *putDeleteAllRRSets(DNSMessage *msg, mDNSu8 *ptr, const domainname *name);
@@ -231,7 +231,7 @@ extern const mDNSu8 *getDomainName(const DNSMessage *const msg, const mDNSu8 *pt
        domainname *const name);
 extern const mDNSu8 *skipResourceRecord(const DNSMessage *msg, const mDNSu8 *ptr, const mDNSu8 *end);
 extern const mDNSu8 *GetLargeResourceRecord(mDNS *const m, const DNSMessage * const msg, const mDNSu8 *ptr,
-    const mDNSu8 * end, const mDNSInterfaceID InterfaceID, mDNSu8 RecordType, LargeCacheRecord *largecr);
+    const mDNSu8 * end, const mDNSInterfaceID InterfaceID, mDNSu8 RecordType, LargeCacheRecord *const largecr);
 extern const mDNSu8 *skipQuestion(const DNSMessage *msg, const mDNSu8 *ptr, const mDNSu8 *end);
 extern const mDNSu8 *getQuestion(const DNSMessage *msg, const mDNSu8 *ptr, const mDNSu8 *end, const mDNSInterfaceID InterfaceID,
        DNSQuestion *question);
index ebf237a..a6ce307 100755 (executable)
@@ -1086,7 +1086,7 @@ mDNSlocal mStatus GetLabelDecimalValue(const mDNSu8 *const src, mDNSu8 *dst)
                val = val * 10 + src[i] - '0';
                }
        if (val > 255) return(mStatus_Invalid);
-       *dst = val;
+       *dst = (mDNSu8)val;
        return(mStatus_NoError);
        }
 
@@ -1126,7 +1126,7 @@ mDNSlocal mStatus GetIPv6FromName(mDNSAddr *const a, const domainname *const nam
                n = (const domainname *)(n->c + 2);
 
                if (l<0 || h<0) return mStatus_Invalid;
-               a->ip.v6.b[15-i] = (h << 4) | l;
+               a->ip.v6.b[15-i] = (mDNSu8)((h << 4) | l);
                }
 
        a->type = mDNSAddrType_IPv6;
@@ -1424,7 +1424,7 @@ mDNSlocal void SendResponses(mDNS *const m)
                                        }
                                else
                                        {
-                                       mDNSu8 active = (m->SleepState != SleepState_Sleeping || intf->SPSAddr[0].type || intf->SPSAddr[1].type || intf->SPSAddr[2].type);
+                                       mDNSu8 active = (mDNSu8)(m->SleepState != SleepState_Sleeping || intf->SPSAddr[0].type || intf->SPSAddr[1].type || intf->SPSAddr[2].type);
                                        if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
                                                rr->resrec.rrclass |= kDNSClass_UniqueRRSet;            // Temporarily set the cache flush bit so PutResourceRecord will set it
                                        newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, active ? rr->resrec.rroriginalttl : 0);
@@ -3439,7 +3439,7 @@ mDNSlocal void RetrySPSRegistrations(mDNS *const m)
 mDNSlocal void NetWakeResolve(mDNS *const m, DNSQuestion *question, const ResourceRecord *const answer, QC_result AddRecord)
        {
        NetworkInterfaceInfo *intf = (NetworkInterfaceInfo *)question->QuestionContext;
-       int sps = question - intf->NetWakeResolve;
+       int sps = (int)(question - intf->NetWakeResolve);
        (void)m;                        // Unused
        LogSPS("NetWakeResolve: SPS: %d Add: %d %s", sps, AddRecord, RRDisplayString(m, answer));
 
@@ -5416,7 +5416,7 @@ mDNSlocal void mDNSCoreReceiveUpdate(mDNS *const m,
        int i;
        AuthRecord opt;
        mDNSu8 *p = m->omsg.data;
-       OwnerOptData owner;
+       OwnerOptData owner = { 0 };
        mDNSu32 updatelease = 0;
        const mDNSu8 *ptr;
 
@@ -6892,8 +6892,8 @@ mDNSexport mStatus mDNS_RegisterInterface(mDNS *const m, NetworkInterfaceInfo *s
        
        // Assume this interface will be active now, unless we find a duplicate already in the list
        set->InterfaceActive = mDNStrue;
-       set->IPv4Available   = (set->ip.type == mDNSAddrType_IPv4 && set->McastTxRx);
-       set->IPv6Available   = (set->ip.type == mDNSAddrType_IPv6 && set->McastTxRx);
+       set->IPv4Available   = (mDNSu8)(set->ip.type == mDNSAddrType_IPv4 && set->McastTxRx);
+       set->IPv6Available   = (mDNSu8)(set->ip.type == mDNSAddrType_IPv6 && set->McastTxRx);
        
        InitializeNetWakeState(m, set);
 
@@ -7613,16 +7613,19 @@ mDNSexport mStatus mDNS_AdvertiseDomains(mDNS *const m, AuthRecord *rr,
 mDNSexport mDNSOpaque16 mDNS_NewMessageID(mDNS * const m)
        {
        mDNSOpaque16 id;
-       int i;
-       for (i=0; i<10; i++)
+       int i = 0;
+       do
                {
+               // This loop is written this slightly odd way to avoid bogus "unreachable code" warnings on Windows
                AuthRecord *r;
                DNSQuestion *q;
-               id = mDNSOpaque16fromIntVal(1 + mDNSRandom(0xFFFE));
-               for (r = m->ResourceRecords; r; r=r->next) if (mDNSSameOpaque16(id, r->updateid )) continue;
-               for (q = m->Questions;       q; q=q->next) if (mDNSSameOpaque16(id, q->TargetQID)) continue;
+               id = mDNSOpaque16fromIntVal(1 + (mDNSu16)mDNSRandom(0xFFFE));
+               for (r = m->ResourceRecords; r; r=r->next) if (mDNSSameOpaque16(id, r->updateid )) goto retry;
+               for (q = m->Questions;       q; q=q->next) if (mDNSSameOpaque16(id, q->TargetQID)) goto retry;
                break;
-               }
+retry:
+               i++;
+               } while (i < 10);
        debugf("mDNS_NewMessageID: %5d", mDNSVal16(id));
        return id;
        }
@@ -7851,7 +7854,7 @@ mDNSexport void mDNSCoreReceiveRawPacket(mDNS *const m, const mDNSu8 *const p, c
 
 mDNSlocal void ConstructSleepProxyServerName(mDNS *const m, domainlabel *name)
        {
-       name->c[0] = mDNS_snprintf((char*)name->c+1, 62, "%d-%d-%d-%d %#s",
+       name->c[0] = (mDNSu8)mDNS_snprintf((char*)name->c+1, 62, "%d-%d-%d-%d %#s",
                m->SPSType, m->SPSPortability, m->SPSMarginalPower, m->SPSTotalPower, &m->nicelabel);
        }
 
@@ -7865,7 +7868,7 @@ mDNSlocal void SleepProxyServerCallback(mDNS *const m, ServiceRecordSet *const s
                        m->SPSState = 3;
                else
                        {
-                       m->SPSState = (m->SPSSocket != mDNSNULL);
+                       m->SPSState = (mDNSu8)(m->SPSSocket != mDNSNULL);
                        if (m->SPSState)
                                {
                                domainlabel name;
index d83b7df..ebe6b28 100755 (executable)
@@ -2451,7 +2451,7 @@ extern void     mDNS_DeregisterInterface(mDNS *const m, NetworkInterfaceInfo *se
 extern void     mDNSCoreInitComplete(mDNS *const m, mStatus result);
 extern void     mDNSCoreReceive(mDNS *const m, void *const msg, const mDNSu8 *const end,
                                                                const mDNSAddr *const srcaddr, const mDNSIPPort srcport,
-                                                               const mDNSAddr *const dstaddr, const mDNSIPPort dstport, const mDNSInterfaceID InterfaceID);
+                                                               const mDNSAddr *dstaddr, const mDNSIPPort dstport, const mDNSInterfaceID InterfaceID);
 extern void    mDNSCoreRestartQueries(mDNS *const m);
 extern mDNSBool mDNSCoreHaveAdvertisedMulticastServices(mDNS *const m);
 extern void     mDNSCoreMachineSleep(mDNS *const m, mDNSBool wake);
index a8feb2f..4d67080 100755 (executable)
@@ -597,7 +597,7 @@ mDNSexport mStatus mDNS_StopNATOperation_internal(mDNS *m, NATTraversalInfo *tra
        return(mStatus_NoError);
        }
 
-mDNSexport mStatus mDNS_StartNATOperation(mDNS *m, NATTraversalInfo *traversal)
+mDNSexport mStatus mDNS_StartNATOperation(mDNS *const m, NATTraversalInfo *traversal)
        {
        mStatus status;
        mDNS_Lock(m);
@@ -606,7 +606,7 @@ mDNSexport mStatus mDNS_StartNATOperation(mDNS *m, NATTraversalInfo *traversal)
        return(status);
        }
 
-mDNSexport mStatus mDNS_StopNATOperation(mDNS *m, NATTraversalInfo *traversal)
+mDNSexport mStatus mDNS_StopNATOperation(mDNS *const m, NATTraversalInfo *traversal)
        {
        mStatus status;
        mDNS_Lock(m);
index 72e40d6..6c9cd77 100644 (file)
@@ -34,9 +34,9 @@ inet_pton( int family, const char * addr, void * dst )
        int sslen = sizeof( ss );
 
        ZeroMemory( &ss, sizeof( ss ) );
-       ss.ss_family = family;
+       ss.ss_family = (ADDRESS_FAMILY)family;
 
-       if ( WSAStringToAddressA( addr, family, NULL, ( struct sockaddr* ) &ss, &sslen ) == 0 )
+       if ( WSAStringToAddressA( (LPSTR)addr, family, NULL, ( struct sockaddr* ) &ss, &sslen ) == 0 )
                {
                if ( family == AF_INET ) { memcpy( dst, &( ( struct sockaddr_in* ) &ss)->sin_addr, sizeof( IN_ADDR ) ); return 1; }
                else if ( family == AF_INET6 ) { memcpy( dst, &( ( struct sockaddr_in6* ) &ss)->sin6_addr, sizeof( IN6_ADDR ) ); return 1; }
@@ -75,13 +75,13 @@ typedef struct Property_struct
 // In the event of a port conflict, handleLNTPortMappingResponse then increments tcpInfo->retries and calls back to SendPortMapRequest to try again
 mDNSlocal mStatus SendPortMapRequest(mDNS *m, NATTraversalInfo *n);
 
-#define RequestedPortNum(n) (mDNSVal16(mDNSIPPortIsZero((n)->RequestedPort) ? (n)->IntPort : (n)->RequestedPort) + (n)->tcpInfo.retries)
+#define RequestedPortNum(n) (mDNSVal16(mDNSIPPortIsZero((n)->RequestedPort) ? (n)->IntPort : (n)->RequestedPort) + (mDNSu16)(n)->tcpInfo.retries)
 
 // Note that this function assumes src is already NULL terminated
 mDNSlocal void AllocAndCopy(mDNSu8** dst, mDNSu8* src)
        {
        if (src == mDNSNULL) return;
-       if ((*dst = (mDNSu8 *) mDNSPlatformMemAllocate(strlen((char*)src) + 1)) == mDNSNULL) { LogMsg("AllocAndCopy: can't allocate string"); return; }
+       if ((*dst = (mDNSu8 *) mDNSPlatformMemAllocate((mDNSu32)strlen((char*)src) + 1)) == mDNSNULL) { LogMsg("AllocAndCopy: can't allocate string"); return; }
        strcpy((char *)*dst, (char*)src);
        }
 
@@ -116,10 +116,8 @@ mDNSlocal mStatus ParseHttpUrl(char* ptr, char* end, mDNSu8** addressAndPort, mD
                        {
                        if (*addrPtr == ':')
                                {
-                               int tmpport;
                                addrPtr++; // skip over ':'
-                               tmpport = (int)strtol(addrPtr, mDNSNULL, 10);
-                               *port = mDNSOpaque16fromIntVal(tmpport); // store it properly converted
+                               *port = mDNSOpaque16fromIntVal((mDNSu16)strtol(addrPtr, mDNSNULL, 10)); // store it properly converted
                                break;
                                }
                        }
@@ -129,7 +127,7 @@ mDNSlocal mStatus ParseHttpUrl(char* ptr, char* end, mDNSu8** addressAndPort, mD
        // everything that remains is the path
        if (path && ptr < end)
                {
-               if ((*path = (mDNSu8 *)mDNSPlatformMemAllocate(end - ptr + 1)) == mDNSNULL) { LogMsg("ParseHttpUrl: can't mDNSPlatformMemAllocate path"); return mStatus_NoMemoryErr; }
+               if ((*path = (mDNSu8 *)mDNSPlatformMemAllocate((mDNSu32)(end - ptr) + 1)) == mDNSNULL) { LogMsg("ParseHttpUrl: can't mDNSPlatformMemAllocate path"); return mStatus_NoMemoryErr; }
                strncpy((char *)*path, ptr, end - ptr);
                (*path)[end - ptr] = '\0';
                }
@@ -302,7 +300,8 @@ mDNSlocal void handleLNTGetExternalAddressResponse(tcpLNTInfo *tcpInfo)
        mDNSu8     *ptr = (mDNSu8*)tcpInfo->Reply;
        mDNSu8     *end = (mDNSu8*)tcpInfo->Reply + tcpInfo->nread;
        mDNSu8     *addrend;
-       static char tagname[20] = "NewExternalIPAddress";               // Array NOT including a terminating nul
+       static char tagname[20] = { 'N','e','w','E','x','t','e','r','n','a','l','I','P','A','d','d','r','e','s','s' };
+       // Array NOT including a terminating nul
 
 //     LogInfo("handleLNTGetExternalAddressResponse: %s", ptr);
 
index 4d3df70..6b7c669 100644 (file)
@@ -1940,10 +1940,10 @@ DNSServiceErrorType DNSSD_API DNSServiceNATPortMappingCreate
 
 DNSServiceErrorType DNSSD_API DNSServiceConstructFullName
     (
-    char                            *fullName,
-    const char                      *service,      /* may be NULL */
-    const char                      *regtype,
-    const char                      *domain
+    char                            * const fullName,
+    const char                      * const service,      /* may be NULL */
+    const char                      * const regtype,
+    const char                      * const domain
     );
 
 
index 46d9653..ee1143a 100644 (file)
@@ -62,6 +62,7 @@
                int len;
                char * buffer;
                DWORD err = WSAGetLastError();
+               (void) priority;
                va_start( args, message );
                len = _vscprintf( message, args ) + 1;
                buffer = malloc( len * sizeof(char) );
@@ -138,14 +139,14 @@ struct _DNSRecordRef_t
        };
 
 // Write len bytes. Return 0 on success, -1 on error
-static int write_all(dnssd_sock_t sd, char *buf, int len)
+static int write_all(dnssd_sock_t sd, char *buf, size_t len)
        {
        // Don't use "MSG_WAITALL"; it returns "Invalid argument" on some Linux versions; use an explicit while() loop instead.
        //if (send(sd, buf, len, MSG_WAITALL) != len) return -1;
        while (len)
                {
-               ssize_t num_written = send(sd, buf, len, 0);
-               if (num_written < 0 || num_written > 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,
                        // or that the mDNSResponder daemon crashed (which should never happen).
@@ -193,7 +194,7 @@ static int more_bytes(dnssd_sock_t sd)
        fd_set readfds;
        FD_ZERO(&readfds);
        FD_SET(sd, &readfds);
-       return(select(sd+1, &readfds, (fd_set*)NULL, (fd_set*)NULL, &tv) > 0);
+       return(select((int)sd+1, &readfds, (fd_set*)NULL, (fd_set*)NULL, &tv) > 0);
        }
 
 /* create_hdr
@@ -834,18 +835,19 @@ static void handle_resolve_response(DNSServiceOp *const sdr, const CallbackHeade
 
        get_string(&data, end, fullname, kDNSServiceMaxDomainName);
        get_string(&data, end, target,   kDNSServiceMaxDomainName);
-       if (!data || data + 2 > end) data = NULL;
-       else
-               {
-               port.b[0] = *data++;
-               port.b[1] = *data++;
-               }
+       if (!data || data + 2 > end) goto fail;
+
+       port.b[0] = *data++;
+       port.b[1] = *data++;
        txtlen = get_uint16(&data, end);
        txtrecord = (unsigned char *)get_rdata(&data, end, txtlen);
 
-       if (!data) syslog(LOG_WARNING, "dnssd_clientstub handle_resolve_response: error reading result from daemon");
-       else ((DNSServiceResolveReply)sdr->AppCallback)(sdr, cbh->cb_flags, cbh->cb_interface, cbh->cb_err, fullname, target, port.s, txtlen, txtrecord, sdr->AppContext);
+       if (!data) goto fail;
+       ((DNSServiceResolveReply)sdr->AppCallback)(sdr, cbh->cb_flags, cbh->cb_interface, cbh->cb_err, fullname, target, port.s, txtlen, txtrecord, sdr->AppContext);
+       return;
        // MUST NOT touch sdr after invoking AppCallback -- client is allowed to dispose it from within callback function
+fail:
+       syslog(LOG_WARNING, "dnssd_clientstub handle_resolve_response: error reading result from daemon");
        }
 
 DNSServiceErrorType DNSSD_API DNSServiceResolve
@@ -1517,29 +1519,31 @@ DNSServiceErrorType DNSSD_API DNSServiceReconfirmRecord
 static void handle_port_mapping_response(DNSServiceOp *const sdr, const CallbackHeader *const cbh, const char *data, const char *const end)
        {
        union { uint32_t l; u_char b[4]; } addr;
-       uint8_t protocol = 0;
+       uint8_t protocol;
        union { uint16_t s; u_char b[2]; } internalPort;
        union { uint16_t s; u_char b[2]; } externalPort;
-       uint32_t ttl = 0;
-
-       if (!data || data + 13 > end) data = NULL;
-       else
-               {
-               addr        .b[0] = *data++;
-               addr        .b[1] = *data++;
-               addr        .b[2] = *data++;
-               addr        .b[3] = *data++;
-               protocol          = *data++;
-               internalPort.b[0] = *data++;
-               internalPort.b[1] = *data++;
-               externalPort.b[0] = *data++;
-               externalPort.b[1] = *data++;
-               ttl               = get_uint32(&data, end);
-               }
+       uint32_t ttl;
 
-       if (!data) syslog(LOG_WARNING, "dnssd_clientstub handle_port_mapping_response: error reading result from daemon");
-       else ((DNSServiceNATPortMappingReply)sdr->AppCallback)(sdr, cbh->cb_flags, cbh->cb_interface, cbh->cb_err, addr.l, protocol, internalPort.s, externalPort.s, ttl, sdr->AppContext);
+       if (!data || data + 13 > end) goto fail;
+
+       addr        .b[0] = *data++;
+       addr        .b[1] = *data++;
+       addr        .b[2] = *data++;
+       addr        .b[3] = *data++;
+       protocol          = *data++;
+       internalPort.b[0] = *data++;
+       internalPort.b[1] = *data++;
+       externalPort.b[0] = *data++;
+       externalPort.b[1] = *data++;
+       ttl               = get_uint32(&data, end);
+       if (!data) goto fail;
+
+       ((DNSServiceNATPortMappingReply)sdr->AppCallback)(sdr, cbh->cb_flags, cbh->cb_interface, cbh->cb_err, addr.l, protocol, internalPort.s, externalPort.s, ttl, sdr->AppContext);
+       return;
        // MUST NOT touch sdr after invoking AppCallback -- client is allowed to dispose it from within callback function
+
+fail:
+       syslog(LOG_WARNING, "dnssd_clientstub handle_port_mapping_response: error reading result from daemon");
        }
 
 DNSServiceErrorType DNSSD_API DNSServiceNATPortMappingCreate
index e4422de..c252e16 100644 (file)
@@ -47,6 +47,8 @@
 #      define dnssd_strerror(X)        win32_strerror(X)
 #      define ssize_t                          int
 #      define getpid                           _getpid
+#      define unlink                           _unlink
+extern char *win32_strerror(int inErrorCode);
 #else
 #      include <sys/types.h>
 #      include <unistd.h>
index 7ff467b..a425e58 100644 (file)
@@ -324,11 +324,11 @@ mDNSlocal reply_state *create_reply(const reply_op_t op, const size_t datalen, r
        if (!reply) FatalError("ERROR: malloc");
        
        reply->next     = mDNSNULL;
-       reply->totallen = datalen + sizeof(ipc_msg_hdr);
+       reply->totallen = (mDNSu32)datalen + sizeof(ipc_msg_hdr);
        reply->nwriten  = 0;
 
        reply->mhdr->version        = VERSION;
-       reply->mhdr->datalen        = datalen;
+       reply->mhdr->datalen        = (mDNSu32)datalen;
        reply->mhdr->ipc_flags      = 0;
        reply->mhdr->op             = op;
        reply->mhdr->client_context = request->hdr.client_context;
@@ -2376,7 +2376,7 @@ typedef packedstruct
 
 mDNSlocal void handle_getproperty_request(request_state *request)
        {
-       const mStatus BadParamErr = dnssd_htonl(mStatus_BadParamErr);
+       const mStatus BadParamErr = dnssd_htonl((mDNSu32)mStatus_BadParamErr);
        char prop[256];
        if (get_string(&request->msgptr, request->msgend, prop, sizeof(prop)) >= 0)
                {
@@ -2461,7 +2461,7 @@ mDNSlocal mStatus handle_port_mapping_request(request_state *request)
        DNSServiceFlags flags          = get_flags(&request->msgptr, request->msgend);
        mDNSu32         interfaceIndex = get_uint32(&request->msgptr, request->msgend);
        mDNSInterfaceID InterfaceID    = mDNSPlatformInterfaceIDfromInterfaceIndex(&mDNSStorage, interfaceIndex);
-       mDNSu8          protocol       = get_uint32(&request->msgptr, request->msgend);
+       mDNSu8          protocol       = (mDNSu8)get_uint32(&request->msgptr, request->msgend);
        (void)flags; // Unused
        if (interfaceIndex && !InterfaceID) return(mStatus_BadParamErr);
        if (request->msgptr + 8 > request->msgend) request->msgptr = NULL;
@@ -2768,7 +2768,7 @@ mDNSlocal void read_msg(request_state *req)
                        dnssd_sockaddr_t cliaddr;
 #if defined(USE_TCP_LOOPBACK)
                        mDNSOpaque16 port;
-                       int opt = 1;
+                       u_long opt = 1;
                        port.b[0] = req->msgptr[0];
                        port.b[1] = req->msgptr[1];
                        req->msgptr += 2;
@@ -2810,7 +2810,9 @@ mDNSlocal void read_msg(request_state *req)
                                return;
                                }
        
+#if !defined(USE_TCP_LOOPBACK)
 got_errfd:
+#endif
                        LogOperation("%3d: Error socket %d created %08X %08X", req->sd, req->errsd, req->hdr.client_context.u32[1], req->hdr.client_context.u32[0]);
 #if defined(_WIN32)
                        if (ioctlsocket(req->errsd, FIONBIO, &opt) != 0)
@@ -2846,9 +2848,6 @@ mDNSlocal void request_callback(int fd, short filter, void *info)
        {
        mStatus err = 0;
        request_state *req = info;
-#if defined(_WIN32)
-       u_long opt = 1;
-#endif
        mDNSs32 min_size = sizeof(DNSServiceFlags);
        (void)fd; // Unused
        (void)filter; // Unused
@@ -2979,7 +2978,7 @@ mDNSlocal void connect_callback(int fd, short filter, void *info)
        dnssd_socklen_t len = (dnssd_socklen_t) sizeof(cliaddr);
        dnssd_sock_t sd = accept(fd, (struct sockaddr*) &cliaddr, &len);
 #if defined(SO_NOSIGPIPE) || defined(_WIN32)
-       const unsigned long optval = 1;
+       unsigned long optval = 1;
 #endif
 
        (void)filter; // Unused
@@ -3069,9 +3068,6 @@ mDNSexport int udsserver_init(dnssd_sock_t skts[], mDNSu32 count)
        dnssd_sockaddr_t laddr;
        int ret;
        mDNSu32 i = 0;
-#if defined(_WIN32)
-       u_long opt = 1;
-#endif
 
        LogInfo("udsserver_init");