[PATCH 4/4] Implement IDirectPlayNatHelper stub

Maarten Lankhorst m.b.lankhorst at gmail.com
Sat May 26 07:02:49 CDT 2007


-------------- next part --------------
>From 982e165796046eb7b33a67128d1d3ce20dc24727 Mon Sep 17 00:00:00 2001
From: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Sat, 26 May 2007 13:48:50 +0200
Subject: [PATCH 4/4] dpnhupnp: Implement IDirectPlayNatHelper stub

---
 dlls/dpnhupnp/dpnhupnp_main.c |  165 +++++++++++++++++++++++++++++++++++++++--
 tools/wine.inf                |    1 +
 2 files changed, 160 insertions(+), 6 deletions(-)

diff --git a/dlls/dpnhupnp/dpnhupnp_main.c b/dlls/dpnhupnp/dpnhupnp_main.c
index d056952..54b9a6a 100644
--- a/dlls/dpnhupnp/dpnhupnp_main.c
+++ b/dlls/dpnhupnp/dpnhupnp_main.c
@@ -39,7 +39,7 @@
 #include "strmif.h"
 
 #include "winsock2.h"
-#include "guiddef.h"
+#include "initguid.h"
 #include "dpnathlp.h"
 
 #include "wine/unicode.h"
@@ -58,11 +58,8 @@ static WCHAR const tmodel_keyname[15] = {'T','h','r','e','a','d','i','n','g','M'
 static WCHAR const tmodel_both[] = {'B','o','t','h',0};
 static LONG objects_ref;
 static LONG server_locks;
-/*
 static WCHAR const nathelperupnp[] = { 'D','i','r','e','c','t','P','l','a','y',' ','N','A','T',' ',
                                        'H','e','l','p','e','r',' ','U','P','n','P',' ','O','b','j','e','c','t',0};
- */
-
 
 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 {
@@ -89,6 +86,8 @@ HRESULT WINAPI DllCanUnloadNow(void)
 
 typedef IUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);
 
+static CALLBACK IUnknown* Create_UPNP(LPUNKNOWN pUnkOuter, HRESULT *phr);
+
 typedef struct tagCFactoryTemplate {
     const WCHAR *m_Name;
     const CLSID *m_ClsID;
@@ -96,13 +95,11 @@ typedef struct tagCFactoryTemplate {
 } CFactoryTemplate;
 
 static CFactoryTemplate const g_cTemplates[] = {
-#if 0
     {
         nathelperupnp,
         &CLSID_DirectPlayNATHelpUPnP,
         Create_UPNP
     },
-#endif
 };
 
 static const int g_numTemplates = sizeof(g_cTemplates) / sizeof(g_cTemplates[0]);
@@ -381,3 +378,159 @@ HRESULT WINAPI DirectPlayNATHelpCreate(const LPGUID pIID, void ** ppvInterface)
     FIXME("Stub!\n");
     return E_FAIL;
 }
+
+static const IDirectPlayNATHelpVtbl nat_Vtbl;
+
+typedef struct NatImpl
+{
+    const IDirectPlayNATHelpVtbl * lpVtbl;
+    LONG ref;
+} NatImpl;
+
+static CALLBACK IUnknown* Create_UPNP(LPUNKNOWN pUnkOuter, HRESULT *phr)
+{
+    NatImpl *nat;
+    TRACE("%p, %p\n", pUnkOuter, phr);
+
+    if (pUnkOuter)
+    {
+        FIXME("Does this class support aggregration?\n");
+        *phr = CLASS_E_NOAGGREGATION;
+        return NULL;
+    }
+
+    nat = CoTaskMemAlloc(sizeof(*nat));
+    if (nat)
+    {
+        nat->lpVtbl = &nat_Vtbl;
+        nat->ref = 1;
+        *phr = S_OK;
+        InterlockedIncrement(&objects_ref);
+    }
+    else
+        *phr = E_OUTOFMEMORY;
+    return (IUnknown *)nat;
+}
+
+static HRESULT WINAPI nat_QueryInterface(IDirectPlayNATHelp *iface, REFIID riid, LPVOID * ppv)
+{
+    if (IsEqualIID(riid, &IID_IUnknown))
+        *ppv = iface;
+    else if (IsEqualIID(riid, &IID_IDirectPlayNATHelp))
+        *ppv = iface;
+    else
+    {
+        FIXME("Unsupported interface: %s\n", debugstr_guid(riid));
+        *ppv = NULL;
+        return E_NOINTERFACE;
+    }
+    IUnknown_AddRef((IUnknown *)*ppv);
+    return S_OK;
+}
+
+static ULONG WINAPI nat_AddRef(IDirectPlayNATHelp *iface)
+{
+    NatImpl *nat = (NatImpl*) iface;
+    ULONG refcnt = InterlockedIncrement(&nat->ref);
+
+    TRACE("%p -> %d\n", iface, refcnt);
+    return refcnt;
+}
+
+static ULONG WINAPI nat_Release(IDirectPlayNATHelp *iface)
+{
+    NatImpl *nat = (NatImpl*) iface;
+    ULONG refcnt = InterlockedDecrement(&nat->ref);
+
+    TRACE("%p -> %d\n", iface, refcnt);
+    if (!refcnt)
+    {
+        nat->lpVtbl = NULL;
+        CoTaskMemFree(nat);
+        InterlockedDecrement(&objects_ref);
+    }
+    return refcnt;
+}
+
+static WINAPI HRESULT nat_Initialize (IDirectPlayNATHelp *iface, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_Close(IDirectPlayNATHelp *iface, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_GetCaps(IDirectPlayNATHelp *iface, const PDPNHCAPS pCaps, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_RegisterPorts(IDirectPlayNATHelp *iface, const PSOCKADDR aLocalAddresses, const DWORD dwAddressSize,
+                                        const DWORD dwAddresses, const DWORD dwTime, const PDPNHHANDLE phRegisteredPorts, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_GetRegisteredAddresses(IDirectPlayNATHelp *iface, const PDPNHHANDLE hRegisteredPorts,
+                                                 const PSOCKADDR paPublicAddresses, const DWORD *dwAddressSize, const DWORD *dwAddressFlags,
+                                                 const DWORD *dwRemaining, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_DeregisterPorts(IDirectPlayNATHelp *iface, const DPNHHANDLE hRegPorts, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_QueryAddress(IDirectPlayNATHelp *iface, const PSOCKADDR pSource, const PSOCKADDR pQuery, const PSOCKADDR pResponse,
+                                       const INT iAddresses, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_SetAlertEvent(IDirectPlayNATHelp *iface, const HANDLE hEvent, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_SetAlertIOCompletionPort(IDirectPlayNATHelp *iface, const HANDLE hIOCompletionPort, const DWORD dwCompletion,
+                                                   const DWORD dwMaxThreads, const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT nat_ExtendRegisteredPortsLease(IDirectPlayNATHelp *iface, const DPNHHANDLE hRegisteredPorts, const DWORD dwLeaseTime,
+                                                     const DWORD dwFlags)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+static const IDirectPlayNATHelpVtbl nat_Vtbl =
+{
+    nat_QueryInterface,
+    nat_AddRef,
+    nat_Release,
+    nat_Initialize,
+    nat_Close,
+    nat_GetCaps,
+    nat_RegisterPorts,
+    nat_GetRegisteredAddresses,
+    nat_DeregisterPorts,
+    nat_QueryAddress,
+    nat_SetAlertEvent,
+    nat_SetAlertIOCompletionPort,
+    nat_ExtendRegisteredPortsLease
+};
diff --git a/tools/wine.inf b/tools/wine.inf
index 9a71005..ea435f0 100644
--- a/tools/wine.inf
+++ b/tools/wine.inf
@@ -2129,6 +2129,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
 11,,dmusic.dll,1
 11,,dplayx.dll,1
 11,,dpnet.dll,1
+11,,dpnhupnp,1
 11,,dsound.dll,1
 11,,dswave.dll,1
 11,,dxdiagn.dll,1
-- 
1.4.4.2



More information about the wine-patches mailing list