[2/3] dpvoice: Add IDirectPlayVoiceServer support
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Mon Sep 22 23:42:01 CDT 2014
Hi,
Changelog:
dpvoice: Add IDirectPlayVoiceServer support
Best Regards
Alistair Leslie-Hughes
-------------- next part --------------
>From 37d5fa1d166fd4e56d7947d5603f76061bc57799 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Tue, 23 Sep 2014 14:26:15 +1000
Subject: [PATCH] Add IDirectPlayVoiceServer support
To: wine-patches <wine-patches at winehq.org>
---
dlls/dpvoice/Makefile.in | 3 +-
dlls/dpvoice/dvoice_private.h | 1 +
dlls/dpvoice/main.c | 1 +
dlls/dpvoice/server.c | 196 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 200 insertions(+), 1 deletion(-)
create mode 100644 dlls/dpvoice/server.c
diff --git a/dlls/dpvoice/Makefile.in b/dlls/dpvoice/Makefile.in
index 186a44e..25334b5 100644
--- a/dlls/dpvoice/Makefile.in
+++ b/dlls/dpvoice/Makefile.in
@@ -3,7 +3,8 @@ IMPORTS = dxguid uuid
C_SRCS = \
client.c \
- main.c
+ main.c \
+ server.c
RC_SRCS = version.rc
diff --git a/dlls/dpvoice/dvoice_private.h b/dlls/dpvoice/dvoice_private.h
index a008924..0ee2658 100644
--- a/dlls/dpvoice/dvoice_private.h
+++ b/dlls/dpvoice/dvoice_private.h
@@ -21,5 +21,6 @@
#define __DVOICE_PRIVATE_H__
extern HRESULT DPVOICE_CreateDirectPlayVoiceClient(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
+extern HRESULT DPVOICE_CreateDirectPlayVoiceServer(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
#endif
diff --git a/dlls/dpvoice/main.c b/dlls/dpvoice/main.c
index 84f739c..608d1cd 100644
--- a/dlls/dpvoice/main.c
+++ b/dlls/dpvoice/main.c
@@ -95,6 +95,7 @@ static const IClassFactoryVtbl DICF_Vtbl = {
static IClassFactoryImpl DPVOICE_CFS[] =
{
{ { &DICF_Vtbl }, 1, &CLSID_DirectPlayVoiceClient, DPVOICE_CreateDirectPlayVoiceClient },
+ { { &DICF_Vtbl }, 1, &CLSID_DirectPlayVoiceServer, DPVOICE_CreateDirectPlayVoiceServer },
{ { NULL }, 0, NULL, NULL }
};
diff --git a/dlls/dpvoice/server.c b/dlls/dpvoice/server.c
new file mode 100644
index 0000000..f160cb3
--- /dev/null
+++ b/dlls/dpvoice/server.c
@@ -0,0 +1,196 @@
+ /*
+ * DirectPlay Voice Server Interface
+ *
+ * Copyright (C) 2014 Alistair Leslie-Hughes
+ *
+ * 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>
+
+#define COBJMACROS
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "objbase.h"
+
+#include "wine/unicode.h"
+#include "wine/debug.h"
+
+#include "dvoice.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dpvoice);
+
+typedef struct IDirectPlayVoiceServerImpl
+{
+ IDirectPlayVoiceServer IDirectPlayVoiceServer_iface;
+ LONG ref;
+} IDirectPlayVoiceServerImpl;
+
+static inline IDirectPlayVoiceServerImpl *impl_from_IDirectPlayVoiceServer(IDirectPlayVoiceServer *iface)
+{
+ return CONTAINING_RECORD(iface, IDirectPlayVoiceServerImpl, IDirectPlayVoiceServer_iface);
+}
+
+static HRESULT WINAPI dpvserver_QueryInterface(IDirectPlayVoiceServer *iface, REFIID riid, void **ppv)
+{
+ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectPlayVoiceServer))
+ {
+ IUnknown_AddRef(iface);
+ *ppv = iface;
+ return S_OK;
+ }
+
+ WARN("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dpvserver_AddRef(IDirectPlayVoiceServer *iface)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ return ref;
+}
+static ULONG WINAPI dpvserver_Release(IDirectPlayVoiceServer *iface)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ if (!ref)
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI dpvserver_Initialize(IDirectPlayVoiceServer *iface, IUnknown *lpVoid, PDVMESSAGEHANDLER pMessageHandler,
+ void *pUserContext, DWORD *lpdwMessageMask, DWORD dwMessageMaskElements)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p %p %p %p %d\n", This, lpVoid, pMessageHandler, pUserContext,lpdwMessageMask, dwMessageMaskElements);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_StartSession(IDirectPlayVoiceServer *iface, PDVSESSIONDESC pSessionDesc, DWORD dwFlags)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p %d\n", This, pSessionDesc, dwFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_StopSession(IDirectPlayVoiceServer *iface, DWORD dwFlags)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %d\n", This, dwFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_GetSessionDesc(IDirectPlayVoiceServer *iface, PDVSESSIONDESC pvSessionDesc)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p\n", This, pvSessionDesc);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_SetSessionDesc(IDirectPlayVoiceServer *iface, PDVSESSIONDESC pSessionDesc)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p\n", This, pSessionDesc);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_GetCaps(IDirectPlayVoiceServer *iface, PDVCAPS pDVCaps)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p\n", This, pDVCaps);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_GetCompressionTypes(IDirectPlayVoiceServer *iface, void *pData, DWORD *pdwDataSize,
+ DWORD *pdwNumElements, DWORD dwFlags)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p %p %p %d\n", This, pData, pdwDataSize, pdwNumElements, dwFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_SetTransmitTargets(IDirectPlayVoiceServer *iface, DVID dvSource, PDVID pdvIDTargets,
+ DWORD dwNumTargets, DWORD dwFlags)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %d %p %d %d\n", This, dvSource, pdvIDTargets, dwNumTargets, dwFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_GetTransmitTargets(IDirectPlayVoiceServer *iface, DVID dvSource, PDVID pdvIDTargets,
+ DWORD *pdwNumTargets, DWORD dwFlags)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %d %p %p %d\n", This, dvSource, pdvIDTargets, pdwNumTargets, dwFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dpvserver_SetNotifyMask(IDirectPlayVoiceServer *iface, DWORD *pdwMessageMask, DWORD dwMessageMaskElements)
+{
+ IDirectPlayVoiceServerImpl *This = impl_from_IDirectPlayVoiceServer(iface);
+ FIXME("%p %p %d\n", This, pdwMessageMask, dwMessageMaskElements);
+ return E_NOTIMPL;
+}
+
+static const IDirectPlayVoiceServerVtbl DirectPlayVoiceServer_Vtbl =
+{
+ dpvserver_QueryInterface,
+ dpvserver_AddRef,
+ dpvserver_Release,
+ dpvserver_Initialize,
+ dpvserver_StartSession,
+ dpvserver_StopSession,
+ dpvserver_GetSessionDesc,
+ dpvserver_SetSessionDesc,
+ dpvserver_GetCaps,
+ dpvserver_GetCompressionTypes,
+ dpvserver_SetTransmitTargets,
+ dpvserver_GetTransmitTargets,
+ dpvserver_SetNotifyMask
+};
+
+HRESULT DPVOICE_CreateDirectPlayVoiceServer(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj)
+{
+ IDirectPlayVoiceServerImpl* server;
+ HRESULT ret;
+
+ TRACE("(%p, %s, %p)\n", pUnkOuter, debugstr_guid(riid), ppobj);
+
+ *ppobj = NULL;
+
+ server = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectPlayVoiceServerImpl));
+ if (!server)
+ return E_OUTOFMEMORY;
+
+ server->IDirectPlayVoiceServer_iface.lpVtbl = &DirectPlayVoiceServer_Vtbl;
+ server->ref = 1;
+
+ ret = IDirectPlayVoiceServer_QueryInterface(&server->IDirectPlayVoiceServer_iface, riid, ppobj);
+ IDirectPlayVoiceServer_Release(&server->IDirectPlayVoiceServer_iface);
+
+ return ret;
+}
\ No newline at end of file
--
1.9.1
More information about the wine-patches
mailing list