Louis Lenders : dpnet: Return a TCP/ IP provider in IDirectPlay8PeerImpl_EnumServiceProviders.
Alexandre Julliard
julliard at winehq.org
Fri Sep 23 10:56:52 CDT 2011
Module: wine
Branch: master
Commit: 4a4678ca70321b74b9f0538138b73e882f552e95
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4a4678ca70321b74b9f0538138b73e882f552e95
Author: Louis Lenders <xerox_xerox2000 at yahoo.co.uk>
Date: Sun Sep 18 22:26:49 2011 +0200
dpnet: Return a TCP/IP provider in IDirectPlay8PeerImpl_EnumServiceProviders.
---
dlls/dpnet/peer.c | 49 +++++++++++++++++++++++++++++++++++++++++++++-
dlls/dpnet/tests/peer.c | 17 ++++++++-------
2 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/dlls/dpnet/peer.c b/dlls/dpnet/peer.c
index f4d238a..307b306 100644
--- a/dlls/dpnet/peer.c
+++ b/dlls/dpnet/peer.c
@@ -95,8 +95,53 @@ static HRESULT WINAPI IDirectPlay8PeerImpl_EnumServiceProviders(IDirectPlay8Peer
DPN_SERVICE_PROVIDER_INFO * const pSPInfoBuffer, DWORD * const pcbEnumData,
DWORD * const pcReturned, const DWORD dwFlags)
{
- FIXME("(%p)->(%p,%p,%p,%p,%p,%x): stub\n", iface, pguidServiceProvider, pguidApplication, pSPInfoBuffer, pcbEnumData, pcReturned, dwFlags);
- return DPNERR_GENERIC;
+ static const WCHAR dp_providerW[] = {'D','i','r','e','c','t','P','l','a','y','8',' ','T','C','P','/','I','P',' ',
+ 'S','e','r','v','i','c','e',' ','P','r','o','v','i','d','e','r','\0'};
+ static const WCHAR dp_adapterW[] = {'L','o','c','a','l',' ','A','r','e','a',' ','C','o','n','n','e','c','t','i','o','n',
+ ' ','-',' ','I','P','v','4','\0'};
+
+ static const GUID adapter_guid = {0x4ce725f6, 0xd3c0, 0xdade, {0xba, 0x6f, 0x11, 0xf9, 0x65, 0xbc, 0x42, 0x99}};
+ DWORD req_size;
+
+ TRACE("(%p)->(%p,%p,%p,%p,%p,%x): stub\n", iface, pguidServiceProvider, pguidApplication, pSPInfoBuffer,
+ pcbEnumData, pcReturned, dwFlags);
+
+ if(!pguidServiceProvider)
+ {
+ req_size = sizeof(DPN_SERVICE_PROVIDER_INFO) + sizeof(dp_providerW);
+ }
+ else if(IsEqualGUID(pguidServiceProvider, &CLSID_DP8SP_TCPIP))
+ {
+ req_size = sizeof(DPN_SERVICE_PROVIDER_INFO) + sizeof(dp_adapterW);
+ }
+ else
+ {
+ FIXME("Application requested a provider we don't handle (yet)\n");
+ *pcReturned = 0;
+ return DPNERR_DOESNOTEXIST;
+ }
+
+ if(*pcbEnumData < req_size)
+ {
+ *pcbEnumData = req_size;
+ return DPNERR_BUFFERTOOSMALL;
+ }
+
+ pSPInfoBuffer->pwszName = (LPWSTR)(pSPInfoBuffer + sizeof(DPN_SERVICE_PROVIDER_INFO));
+
+ if(!pguidServiceProvider)
+ {
+ lstrcpyW(pSPInfoBuffer->pwszName, dp_providerW);
+ pSPInfoBuffer->guid = CLSID_DP8SP_TCPIP;
+ }
+ else
+ {
+ lstrcpyW(pSPInfoBuffer->pwszName, dp_adapterW);
+ pSPInfoBuffer->guid = adapter_guid;
+ }
+
+ *pcReturned = 1;
+ return DPN_OK;
}
static HRESULT WINAPI IDirectPlay8PeerImpl_CancelAsyncOperation(IDirectPlay8Peer *iface,
diff --git a/dlls/dpnet/tests/peer.c b/dlls/dpnet/tests/peer.c
index 1d6dfc9..67e0ace 100644
--- a/dlls/dpnet/tests/peer.c
+++ b/dlls/dpnet/tests/peer.c
@@ -67,14 +67,14 @@ static void test_enum_service_providers(void)
items = 0;
hr = IDirectPlay8Peer_EnumServiceProviders(peer, NULL, NULL, NULL, &size, &items, 0);
- todo_wine ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
- todo_wine ok(size != 0, "size is unexpectedly 0\n");
+ ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
+ ok(size != 0, "size is unexpectedly 0\n");
serv_prov_info = (DPN_SERVICE_PROVIDER_INFO*) HeapAlloc(GetProcessHeap(), 0, size);
hr = IDirectPlay8Peer_EnumServiceProviders(peer, NULL, NULL, serv_prov_info, &size, &items, 0);
- todo_wine ok(hr == S_OK, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
- todo_wine ok(items != 0, "Found unexpectedly no service providers\n");
+ ok(hr == S_OK, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
+ ok(items != 0, "Found unexpectedly no service providers\n");
trace("number of items found: %d\n", items);
@@ -93,14 +93,15 @@ static void test_enum_service_providers(void)
items = 0;
hr = IDirectPlay8Peer_EnumServiceProviders(peer, &CLSID_DP8SP_TCPIP, NULL, NULL, &size, &items, 0);
- todo_wine ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
- todo_wine ok(size != 0, "size is unexpectedly 0\n");
+ ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
+ ok(size != 0, "size is unexpectedly 0\n");
serv_prov_info = (DPN_SERVICE_PROVIDER_INFO*) HeapAlloc(GetProcessHeap(), 0, size);
hr = IDirectPlay8Peer_EnumServiceProviders(peer, &CLSID_DP8SP_TCPIP, NULL, serv_prov_info, &size, &items, 0);
- todo_wine ok(hr == S_OK, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
- todo_wine ok(items != 0, "Found unexpectedly no adapter\n");
+ ok(hr == S_OK, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
+ ok(items != 0, "Found unexpectedly no adapter\n");
+
for (i=0;i<items;i++)
{
More information about the wine-cvs
mailing list