[PATCH 3/4] dplayx: Missing parameter checks, updated tests
Ismael Barros
razielmine at gmail.com
Mon Jul 20 10:52:51 CDT 2009
---
dlls/dplayx/dplay.c | 242 +++++++++++++++++++++------
dlls/dplayx/dplaysp.c | 2 +-
dlls/dplayx/tests/dplayx.c | 389 ++++++++++++++++++++++++--------------------
3 files changed, 403 insertions(+), 230 deletions(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 0c33bb3..31ca31a 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -872,6 +872,11 @@ static HRESULT DP_IF_Close( IDirectPlay2Impl* This, BOOL bAnsi )
hr = (*This->dp2->spData.lpCB->Close)();
}
+ if ( !FAILED(hr) )
+ {
+ This->dp2->bConnectionOpen = FALSE;
+ }
+
return hr;
}
@@ -988,11 +993,6 @@ static HRESULT DP_IF_CreateGroup
This, lpMsgHdr, lpidGroup, lpGroupName, lpData, dwDataSize,
dwFlags, bAnsi );
- if( This->dp2->connectionInitialized == NO_PROVIDER )
- {
- return DPERR_UNINITIALIZED;
- }
-
/* If the name is not specified, we must provide one */
if( DPID_UNKNOWN == *lpidGroup )
{
@@ -1100,9 +1100,24 @@ static HRESULT WINAPI DirectPlay2AImpl_CreateGroup
( LPDIRECTPLAY2A iface, LPDPID lpidGroup, LPDPNAME lpGroupName,
LPVOID lpData, DWORD dwDataSize, DWORD dwFlags )
{
+ IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidGroup == NULL ||
+ !This->dp2->bConnectionOpen ||
+ dwDataSize >= MAXDWORD ||
+ ( lpData == NULL && dwDataSize != 0 ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
*lpidGroup = DPID_UNKNOWN;
- return DP_IF_CreateGroup( (IDirectPlay2AImpl*)iface, NULL, lpidGroup,
+ return DP_IF_CreateGroup( This, NULL, lpidGroup,
lpGroupName, lpData, dwDataSize, dwFlags, TRUE );
}
@@ -1110,9 +1125,24 @@ static HRESULT WINAPI DirectPlay2WImpl_CreateGroup
( LPDIRECTPLAY2 iface, LPDPID lpidGroup, LPDPNAME lpGroupName,
LPVOID lpData, DWORD dwDataSize, DWORD dwFlags )
{
+ IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidGroup == NULL ||
+ !This->dp2->bConnectionOpen ||
+ dwDataSize >= MAXDWORD ||
+ ( lpData == NULL && dwDataSize != 0 ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
*lpidGroup = DPID_UNKNOWN;
- return DP_IF_CreateGroup( (IDirectPlay2AImpl*)iface, NULL, lpidGroup,
+ return DP_IF_CreateGroup( This, NULL, lpidGroup,
lpGroupName, lpData, dwDataSize, dwFlags, FALSE );
}
@@ -1385,10 +1415,6 @@ static HRESULT DP_IF_CreatePlayer
TRACE( "(%p)->(%p,%p,%p,%p,0x%08x,0x%08x,%u)\n",
This, lpidPlayer, lpPlayerName, hEvent, lpData,
dwDataSize, dwFlags, bAnsi );
- if( This->dp2->connectionInitialized == NO_PROVIDER )
- {
- return DPERR_UNINITIALIZED;
- }
if( dwFlags == 0 )
{
@@ -1460,9 +1486,17 @@ static HRESULT DP_IF_CreatePlayer
}
else
{
- /* FIXME: Would be nice to perhaps verify that we don't already have
- * this player.
- */
+ /* Verify that we don't already have this player */
+
+ lpPlayerList lpPlayers = NULL;
+ DPQ_FIND_ENTRY( This->dp2->lpSysGroup->players, players,
+ lpPData->dpid, ==, *lpidPlayer, lpPlayers );
+
+ if (lpPlayers != NULL)
+ {
+ return DPERR_CANTCREATEPLAYER;
+ }
+
}
/* We pass creation flags, so we can distinguish sysplayers and not count them in the current
@@ -1588,11 +1622,21 @@ static HRESULT WINAPI DirectPlay2AImpl_CreatePlayer
{
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
- if( lpidPlayer == NULL )
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidPlayer == NULL || !This->dp2->bConnectionOpen )
{
return DPERR_INVALIDPARAMS;
}
+ if ( This->dp2->lpSessionDesc->dwFlags & DPSESSION_NEWPLAYERSDISABLED )
+ {
+ return DPERR_CANTCREATEPLAYER;
+ }
+
if( dwFlags & DPPLAYER_SERVERPLAYER )
{
*lpidPlayer = DPID_SERVERPLAYER;
@@ -1612,11 +1656,21 @@ static HRESULT WINAPI DirectPlay2WImpl_CreatePlayer
{
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
- if( lpidPlayer == NULL )
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidPlayer == NULL || !This->dp2->bConnectionOpen )
{
return DPERR_INVALIDPARAMS;
}
+ if ( This->dp2->lpSessionDesc->dwFlags & DPSESSION_NEWPLAYERSDISABLED )
+ {
+ return DPERR_CANTCREATEPLAYER;
+ }
+
if( dwFlags & DPPLAYER_SERVERPLAYER )
{
*lpidPlayer = DPID_SERVERPLAYER;
@@ -1951,6 +2005,17 @@ static HRESULT DP_IF_EnumGroupPlayers
return DPERR_UNINITIALIZED;
}
+ if( !This->dp2->bConnectionOpen )
+ {
+ return DPERR_NOSESSIONS;
+ }
+
+ if( ( lpEnumPlayersCallback2 == NULL ) ||
+ ( ( dwFlags & DPENUMPLAYERS_SESSION ) && ( lpguidInstance == NULL ) ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
/* Find the group */
if( ( lpGData = DP_FindAnyGroup( This, idGroup ) ) == NULL )
{
@@ -2198,7 +2263,12 @@ static HRESULT DP_IF_EnumSessions
return DPERR_UNINITIALIZED;
}
- /* Can't enumerate if the interface is already open */
+ if( (lpsd == NULL) || (lpsd->dwSize != sizeof(DPSESSIONDESC2)) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
+ /* Can't enumerate if the session is already open */
if( This->dp2->bConnectionOpen )
{
return DPERR_GENERIC;
@@ -2380,6 +2450,11 @@ static HRESULT DP_IF_GetPlayerCaps
return DPERR_UNINITIALIZED;
}
+ if ( lpDPCaps->dwSize != sizeof(DPCAPS) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
/* Query the service provider */
data.idPlayer = idPlayer;
data.dwFlags = dwFlags;
@@ -2624,6 +2699,11 @@ static HRESULT DP_IF_GetPlayerData
return DPERR_INVALIDPLAYER;
}
+ if( lpdwDataSize == NULL )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
/* How much buffer is required? */
if( dwFlags & DPSET_LOCAL )
{
@@ -2764,7 +2844,12 @@ static HRESULT DP_GetSessionDesc
return DPERR_UNINITIALIZED;
}
- if( ( lpData == NULL ) && ( lpdwDataSize == NULL ) )
+ if( !This->dp2->bConnectionOpen )
+ {
+ return DPERR_NOSESSIONS;
+ }
+
+ if( ( lpdwDataSize == NULL ) || ( *lpdwDataSize >= MAXDWORD ) )
{
return DPERR_INVALIDPARAMS;
}
@@ -2828,14 +2913,9 @@ static HRESULT DP_SecureOpen
FIXME( "(%p)->(%p,0x%08x,%p,%p): partial stub\n",
This, lpsd, dwFlags, lpSecurity, lpCredentials );
- if( This->dp2->connectionInitialized == NO_PROVIDER )
- {
- return DPERR_UNINITIALIZED;
- }
-
- if( lpsd->dwSize != sizeof(DPSESSIONDESC2) )
+ if( ( lpsd == NULL ) ||
+ ( lpsd->dwSize != sizeof(DPSESSIONDESC2) ) )
{
- TRACE( ": rejecting invalid dpsd size (%d).\n", lpsd->dwSize );
return DPERR_INVALIDPARAMS;
}
@@ -2848,7 +2928,18 @@ static HRESULT DP_SecureOpen
/* If we're enumerating, kill the thread */
DP_KillEnumSessionThread( This );
- if( dwFlags & DPOPEN_CREATE )
+ if( dwFlags & DPOPEN_JOIN )
+ {
+ LPDPSESSIONDESC2 current = NULL;
+ while( ( current = NS_WalkSessions( This->dp2->lpNameServerData ) ) )
+ {
+ if ( IsEqualGUID( &lpsd->guidInstance, ¤t->guidInstance ) )
+ break;
+ }
+ if ( current == NULL )
+ return DPERR_NOSESSIONS;
+ }
+ else if( dwFlags & DPOPEN_CREATE )
{
/* Rightoo - this computer is the host and the local computer needs to be
the name server so that others can join this session */
@@ -2926,6 +3017,10 @@ static HRESULT DP_SecureOpen
ERR( "Couldn't create name server/system player: %s\n",
DPLAYX_HresultToString(hr) );
}
+ else
+ {
+ This->dp2->bConnectionOpen = TRUE;
+ }
return hr;
}
@@ -3151,9 +3246,8 @@ static HRESULT DP_IF_SetPlayerData
}
/* Parameter check */
- if( ( lpData == NULL ) &&
- ( dwDataSize != 0 )
- )
+ if( ( ( lpData == NULL ) && ( dwDataSize != 0 ) ) ||
+ ( dwDataSize >= MAXDWORD ) )
{
return DPERR_INVALIDPARAMS;
}
@@ -3253,14 +3347,18 @@ static HRESULT DP_SetSessionDesc
TRACE( "(%p)->(%p,0x%08x,%u,%u)\n",
This, lpSessDesc, dwFlags, bInitial, bAnsi );
- if( This->dp2->connectionInitialized == NO_PROVIDER )
+ if( dwFlags || (lpSessDesc == NULL) )
{
- return DPERR_UNINITIALIZED;
+ return DPERR_INVALIDPARAMS;
}
- if( dwFlags )
+ /* Illegal combinations of flags */
+ if ( ( lpSessDesc->dwFlags & DPSESSION_MIGRATEHOST ) &&
+ ( lpSessDesc->dwFlags & ( DPSESSION_CLIENTSERVER |
+ DPSESSION_MULTICASTSERVER |
+ DPSESSION_SECURESERVER ) ) )
{
- return DPERR_INVALIDPARAMS;
+ return DPERR_INVALIDFLAGS;
}
/* Only the host is allowed to update the session desc */
@@ -3305,6 +3403,17 @@ static HRESULT WINAPI DirectPlay2AImpl_SetSessionDesc
( LPDIRECTPLAY2A iface, LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags )
{
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( !This->dp2->bConnectionOpen )
+ {
+ return DPERR_NOSESSIONS;
+ }
+
return DP_SetSessionDesc( This, lpSessDesc, dwFlags, FALSE, TRUE );
}
@@ -3312,6 +3421,17 @@ static HRESULT WINAPI DirectPlay2WImpl_SetSessionDesc
( LPDIRECTPLAY2 iface, LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags )
{
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( !This->dp2->bConnectionOpen )
+ {
+ return DPERR_NOSESSIONS;
+ }
+
return DP_SetSessionDesc( This, lpSessDesc, dwFlags, FALSE, TRUE );
}
@@ -3488,11 +3608,6 @@ static HRESULT DP_IF_CreateGroupInGroup
This, idParentGroup, lpidGroup, lpGroupName, lpData,
dwDataSize, dwFlags, bAnsi );
- if( This->dp2->connectionInitialized == NO_PROVIDER )
- {
- return DPERR_UNINITIALIZED;
- }
-
/* Verify that the specified parent is valid */
if( ( lpGParentData = DP_FindAnyGroup( (IDirectPlay2AImpl*)This,
idParentGroup ) ) == NULL
@@ -3576,6 +3691,19 @@ static HRESULT WINAPI DirectPlay3AImpl_CreateGroupInGroup
{
IDirectPlay3Impl *This = (IDirectPlay3Impl *)iface;
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidGroup == NULL ||
+ !This->dp2->bConnectionOpen ||
+ dwDataSize >= MAXDWORD ||
+ ( lpData == NULL && dwDataSize != 0 ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
*lpidGroup = DPID_UNKNOWN;
return DP_IF_CreateGroupInGroup( This, NULL, idParentGroup, lpidGroup,
@@ -3590,6 +3718,19 @@ static HRESULT WINAPI DirectPlay3WImpl_CreateGroupInGroup
{
IDirectPlay3Impl *This = (IDirectPlay3Impl *)iface;
+ if( This->dp2->connectionInitialized == NO_PROVIDER )
+ {
+ return DPERR_UNINITIALIZED;
+ }
+
+ if( lpidGroup == NULL ||
+ !This->dp2->bConnectionOpen ||
+ dwDataSize >= MAXDWORD ||
+ ( lpData == NULL && dwDataSize != 0 ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
*lpidGroup = DPID_UNKNOWN;
return DP_IF_CreateGroupInGroup( This, NULL, idParentGroup, lpidGroup,
@@ -3940,6 +4081,17 @@ static HRESULT DP_IF_EnumGroupsInGroup
return DPERR_UNINITIALIZED;
}
+ if( !This->dp2->bConnectionOpen )
+ {
+ return DPERR_NOSESSIONS;
+ }
+
+ if( ( lpEnumPlayersCallback2 == NULL ) ||
+ ( ( dwFlags & DPENUMGROUPS_SESSION ) && ( lpguidInstance == NULL ) ) )
+ {
+ return DPERR_INVALIDPARAMS;
+ }
+
if( ( lpGData = DP_FindAnyGroup( (IDirectPlay2AImpl*)This, idGroup ) ) == NULL )
{
return DPERR_INVALIDGROUP;
@@ -4331,13 +4483,6 @@ static HRESULT WINAPI DirectPlay3AImpl_InitializeConnection
( LPDIRECTPLAY3A iface, LPVOID lpConnection, DWORD dwFlags )
{
IDirectPlay3Impl *This = (IDirectPlay3Impl *)iface;
-
- /* This may not be externally invoked once either an SP or LP is initialized */
- if( This->dp2->connectionInitialized != NO_PROVIDER )
- {
- return DPERR_ALREADYINITIALIZED;
- }
-
return DP_IF_InitializeConnection( This, lpConnection, dwFlags, TRUE );
}
@@ -4345,13 +4490,6 @@ static HRESULT WINAPI DirectPlay3WImpl_InitializeConnection
( LPDIRECTPLAY3 iface, LPVOID lpConnection, DWORD dwFlags )
{
IDirectPlay3Impl *This = (IDirectPlay3Impl *)iface;
-
- /* This may not be externally invoked once either an SP or LP is initialized */
- if( This->dp2->connectionInitialized != NO_PROVIDER )
- {
- return DPERR_ALREADYINITIALIZED;
- }
-
return DP_IF_InitializeConnection( This, lpConnection, dwFlags, FALSE );
}
diff --git a/dlls/dplayx/dplaysp.c b/dlls/dplayx/dplaysp.c
index bd3e2c1..aabe5b5 100644
--- a/dlls/dplayx/dplaysp.c
+++ b/dlls/dplayx/dplaysp.c
@@ -871,7 +871,7 @@ static HRESULT WINAPI IDirectPlaySPImpl_SetSPData
IDirectPlaySPImpl *This = (IDirectPlaySPImpl *)iface;
/* TRACE( "Called on process 0x%08lx\n", GetCurrentProcessId() ); */
- TRACE( "(%p)->(%p,0x%08x,0x%08x)\n",
+ TRACE( "(%p)->(%p,%d,0x%08x)\n",
This, lpData, dwDataSize, dwFlags );
#if 0
diff --git a/dlls/dplayx/tests/dplayx.c b/dlls/dplayx/tests/dplayx.c
index 44ba5cf..3276b6f 100644
--- a/dlls/dplayx/tests/dplayx.c
+++ b/dlls/dplayx/tests/dplayx.c
@@ -693,7 +693,7 @@ static void init_TCPIP_provider( LPDIRECTPLAY4 pDP,
}
hr = IDirectPlayX_InitializeConnection( pDP, pAddress, 0 );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
HeapFree( GetProcessHeap(), 0, pAddress );
@@ -751,7 +751,7 @@ static void test_DirectPlayCreate(void)
if ( hr == DP_OK )
IDirectPlayX_Release( pDP );
hr = DirectPlayCreate( (LPGUID) &DPSPGUID_TCPIP, &pDP, NULL );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
if ( hr == DP_OK )
IDirectPlayX_Release( pDP );
@@ -917,9 +917,9 @@ static BOOL CALLBACK EnumConnections_cb2( LPCGUID lpguidSP,
if( IsEqualGUID(lpguidSP, &DPSPGUID_TCPIP) )
{
hr = IDirectPlayX_InitializeConnection( pDP, lpConnection, 0 );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
hr = IDirectPlayX_InitializeConnection( pDP, lpConnection, 0 );
- todo_wine checkHR( DPERR_ALREADYINITIALIZED, hr );
+ checkHR( DPERR_ALREADYINITIALIZED, hr );
}
return TRUE;
@@ -961,7 +961,7 @@ static void test_GetCaps(void)
/* dpcaps not ininitialized */
hr = IDirectPlayX_GetCaps( pDP, &dpcaps, 0 );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpcaps.dwSize = sizeof(DPCAPS);
@@ -969,37 +969,33 @@ static void test_GetCaps(void)
dwFlags<=DPGETCAPS_GUARANTEED;
dwFlags+=DPGETCAPS_GUARANTEED)
{
-
hr = IDirectPlayX_GetCaps( pDP, &dpcaps, dwFlags );
- todo_wine checkHR( DP_OK, hr );
-
+ checkHR( DP_OK, hr );
- if ( hr == DP_OK )
+ check( sizeof(DPCAPS), dpcaps.dwSize );
+ checkFlags( DPCAPS_ASYNCSUPPORTED |
+ DPCAPS_GUARANTEEDOPTIMIZED |
+ DPCAPS_GUARANTEEDSUPPORTED,
+ dpcaps.dwFlags, FLAGS_DPCAPS );
+ check( 0, dpcaps.dwMaxQueueSize );
+ check( 0, dpcaps.dwHundredBaud );
+ check( 500, dpcaps.dwLatency );
+ check( 65536, dpcaps.dwMaxLocalPlayers );
+ check( 20, dpcaps.dwHeaderLength );
+ check( 5000, dpcaps.dwTimeout );
+
+ switch (dwFlags)
{
- check( sizeof(DPCAPS), dpcaps.dwSize );
- check( DPCAPS_ASYNCSUPPORTED |
- DPCAPS_GUARANTEEDOPTIMIZED |
- DPCAPS_GUARANTEEDSUPPORTED,
- dpcaps.dwFlags );
- check( 0, dpcaps.dwMaxQueueSize );
- check( 0, dpcaps.dwHundredBaud );
- check( 500, dpcaps.dwLatency );
- check( 65536, dpcaps.dwMaxLocalPlayers );
- check( 20, dpcaps.dwHeaderLength );
- check( 5000, dpcaps.dwTimeout );
-
- switch (dwFlags)
- {
- case 0:
- check( 65479, dpcaps.dwMaxBufferSize );
- check( 65536, dpcaps.dwMaxPlayers );
- break;
- case DPGETCAPS_GUARANTEED:
- check( 1048547, dpcaps.dwMaxBufferSize );
- check( 64, dpcaps.dwMaxPlayers );
- break;
- default: break;
- }
+ case 0:
+ check( 65479, dpcaps.dwMaxBufferSize );
+ check( 65536, dpcaps.dwMaxPlayers );
+ break;
+ case DPGETCAPS_GUARANTEED:
+ check( 1048547, dpcaps.dwMaxBufferSize );
+ check( 64, dpcaps.dwMaxPlayers );
+ break;
+ default:
+ break;
}
}
@@ -1067,14 +1063,17 @@ static void test_Open(void)
/* Service provider not initialized */
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
init_TCPIP_provider( pDP_server, "127.0.0.1", 0 );
init_TCPIP_provider( pDP, "127.0.0.1", 0 );
/* Uninitialized dpsd */
+ hr = IDirectPlayX_Open( pDP_server, NULL, DPOPEN_CREATE );
+ checkHR( DPERR_INVALIDPARAMS, hr );
+
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd_server.dwSize = sizeof(DPSESSIONDESC2);
@@ -1084,45 +1083,46 @@ static void test_Open(void)
/* Regular operation */
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
+
/* Opening twice */
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_ALREADYINITIALIZED, hr );
+ checkHR( DPERR_ALREADYINITIALIZED, hr );
/* Session flags */
IDirectPlayX_Close( pDP_server );
dpsd_server.dwFlags = DPSESSION_CLIENTSERVER | DPSESSION_MIGRATEHOST;
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDFLAGS, hr );
+ checkHR( DPERR_INVALIDFLAGS, hr );
dpsd_server.dwFlags = DPSESSION_MULTICASTSERVER | DPSESSION_MIGRATEHOST;
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDFLAGS, hr );
+ checkHR( DPERR_INVALIDFLAGS, hr );
dpsd_server.dwFlags = DPSESSION_SECURESERVER | DPSESSION_MIGRATEHOST;
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDFLAGS, hr );
+ checkHR( DPERR_INVALIDFLAGS, hr );
/* Joining sessions */
/* - Checking how strict dplay is with sizes */
dpsd.dwSize = 0;
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd.dwSize = sizeof(DPSESSIONDESC2)-1;
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd.dwSize = sizeof(DPSESSIONDESC2)+1;
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd.dwSize = sizeof(DPSESSIONDESC2);
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN );
- todo_wine checkHR( DPERR_NOSESSIONS, hr ); /* Only checks for size, not guids */
+ checkHR( DPERR_NOSESSIONS, hr ); /* Only checks for size, not guids */
dpsd.guidApplication = appGuid;
@@ -1130,30 +1130,30 @@ static void test_Open(void)
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN );
- todo_wine checkHR( DPERR_NOSESSIONS, hr );
+ checkHR( DPERR_NOSESSIONS, hr );
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_JOIN | DPOPEN_CREATE );
- todo_wine checkHR( DPERR_NOSESSIONS, hr ); /* Second flag is ignored */
+ checkHR( DPERR_NOSESSIONS, hr ); /* Second flag is ignored */
dpsd_server.dwFlags = 0;
/* Join to normal session */
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
IDirectPlayX_EnumSessions( pDP, &dpsd, 0, EnumSessions_cb2, pDP, 0 );
/* Already initialized session */
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_ALREADYINITIALIZED, hr );
+ checkHR( DPERR_ALREADYINITIALIZED, hr );
/* Checking which is the error checking order */
dpsd_server.dwSize = 0;
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd_server.dwSize = sizeof(DPSESSIONDESC2);
@@ -1162,7 +1162,7 @@ static void test_Open(void)
IDirectPlayX_Close( pDP_server );
U2(dpsd_server).lpszPasswordA = (LPSTR) "hadouken";
hr = IDirectPlayX_Open( pDP_server, &dpsd_server, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
IDirectPlayX_EnumSessions( pDP, &dpsd, 0, EnumSessions_cb2,
pDP, DPENUMSESSIONS_PASSWORDREQUIRED );
@@ -1223,6 +1223,12 @@ static LPDIRECTPLAY4 create_session(DPSESSIONDESC2 *lpdpsd)
hr = IDirectPlayX_Open( pDP, lpdpsd, DPOPEN_CREATE );
todo_wine checkHR( DP_OK, hr );
+ if ( hr != DP_OK )
+ {
+ todo_wine win_skip("Open not implemented\n");
+ return NULL;
+ }
+
if ( ! (lpdpsd->dwFlags & DPSESSION_NEWPLAYERSDISABLED) )
{
ZeroMemory( &name, sizeof(DPNAME) );
@@ -1231,7 +1237,7 @@ static LPDIRECTPLAY4 create_session(DPSESSIONDESC2 *lpdpsd)
hr = IDirectPlayX_CreatePlayer( pDP, &dpid, &name, NULL, NULL,
0, DPPLAYER_SERVERPLAYER );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
}
return pDP;
@@ -1270,13 +1276,7 @@ static void test_EnumSessions(void)
/* Session with no size */
hr = IDirectPlayX_EnumSessions( pDP, &dpsd, 0, EnumSessions_cb,
&callbackData, 0 );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
-
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "EnumSessions not implemented\n" );
- return;
- }
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd.dwSize = sizeof(DPSESSIONDESC2);
@@ -1285,9 +1285,15 @@ static void test_EnumSessions(void)
callbackData.dwCounter1 = -1;
hr = IDirectPlayX_EnumSessions( pDP, &dpsd, 0, EnumSessions_cb,
&callbackData, 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
check( 0, callbackData.dwCounter1 );
+ if ( hr != DP_OK )
+ {
+ todo_wine win_skip( "EnumSessions not implemented\n" );
+ return;
+ }
+
dpsd.guidApplication = appGuid;
@@ -1337,19 +1343,19 @@ static void test_EnumSessions(void)
for (i=0; i<N_SESSIONS; i++)
{
pDPserver[i] = create_session( &dpsd_server[i] );
+ if ( pDPserver[i] == NULL )
+ {
+ todo_wine win_skip( "EnumSessions not implemented\n");
+ return;
+ }
}
/* Invalid params */
callbackData.dwCounter1 = -1;
- hr = IDirectPlayX_EnumSessions( pDP, &dpsd, 0, EnumSessions_cb,
- &callbackData, -1 );
- checkHR( DPERR_INVALIDPARAMS, hr );
-
hr = IDirectPlayX_EnumSessions( pDP, NULL, 0, EnumSessions_cb,
&callbackData, 0 );
checkHR( DPERR_INVALIDPARAMS, hr );
-
check( -1, callbackData.dwCounter1 );
@@ -1619,13 +1625,7 @@ static void test_SessionDesc(void)
/* No sessions open */
hr = IDirectPlayX_SetSessionDesc( pDP[0], NULL, 0 );
- todo_wine checkHR( DPERR_NOSESSIONS, hr );
-
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip("Get/SetSessionDesc not implemented\n");
- return;
- }
+ checkHR( DPERR_NOSESSIONS, hr );
hr = IDirectPlayX_GetSessionDesc( pDP[0], NULL, NULL );
checkHR( DPERR_NOSESSIONS, hr );
@@ -1637,10 +1637,18 @@ static void test_SessionDesc(void)
/* Host */
- IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
+ hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
+ checkHR( DP_OK, hr );
/* Peer */
- IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
- pDP[1], 0 );
+ hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
+ pDP[1], 0 );
+ todo_wine checkHR( DP_OK, hr );
+
+ if ( hr != DP_OK )
+ {
+ skip( "Get/SetSessionDesc not implemented\n" );
+ return;
+ }
for (i=0; i<2; i++)
{
@@ -1787,19 +1795,19 @@ static void test_CreatePlayer(void)
init_TCPIP_provider( pDP[1], "127.0.0.1", 0 );
- /* Session not open */
+ /* Invalid session */
hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, 0, 0 );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
-
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "CreatePlayer not implemented\n" );
- return;
- }
+ checkHR( DPERR_INVALIDPARAMS, hr );
dpsd.dwSize = sizeof(DPSESSIONDESC2);
dpsd.guidApplication = appGuid;
- IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
+
+ /* Session not open */
+ hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, 0, 0 );
+ checkHR( DPERR_INVALIDPARAMS, hr );
+
+ hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
+ checkHR( DP_OK, hr );
/* Player name */
@@ -1899,7 +1907,13 @@ static void test_CreatePlayer(void)
checkHR( DP_OK, hr );
hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
pDP[1], 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+
+ if ( hr !=DP_OK )
+ {
+ skip( "CreatePlayer not implemented\n" );
+ return;
+ }
hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL,
@@ -1971,19 +1985,19 @@ static void test_GetPlayerCaps(void)
playerCaps.dwSize = 0;
hr = IDirectPlayX_GetPlayerCaps( pDP[0], 0, &playerCaps, 0 );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
+
+ playerCaps.dwSize = sizeof(DPCAPS);
+
+ hr = IDirectPlayX_GetPlayerCaps( pDP[0], 0, &playerCaps, 0 );
+ todo_wine checkHR( DPERR_INVALIDPLAYER, hr );
- if ( hr == DPERR_UNINITIALIZED )
+ if ( hr != DPERR_INVALIDPLAYER )
{
todo_wine win_skip( "GetPlayerCaps not implemented\n" );
return;
}
- playerCaps.dwSize = sizeof(DPCAPS);
-
- hr = IDirectPlayX_GetPlayerCaps( pDP[0], 0, &playerCaps, 0 );
- checkHR( DPERR_INVALIDPLAYER, hr );
-
hr = IDirectPlayX_GetPlayerCaps( pDP[0], 2, &playerCaps, 0 );
checkHR( DPERR_INVALIDPLAYER, hr );
@@ -2133,16 +2147,12 @@ static void test_PlayerData(void)
/* Invalid player */
hr = IDirectPlayX_SetPlayerData( pDP, 0, (LPVOID) lpData,
dwDataSize, 0 );
- todo_wine checkHR( DPERR_INVALIDPLAYER, hr );
+ checkHR( DPERR_INVALIDPLAYER, hr );
- hr = IDirectPlayX_GetPlayerData( pDP, 0, lpDataGet, &dwDataSizeGet, 0 );
- todo_wine checkHR( DPERR_INVALIDPLAYER, hr );
+ hr = IDirectPlayX_GetPlayerData( pDP, 0, lpDataGet,
+ &dwDataSizeGet, 0 );
+ checkHR( DPERR_INVALIDPLAYER, hr );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "Get/SetPlayerData not implemented\n" );
- return;
- }
/* Create the player */
/* By default, the data is remote */
@@ -2150,6 +2160,7 @@ static void test_PlayerData(void)
dwDataSize, 0 );
checkHR( DP_OK, hr );
+
/* Invalid parameters */
hr = IDirectPlayX_SetPlayerData( pDP, dpid, NULL, dwDataSize, 0 );
checkHR( DPERR_INVALIDPARAMS, hr );
@@ -2191,9 +2202,15 @@ static void test_PlayerData(void)
strcpy(lpDataGet, lpDataFake);
hr = IDirectPlayX_GetPlayerData( pDP, dpid, lpDataGet, &dwDataSizeGet, 0 );
checkHR( DP_OK, hr );
- check( dwDataSize, dwDataSizeGet );
+ todo_wine check( dwDataSize, dwDataSizeGet );
checkStr( lpData, lpDataGet );
+ if ( dwDataSize != dwDataSizeGet )
+ {
+ skip( "GetPlayerData not implemented\n" );
+ return;
+ }
+
/* Flag tests */
dwDataSizeGet = dwDataSizeFake;
strcpy(lpDataGet, lpDataFake);
@@ -2393,7 +2410,7 @@ static void test_PlayerName(void)
hr = IDirectPlayX_SetPlayerName( pDP[0], 0, &playerName, 0 );
todo_wine checkHR( DPERR_INVALIDPLAYER, hr );
- if ( hr == DPERR_UNINITIALIZED )
+ if ( hr != DPERR_INVALIDPLAYER )
{
todo_wine win_skip( "Get/SetPlayerName not implemented\n" );
return;
@@ -3088,21 +3105,16 @@ static void test_CreateGroup(void)
/* No session */
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
NULL, NULL, 0, 0 );
- todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
+ checkHR( DPERR_INVALIDPARAMS, hr );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "CreateGroup not implemented\n" );
- return;
- }
hr = IDirectPlayX_CreateGroupInGroup( pDP, 0, &idGroup,
NULL, NULL, 0, 0 );
- checkHR( DPERR_INVALIDGROUP, hr );
+ todo_wine checkHR( DPERR_INVALIDGROUP, hr );
hr = IDirectPlayX_CreateGroupInGroup( pDP, 2, &idGroup,
NULL, NULL, 0, 0 );
- checkHR( DPERR_INVALIDGROUP, hr );
+ todo_wine checkHR( DPERR_INVALIDGROUP, hr );
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_CREATE );
@@ -3111,7 +3123,6 @@ static void test_CreateGroup(void)
NULL, NULL, NULL, 0, 0 );
-
/* With name */
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
NULL, NULL, 0, 0 );
@@ -3149,7 +3160,10 @@ static void test_CreateGroup(void)
dwDataSizeGet = 1024;
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0, lpDataGet,
&dwDataSizeGet );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+ if ( hr != DP_OK )
+ continue;
+
if ( NULL == U1(lpDataGet->dpnName).lpszShortNameA )
{
check( 48, dwDataSizeGet );
@@ -3182,6 +3196,10 @@ static void test_CreateGroup(void)
checkHR( DPERR_INVALIDPARAMS, hr );
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
+ NULL, NULL, 0, 0 );
+ checkHR( DP_OK, hr );
+
+ hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
NULL, (LPVOID) lpData, dwDataSize, 0 );
checkHR( DP_OK, hr );
@@ -3199,8 +3217,12 @@ static void test_CreateGroup(void)
checkHR( DPERR_INVALIDPARAMS, hr );
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
+ NULL, NULL, 0, 0 );
+ todo_wine checkHR( DP_OK, hr );
+
+ hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
NULL, (LPVOID)lpData, dwDataSize, 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
hr = IDirectPlayX_CreateGroup( pDP, &idGroupParent,
@@ -3209,12 +3231,15 @@ static void test_CreateGroup(void)
/* Message checking */
- for (i=0; i<5; i++)
+ for (i=0; i<7; i++)
{
dwDataSizeGet = 1024;
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0, lpDataGet,
&dwDataSizeGet );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+ if ( hr != DP_OK )
+ continue;
+
check( 48 + lpDataGet->dwDataSize, dwDataSizeGet );
check( DPID_SYSMSG, idFrom );
checkConv( DPSYS_CREATEPLAYERORGROUP, lpDataGet->dwType, dpMsgType2str );
@@ -3269,7 +3294,10 @@ static void test_CreateGroup(void)
dwDataSizeGet = 1024;
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0, lpDataGet,
&dwDataSizeGet );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+ if ( hr != DP_OK )
+ continue;
+
check( 48, dwDataSizeGet );
check( DPID_SYSMSG, idFrom );
checkConv( DPSYS_CREATEPLAYERORGROUP, lpDataGet->dwType, dpMsgType2str );
@@ -3321,7 +3349,7 @@ static void test_CreateGroup(void)
/* Messages are received */
check_messages( pDP, &dpid, 1, &callbackData );
- checkStr( "S0,", callbackData.szTrace1 );
+ todo_wine checkStr( "S0,", callbackData.szTrace1 );
/* - Client/Server */
@@ -3341,7 +3369,7 @@ static void test_CreateGroup(void)
/* No messages */
check_messages( pDP, &dpid, 1, &callbackData );
- checkStr( "S0,", callbackData.szTrace1 ); /* Or at least there
+ todo_wine checkStr( "S0,", callbackData.szTrace1 ); /* Or at least there
shouldn't be messages... */
@@ -3563,14 +3591,9 @@ static void test_EnumPlayers(void)
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumPlayers( pDP[0], NULL, EnumPlayers_cb,
&callbackData, 0 );
- todo_wine checkHR( DPERR_NOSESSIONS, hr );
+ checkHR( DPERR_NOSESSIONS, hr );
check( 0, callbackData.dwCounter1 );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "EnumPlayers not implemented\n" );
- return;
- }
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumPlayers( pDP[0], (LPGUID) &appGuid, EnumPlayers_cb,
@@ -3638,9 +3661,15 @@ static void test_EnumPlayers(void)
hr = IDirectPlayX_EnumPlayers( pDP[0], NULL, EnumPlayers_cb,
&callbackData, 0 );
checkHR( DP_OK, hr );
- check( 2, callbackData.dwCounter1 );
- checkStr( "20", callbackData.szTrace1 );
- checkStr( "ALL:SERVERPLAYER:", callbackData.szTrace2 );
+ todo_wine check( 2, callbackData.dwCounter1 );
+ todo_wine checkStr( "20", callbackData.szTrace1 );
+ todo_wine checkStr( "ALL:SERVERPLAYER:", callbackData.szTrace2 );
+
+ if ( 2 != callbackData.dwCounter1 )
+ {
+ skip( "EnumPlayers not implemented\n" );
+ return;
+ }
callbackData.dwCounter1 = 0;
callbackData.szTrace2[0] = 0;
@@ -3884,14 +3913,9 @@ static void test_EnumGroups(void)
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumGroups( pDP[0], NULL, EnumGroups_cb,
&callbackData, 0 );
- todo_wine checkHR( DPERR_NOSESSIONS, hr );
+ checkHR( DPERR_NOSESSIONS, hr );
check( 0, callbackData.dwCounter1 );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "EnumGroups not implemented\n" );
- return;
- }
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumGroups( pDP[0], (LPGUID) &appGuid, EnumGroups_cb,
@@ -3958,7 +3982,8 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 2, callbackData.dwCounter1 );
checkStr( "02", callbackData.szTrace1 );
- checkStr( "ALL:HIDDEN:", callbackData.szTrace2 );
+ todo_wine checkStr( "ALL:HIDDEN:", callbackData.szTrace2 );
+
callbackData.dwCounter1 = 0;
callbackData.szTrace2[0] = 0;
@@ -3976,7 +4001,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 2, callbackData.dwCounter1 ); /* Guid is ignored */
checkStr( "02", callbackData.szTrace1 );
- checkStr( "ALL:HIDDEN:", callbackData.szTrace2 );
+ todo_wine checkStr( "ALL:HIDDEN:", callbackData.szTrace2 );
/* Enumerating from a remote session */
@@ -3985,7 +4010,13 @@ static void test_EnumGroups(void)
hr = IDirectPlayX_EnumSessions( pDP[2], &dpsd[2], 0,
EnumSessions_cb_EnumGroups,
&callbackData, 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+
+ if ( hr != DP_OK )
+ {
+ skip( "not ready yet\n" );
+ return;
+ }
/* - Open session */
callbackData.pDP = pDP[2];
@@ -4008,7 +4039,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 4, callbackData.dwCounter1 );
checkStr( "0234", callbackData.szTrace1 );
- checkStr( "ALL:HIDDEN:ALL:STAGINGAREA:", callbackData.szTrace2 );
+ todo_wine checkStr( "ALL:HIDDEN:ALL:STAGINGAREA:", callbackData.szTrace2 );
/* Flag tests */
callbackData.dwCounter1 = 0;
@@ -4018,7 +4049,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 4, callbackData.dwCounter1 );
checkStr( "0234", callbackData.szTrace1 );
- checkStr( "ALL:HIDDEN:ALL:STAGINGAREA:", callbackData.szTrace2 );
+ todo_wine checkStr( "ALL:HIDDEN:ALL:STAGINGAREA:", callbackData.szTrace2 );
callbackData.dwCounter1 = 0;
callbackData.szTrace2[0] = 0;
@@ -4027,7 +4058,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 1, callbackData.dwCounter1 );
checkStr( "2", callbackData.szTrace1 );
- checkStr( "HIDDEN:", callbackData.szTrace2 );
+ todo_wine checkStr( "HIDDEN:", callbackData.szTrace2 );
callbackData.dwCounter1 = 0;
callbackData.szTrace2[0] = 0;
@@ -4036,7 +4067,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 2, callbackData.dwCounter1 );
checkStr( "34", callbackData.szTrace1 );
- checkStr( "LOCAL:"
+ todo_wine checkStr( "LOCAL:"
"LOCAL,DPENUMGROUPS_STAGINGAREA:", callbackData.szTrace2 );
callbackData.dwCounter1 = 0;
@@ -4046,7 +4077,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 2, callbackData.dwCounter1 );
checkStr( "02", callbackData.szTrace1 );
- checkStr( "REMOTE:"
+ todo_wine checkStr( "REMOTE:"
"REMOTE,DPENUMGROUPS_HIDDEN:", callbackData.szTrace2 );
callbackData.dwCounter1 = 0;
@@ -4056,7 +4087,7 @@ static void test_EnumGroups(void)
checkHR( DP_OK, hr );
check( 1, callbackData.dwCounter1 );
checkStr( "4", callbackData.szTrace1 );
- checkStr( "STAGINGAREA:", callbackData.szTrace2 );
+ todo_wine checkStr( "STAGINGAREA:", callbackData.szTrace2 );
IDirectPlayX_Release( pDP[0] );
@@ -4103,13 +4134,8 @@ static void test_EnumGroupsInGroup(void)
init_TCPIP_provider( pDP[1], "127.0.0.1", 0 );
hr = IDirectPlayX_Open( pDP[0], &dpsd[0], DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "EnumGroupsInGroup not implemented\n" );
- return;
- }
/* Create groups */
/*
@@ -4148,8 +4174,14 @@ static void test_EnumGroupsInGroup(void)
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumGroupsInGroup( pDP[0], 0, NULL, EnumGroups_cb,
&callbackData, 0 );
- checkHR( DPERR_INVALIDGROUP, hr );
- check( 0, callbackData.dwCounter1 );
+ todo_wine checkHR( DPERR_INVALIDGROUP, hr );
+ todo_wine check( 0, callbackData.dwCounter1 );
+
+ if ( hr != DPERR_INVALIDGROUP )
+ {
+ skip( "EnumGroupsInGroup not implemented\n" );
+ return;
+ }
callbackData.dwCounter1 = 0;
hr = IDirectPlayX_EnumGroupsInGroup( pDP[0], 10, NULL, EnumGroups_cb,
@@ -4326,12 +4358,12 @@ static void test_groups_p2p(void)
init_TCPIP_provider( pDP[1], "127.0.0.1", 0 );
hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
pDP[1], 0 );
todo_wine checkHR( DP_OK, hr );
- if ( hr == DPERR_UNINITIALIZED )
+ if ( hr != DP_OK )
{
todo_wine win_skip( "dplay not implemented enough for this test yet\n" );
return;
@@ -4560,13 +4592,13 @@ static void test_groups_cs(void)
dpsd.dwFlags = DPSESSION_CLIENTSERVER;
hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
dpsd.dwFlags = 0;
hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
pDP[1], 0 );
todo_wine checkHR( DP_OK, hr );
- if ( hr == DPERR_UNINITIALIZED )
+ if ( hr != DP_OK )
{
todo_wine win_skip( "dplay not implemented enough for this test yet\n" );
return;
@@ -4810,19 +4842,19 @@ static void test_Send(void)
/* Incorrect players */
hr = IDirectPlayX_Send( pDP[0], 0, 1, 2,
(LPVOID) message, messageSize );
- todo_wine checkHR( DPERR_INVALIDPLAYER, hr );
-
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "Send not implemented\n" );
- return;
- }
+ checkHR( DPERR_INVALIDPLAYER, hr );
IDirectPlayX_CreatePlayer( pDP[0], &dpid[0], NULL, NULL, NULL, 0, 0 );
IDirectPlayX_CreatePlayer( pDP[0], &dpid[1], NULL, NULL, NULL, 0, 0 );
IDirectPlayX_CreatePlayer( pDP[0], &dpid[2], NULL, NULL, NULL, 0, 0 );
- IDirectPlayX_CreatePlayer( pDP[1], &dpid[3], NULL, NULL, NULL, 0, 0 );
+ hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid[3], NULL, NULL, NULL, 0, 0 );
+
+ if ( hr != DP_OK )
+ {
+ todo_wine win_skip( "Send not implemented\n" );
+ return;
+ }
/* Purge player creation messages */
check_messages( pDP[0], dpid, 4, &callbackData );
@@ -5134,7 +5166,7 @@ static void test_Receive(void)
lpData, &dwDataSize );
todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
- if ( hr == DPERR_UNINITIALIZED )
+ if ( hr != DPERR_INVALIDPARAMS )
{
todo_wine win_skip( "Receive not implemented\n" );
return;
@@ -5151,6 +5183,7 @@ static void test_Receive(void)
lpData, &dwDataSize );
checkHR( DPERR_INVALIDPARAMS, hr );
+
/* No messages yet */
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0,
NULL, &dwDataSize );
@@ -5946,13 +5979,8 @@ static void test_remote_data_replication(void)
/* Host */
hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
- if ( hr == DPERR_UNINITIALIZED )
- {
- todo_wine win_skip( "dplay not implemented enough for this test yet\n" );
- return;
- }
hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid[0],
NULL, NULL, NULL, 0, 0 );
@@ -5961,7 +5989,13 @@ static void test_remote_data_replication(void)
/* Peer */
hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
pDP[1], 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+
+ if ( hr != DP_OK )
+ {
+ skip( "dplay not implemented enough for this test yet\n" );
+ return;
+ }
hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid[1],
NULL, NULL, NULL, 0, 0 );
@@ -5975,7 +6009,7 @@ static void test_remote_data_replication(void)
checkFlags( DPPLAYER_LOCAL, dwFlags, FLAGS_DPPLAYER );
/* Remote (0,1) (1,0) */
IDirectPlayX_GetPlayerFlags( pDP[i], dpid[!i], &dwFlags );
- checkFlags( 0, dwFlags, FLAGS_DPPLAYER );
+ todo_wine checkFlags( 0, dwFlags, FLAGS_DPPLAYER );
}
/* Set data for a local player */
@@ -6164,13 +6198,8 @@ static void test_host_migration()
/* Host */
hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
- todo_wine checkHR( DP_OK, hr );
+ checkHR( DP_OK, hr );
- if ( hr != DP_OK )
- {
- todo_wine win_skip( "dplay not implemented enough for this test yet\n" );
- return;
- }
hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid[0], NULL, NULL, NULL, 0, 0 );
checkHR( DP_OK, hr );
@@ -6178,7 +6207,13 @@ static void test_host_migration()
/* Peer */
hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
pDP[1], 0 );
- checkHR( DP_OK, hr );
+ todo_wine checkHR( DP_OK, hr );
+
+ if ( hr != DP_OK )
+ {
+ skip( "dplay not implemented enough for this test yet\n" );
+ return;
+ }
hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid[1], NULL, NULL, NULL, 0, 0 );
checkHR( DP_OK, hr );
--
1.6.3.3
More information about the wine-patches
mailing list