--- /dev/null	2010-02-22 20:36:18.000000000 -0700
+++ dlls/dnssd/Makefile.in	2010-02-21 23:13:47.000000000 -0700
@@ -0,0 +1,14 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = dnssd.dll
+IMPORTS   = kernel32 ntdll
+EXTRALIBS = @LIBDNSSD@
+
+C_SRCS = \
+	dnssd.c
+
+@MAKE_DLL_RULES@
+
+@DEPENDENCIES@  # everything below this line is overwritten by make depend
--- /dev/null	2010-02-22 20:36:18.000000000 -0700
+++ dlls/dnssd/dnssd.c	2010-02-22 02:35:01.000000000 -0700
@@ -0,0 +1,277 @@
+/*
+ * dnssd.dll thunk. Wraps Win32 DNS-SD function calls around a native
+ * implementation.
+ *
+ * Copyright 2010 C.W. Betts
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+#include <string.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include <dns_sd.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(dnssd);
+
+BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
+{
+    switch(fdwReason)
+    {
+        case DLL_WINE_PREATTACH:
+            return TRUE;  /* don't prefer native version */
+        case DLL_PROCESS_ATTACH:
+            DisableThreadLibraryCalls(hInstDLL);
+            break;
+        case DLL_PROCESS_DETACH:
+            break;
+    }
+    return TRUE;
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceGetProperty (char *attr,\
+void *result, uint32_t *size)
+{
+    return DNSServiceGetProperty(attr, result, size);    
+}
+
+int CDECL wine_DNSServiceRefSockFD(DNSServiceRef sdRef)
+{
+    return DNSServiceRefSockFD(sdRef);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceProcessResult(DNSServiceRef sdRef)
+{
+    return DNSServiceProcessResult(sdRef);
+}
+
+
+void CDECL wine_DNSServiceRefDeallocate(DNSServiceRef sdRef)
+{
+    DNSServiceRefDeallocate(sdRef);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceEnumerateDomains\
+(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceDomainEnumReply callBack, void *context)
+{
+    return DNSServiceEnumerateDomains(sdref, flags, interfaceIndex, callback, context);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceRegister \
+(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, const char *regtype, const char *domain, const char *host, uint16_t port, uint16_t txtLen, const void *txtRecord, DNSServiceRegisterReply callBack, void *context)
+{
+    return DNSServiceRegister(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context);
+}
+
+
+DNSServiceErrorType CDECL wine_DNSServiceAddRecord
+    (
+    DNSServiceRef                       sdRef,
+    DNSRecordRef                        *RecordRef,
+    DNSServiceFlags                     flags,
+    uint16_t                            rrtype,
+    uint16_t                            rdlen,
+    const void                          *rdata,
+    uint32_t                            ttl
+    )
+{
+    return DNSServiceAddRecord(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceUpdateRecord
+    (
+    DNSServiceRef sdRef,
+    DNSRecordRef RecordRef,
+    DNSServiceFlags flags,
+    uint16_t rdlen,
+    const void *rdata,
+    uint32_t ttl
+    )
+{
+    return DNSServiceUpdateRecord(sdRef, RecordRef, flags, rdlen, rdata, ttl);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceRemoveRecord \
+(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags)
+{
+    return DNSServiceRemoveRecord(sdRef, RecordRef, flags);
+}
+
+
+DNSServiceErrorType CDECL wine_DNSServiceBrowse
+    (
+    DNSServiceRef                       *sdRef,
+    DNSServiceFlags                     flags,
+    uint32_t                            interfaceIndex,
+    const char                          *regtype,
+    const char                          *domain,    /* may be NULL */
+    DNSServiceBrowseReply               callBack,
+    void                                *context    /* may be NULL */
+    )
+{
+    return DNSServiceBrowse(sdRef, flags, interfaceIndex, regtype, domain, callback, context);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceResolve
+    (
+    DNSServiceRef                       *sdRef,
+    DNSServiceFlags                     flags,
+    uint32_t                            interfaceIndex,
+    const char                          *name,
+    const char                          *regtype,
+    const char                          *domain,
+    DNSServiceResolveReply              callBack,
+    void                                *context  /* may be NULL */
+    )
+{
+    return DNSServiceResolve(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceCreateConnection(DNSServiceRef *sdRef)
+{
+    return DNSServiceCrateConnection(sdRef);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceRegisterRecord
+    (
+    DNSServiceRef                       sdRef,
+    DNSRecordRef                        *RecordRef,
+    DNSServiceFlags                     flags,
+    uint32_t                            interfaceIndex,
+    const char                          *fullname,
+    uint16_t                            rrtype,
+    uint16_t                            rrclass,
+    uint16_t                            rdlen,
+    const void                          *rdata,
+    uint32_t                            ttl,
+    DNSServiceRegisterRecordReply       callBack,
+    void                                *context    /* may be NULL */
+    )
+{
+    return DNSServiceRegisterRecord(sdRef, RecordRef, flags, interfaceIndex, fullname, rrtype, rrclass, rdlen, rdata, ttl, callBack, context);
+}
+
+DNSServiceErrorType CDECL wine_DNSServiceQueryRecord
+    (
+    DNSServiceRef                       *sdRef,
+    DNSServiceFlags                     flags,
+    uint32_t                            interfaceIndex,
+    const char                          *fullname,
+    uint16_t                            rrtype,
+    uint16_t                            rrclass,
+    DNSServiceQueryRecordReply          callBack,
+    void                                *context  /* may be NULL */
+    );
+{
+    return DNSServiceQueryRecord(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context);
+}
+
+void CDECL wine_DNSServiceReconfirmRecord
+    (
+    DNSServiceFlags                    flags,
+    uint32_t                           interfaceIndex,
+    const char                         *fullname,
+    uint16_t                           rrtype,
+    uint16_t                           rrclass,
+    uint16_t                           rdlen,
+    const void                         *rdata
+    )
+{
+    DNSServiceReconfirmRecord(flags, interfaceIndex, fullname, rrtype, rrclass, rdlen, rdata);
+}
+
+int CDECL wine_DNSServiceConstructFullName
+(char *fullName, const char *service, const char *regtype, const char *domain)
+{
+    return DNSServiceConstructFullName(fullName, service, regtype, domain);
+}
+
+void CDECL wine_TXTRecordCreate
+(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer)
+{
+    TXTRecordCreate(txtRecord, bufferLen, buffer);
+}
+
+void CDECL wine_TXTRecordDeallocate(TXTRecordRef *txtRecord)
+{
+    TXTRecordDeallocate(txtRecord);
+}
+
+DNSServiceErrorType CDECL wine_TXTRecordSetValue
+(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value)
+{
+    return TXTRecordSetValue(txtRecord, key, valueSize, value);
+}
+
+DNSServiceErrorType CDECL wine_TXTRecordRemoveValue
+(TXTRecordRef *txtRecord, const char *key)
+{
+    return TXTRecordRemoveValue(txtRecord, key);
+}
+
+uint16_t CDECL wine_TXTRecordGetLength(const TXTRecordRef *txtRecord)
+{
+    return TXTRecordGetLength(txtRecord);
+}
+
+const void * CDECL wine_TXTRecordGetBytesPtr(const TXTRecordRef *txtRecord)
+{
+    return TXTRecordGetBytesPtr(txtRecord);
+}
+
+int CDECL wine_TXTRecordContainsKey
+    (
+    uint16_t         txtLen,
+    const void       *txtRecord,
+    const char       *key
+    )
+{
+    return TXTRecordContainsKey(txtLen, txtRecord, key);
+}
+
+const void * CDECL wine_TXTRecordGetValuePtr
+    (uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen)
+{
+    return TXTRecordGetValuePtr(txtLen, txtRecord, key, valueLen);
+}
+
+uint16_t CDECL wine_TXTRecordGetCount
+    (
+    uint16_t         txtLen,
+    const void       *txtRecord
+    )
+{
+    return TXTRecordGetCount(txtLen, txtRecord);
+}
+
+DNSServiceErrorType CDECL wine_TXTRecordGetItemAtIndex
+    (
+    uint16_t         txtLen,
+    const void       *txtRecord,
+    uint16_t         index,
+    uint16_t         keyBufLen,
+    char             *key,
+    uint8_t          *valueLen,
+    const void       **value
+    )
+{
+    return TXTRecordGetItemAtIndex(txtLen, txtRecord, index, keyBufLen, key, valueLen, value);
+}
--- /dev/null	2010-02-22 20:36:18.000000000 -0700
+++ dlls/dnssd/dnssd.spec	2010-02-21 23:48:20.000000000 -0700
@@ -0,0 +1,26 @@
+@ cdecl DNSServiceGetProperty(ptr ptr ptr) wine_DNSServiceGetProperty
+@ cdecl DNSServiceRefSockFD(ptr) wine_DNSServiceRefSockFD
+@ cdecl DNSServiceProcessResult(ptr) wine_DNSServiceProcessResult
+@ cdecl DNSServiceRefDeallocate(ptr) wine_DNSServiceRefDeallocate
+@ cdecl DNSServiceEnumerateDomains(ptr long long ptr ptr) wine_DNSServiceEnumerateDomains
+@ cdecl DNSServiceRegister(ptr long long str str str str short short ptr ptr ptr) wine_DNSServiceRegister
+@ cdecl DNSServiceAddRecord(ptr ptr long short short ptr long) wine_DNSServiceAddRecord
+@ cdecl DNSServiceUpdateRecord(ptr ptr long short ptr long) wine_DNSServiceUpdateRecord
+@ cdecl DNSServiceRemoveRecord(ptr ptr long) wine_DNSServiceRemoveRecord
+@ cdecl DNSServiceBrowse(ptr long long str str ptr ptr) wine_DNSServiceBrowse
+@ cdecl DNSServiceResolve(ptr long long str str str ptr ptr) wine_DNSServiceResolve
+@ cdecl DNSServiceCreateConnection(ptr) wine_DNSServiceCreateConnection
+@ cdecl DNSServiceRegisterRecord(ptr ptr long long str short short short ptr long ptr ptr) wine_DNSServiceRegisterRecord
+@ cdecl DNSServiceQueryRecord(ptr long long str short short ptr ptr) wine_DNSServiceQueryRecord
+@ cdecl DNSServiceReconfirmRecord(long long str short short short ptr) wine_DNSServiceReconfirmRecord
+@ cdecl DNSServiceConstructFullName(str str str str) wine_DNSServiceConstructFullName
+@ cdecl TXTRecordCreate(ptr short ptr) wine_TXTRecordCreate
+@ cdecl TXTRecordDeallocate(ptr) wine_TXTRecordDeallocate
+@ cdecl TXTRecordSetValue(ptr str char ptr) wine_TXTRecordSetValue
+@ cdecl TXTRecordRemoveValue(ptr str) wine_TXTRecordRemoveValue
+@ cdecl TXTRecordGetLength(ptr) wine_TXTRecordGetLength
+@ cdecl TXTRecordGetBytesPtr(ptr) wine_TXTRecordGetBytesPtr
+@ cdecl TXTRecordContainsKey(short ptr str) wine_TXTRecordContainsKey
+@ cdecl TXTRecordGetValuePtr(short ptr str char) wine_TXTRecordGetValuePtr
+@ cdecl TXTRecordGetCount(short ptr) wine_TXTRecordGetCount
+@ cdecl TXTRecordGetItemAtIndex(short ptr short short str ptr ptr) wine_TXTRecordGetItemAtIndex
