[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