Alistair Leslie-Hughes : dpnet: Implement IDirectPlay8Client SetSPCaps.

Alexandre Julliard julliard at winehq.org
Wed Aug 29 16:10:45 CDT 2018


Module: wine
Branch: master
Commit: 598b52ce38dc2b82910c390164eb95e8972df9b1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=598b52ce38dc2b82910c390164eb95e8972df9b1

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Tue Aug 28 02:13:33 2018 +0000

dpnet: Implement IDirectPlay8Client SetSPCaps.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dpnet/client.c       | 14 +++++++++++---
 dlls/dpnet/tests/client.c | 30 ++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/dlls/dpnet/client.c b/dlls/dpnet/client.c
index 3b3361f..ea491ef 100644
--- a/dlls/dpnet/client.c
+++ b/dlls/dpnet/client.c
@@ -309,9 +309,17 @@ static HRESULT WINAPI IDirectPlay8ClientImpl_SetCaps(IDirectPlay8Client *iface,
 static HRESULT WINAPI IDirectPlay8ClientImpl_SetSPCaps(IDirectPlay8Client *iface,
         const GUID * const pguidSP, const 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): stub\n", iface, pguidSP, pdpspCaps, dwFlags);
+
+    if(!This->msghandler || pdpspCaps->dwSize != sizeof(DPN_SP_CAPS))
+        return DPNERR_INVALIDPARAM;
+
+    /* Only dwSystemBufferSize is set by this call. */
+    This->spcaps.dwSystemBufferSize = pdpspCaps->dwSystemBufferSize;
+
+    return DPN_OK;
 }
 
 static HRESULT WINAPI IDirectPlay8ClientImpl_GetSPCaps(IDirectPlay8Client *iface,
diff --git a/dlls/dpnet/tests/client.c b/dlls/dpnet/tests/client.c
index 47d8b01..af56d85 100644
--- a/dlls/dpnet/tests/client.c
+++ b/dlls/dpnet/tests/client.c
@@ -140,6 +140,9 @@ static BOOL test_init_dp(void)
     hr = IDirectPlay8Client_Initialize(client, NULL, NULL, 0);
     ok(hr == DPNERR_INVALIDPARAM, "got %x\n", hr);
 
+    hr = IDirectPlay8Client_SetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0);
+    ok(hr == DPNERR_INVALIDPARAM, "SetSPCaps failed with %x\n", hr);
+
     hr = IDirectPlay8Client_Initialize(client, NULL, DirectPlayMessageHandler, 0);
     ok(hr == S_OK, "IDirectPlay8Client_Initialize failed with %x\n", hr);
 
@@ -415,6 +418,33 @@ static void test_get_sp_caps(void)
     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);
+
+    caps.dwNumThreads = 2;
+    caps.dwDefaultEnumCount = 3;
+    caps.dwDefaultEnumRetryInterval = 1400;
+    caps.dwDefaultEnumTimeout = 1400;
+    caps.dwMaxEnumPayloadSize = 900;
+    caps.dwBuffersPerThread = 2;
+    caps.dwSystemBufferSize = 0x0ffff;
+    hr = IDirectPlay8Client_SetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0);
+    ok(hr == DPN_OK, "SetSPCaps failed with %x\n", hr);
+
+    hr = IDirectPlay8Client_GetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0);
+    ok(hr == DPN_OK, "GetSPCaps failed with %x\n", hr);
+
+    ok(caps.dwSize == sizeof(DPN_SP_CAPS), "got %d\n", caps.dwSize);
+    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 == 0x0ffff, "expected 0x0ffff, got 0x%x\n", caps.dwSystemBufferSize);
+
+    /* Reset the System setting back to its default. */
+    caps.dwSystemBufferSize = 0x10000;
+    hr = IDirectPlay8Client_SetSPCaps(client, &CLSID_DP8SP_TCPIP, &caps, 0);
+    ok(hr == DPN_OK, "SetSPCaps failed with %x\n", hr);
 }
 
 static void test_lobbyclient(void)




More information about the wine-cvs mailing list