From b01fc1aa6e12b426b3f539c44196c92331bad874 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 7 May 2014 10:59:46 +1000 Subject: [PATCH] dpnet: Implement IDirectPlay8Client GetSPCaps. --- dlls/dpnet/client.c | 20 +++++++++++++++++--- dlls/dpnet/dpnet_private.h | 2 ++ dlls/dpnet/tests/client.c | 25 ++++++++++++++++--------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/dlls/dpnet/client.c b/dlls/dpnet/client.c index 43ffb59ead8..abcc5f7dd7a 100644 --- a/dlls/dpnet/client.c +++ b/dlls/dpnet/client.c @@ -234,9 +234,21 @@ static HRESULT WINAPI IDirectPlay8ClientImpl_SetSPCaps(IDirectPlay8Client *iface static HRESULT WINAPI IDirectPlay8ClientImpl_GetSPCaps(IDirectPlay8Client *iface, const GUID * const pguidSP, DPN_SP_CAPS * const pdpspCaps, const DWORD dwFlags) { - IDirectPlay8ClientImpl *This = impl_from_IDirectPlay8Client(iface); - FIXME("(%p):(%x): Stub\n", This, dwFlags); - return DPN_OK; + IDirectPlay8ClientImpl *This = impl_from_IDirectPlay8Client(iface); + + TRACE("(%p)->(%p,%p,%x)\n", This, pguidSP, pdpspCaps, dwFlags); + + if(!This->msghandler) + return DPNERR_UNINITIALIZED; + + if(pdpspCaps->dwSize != sizeof(DPN_SP_CAPS)) + { + return DPNERR_INVALIDPARAM; + } + + *pdpspCaps = This->spcaps; + + return DPN_OK; } static HRESULT WINAPI IDirectPlay8ClientImpl_GetConnectionInfo(IDirectPlay8Client *iface, @@ -301,6 +313,8 @@ HRESULT DPNET_CreateDirectPlay8Client(IClassFactory *iface, IUnknown *pUnkOuter, client->IDirectPlay8Client_iface.lpVtbl = &DirectPlay8Client_Vtbl; client->ref = 1; + init_dpn_sp_caps(&client->spcaps); + hr = IDirectPlay8ClientImpl_QueryInterface(&client->IDirectPlay8Client_iface, riid, ppv); IDirectPlay8ClientImpl_Release(&client->IDirectPlay8Client_iface); diff --git a/dlls/dpnet/dpnet_private.h b/dlls/dpnet/dpnet_private.h index 46aa8d56e65..af81474cc99 100644 --- a/dlls/dpnet/dpnet_private.h +++ b/dlls/dpnet/dpnet_private.h @@ -53,6 +53,8 @@ struct IDirectPlay8ClientImpl PFNDPNMESSAGEHANDLER msghandler; DWORD flags; void *usercontext; + + DPN_SP_CAPS spcaps; }; /* ------------------- */ diff --git a/dlls/dpnet/tests/client.c b/dlls/dpnet/tests/client.c index 0df99dd039b..bf0d26f474b 100644 --- a/dlls/dpnet/tests/client.c +++ b/dlls/dpnet/tests/client.c @@ -36,6 +36,7 @@ static HRESULT WINAPI DirectPlayMessageHandler(PVOID context, DWORD message_id, static BOOL test_init_dp(void) { HRESULT hr; + DPN_SP_CAPS caps; hr = CoInitialize(0); ok(hr == S_OK, "CoInitialize failed with %x\n", hr); @@ -43,6 +44,12 @@ static BOOL test_init_dp(void) hr = CoCreateInstance(&CLSID_DirectPlay8Client, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectPlay8Client, (void **)&client); ok(hr == S_OK, "CoCreateInstance failed with 0x%x\n", hr); + memset(&caps, 0, sizeof(DPN_SP_CAPS)); + caps.dwSize = sizeof(DPN_SP_CAPS); + + hr = IDirectPlay8Client_GetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0); + ok(hr == DPNERR_UNINITIALIZED, "GetSPCaps failed with %x\n", hr); + hr = IDirectPlay8Client_Initialize(client, NULL, NULL, 0); ok(hr == DPNERR_INVALIDPARAM, "got %x\n", hr); @@ -160,24 +167,24 @@ static void test_get_sp_caps(void) memset(&caps, 0, sizeof(DPN_SP_CAPS)); hr = IDirectPlay8Client_GetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0); - todo_wine ok(hr == DPNERR_INVALIDPARAM, "GetSPCaps unexpectedly returned %x\n", hr); + ok(hr == DPNERR_INVALIDPARAM, "GetSPCaps unexpectedly returned %x\n", hr); caps.dwSize = sizeof(DPN_SP_CAPS); hr = IDirectPlay8Client_GetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0); ok(hr == DPN_OK, "GetSPCaps failed with %x\n", hr); - todo_wine ok((caps.dwFlags & + ok((caps.dwFlags & (DPNSPCAPS_SUPPORTSDPNSRV | DPNSPCAPS_SUPPORTSBROADCAST | DPNSPCAPS_SUPPORTSALLADAPTERS)) == (DPNSPCAPS_SUPPORTSDPNSRV | DPNSPCAPS_SUPPORTSBROADCAST | DPNSPCAPS_SUPPORTSALLADAPTERS), "unexpected flags %x\n", caps.dwFlags); - todo_wine ok(caps.dwNumThreads >= 3, "got %d\n", caps.dwNumThreads); - todo_wine ok(caps.dwDefaultEnumCount == 5, "expected 5, got %d\n", caps.dwDefaultEnumCount); - todo_wine ok(caps.dwDefaultEnumRetryInterval == 1500, "expected 1500, got %d\n", caps.dwDefaultEnumRetryInterval); - todo_wine ok(caps.dwDefaultEnumTimeout == 1500, "expected 1500, got %d\n", caps.dwDefaultEnumTimeout); - todo_wine ok(caps.dwMaxEnumPayloadSize == 983, "expected 983, got %d\n", caps.dwMaxEnumPayloadSize); - todo_wine ok(caps.dwBuffersPerThread == 1, "expected 1, got %d\n", caps.dwBuffersPerThread); - todo_wine ok(caps.dwSystemBufferSize == 0x10000 || broken(caps.dwSystemBufferSize == 0x2000 /* before Win8 */), + ok(caps.dwNumThreads >= 3, "got %d\n", caps.dwNumThreads); + ok(caps.dwDefaultEnumCount == 5, "expected 5, got %d\n", caps.dwDefaultEnumCount); + ok(caps.dwDefaultEnumRetryInterval == 1500, "expected 1500, got %d\n", caps.dwDefaultEnumRetryInterval); + ok(caps.dwDefaultEnumTimeout == 1500, "expected 1500, got %d\n", caps.dwDefaultEnumTimeout); + ok(caps.dwMaxEnumPayloadSize == 983, "expected 983, got %d\n", caps.dwMaxEnumPayloadSize); + ok(caps.dwBuffersPerThread == 1, "expected 1, got %d\n", caps.dwBuffersPerThread); + ok(caps.dwSystemBufferSize == 0x10000 || broken(caps.dwSystemBufferSize == 0x2000 /* before Win8 */), "expected 0x10000, got 0x%x\n", caps.dwSystemBufferSize); } -- 2.11.4.GIT