blob: af2a6ed6edc6e1ac6a244a2350df6753a6f37d50 [file] [log] [blame]
/* DirectPlay Conformance Tests
*
* Copyright 2007 - Alessandro Pignotti
*
* 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 "wine/test.h"
#define INITGUID
#include <dplay.h>
static BOOL validSP = FALSE; /*This global variable is needed until wine has a working service provider
implementation*/
static BOOL CALLBACK EnumConnectionsCallback(LPCGUID lpguidSP, LPVOID lpConnection,
DWORD dwConnectionSize, LPCDPNAME lpName, DWORD dwFlags, LPVOID lpContext)
{
HRESULT hr;
if(IsEqualGUID(lpguidSP,&DPSPGUID_TCPIP))
{
/*I'm forcing TCP/IP Sevice provider*/
hr = IDirectPlayX_InitializeConnection((LPDIRECTPLAY4) lpContext, lpConnection, 0);
if( SUCCEEDED( hr ))
validSP = TRUE;
return FALSE;
}
return TRUE;
}
static void test_session_guid(LPDIRECTPLAY4 pDP)
{
GUID appGuid;
GUID zeroGuid;
DPSESSIONDESC2 sessionDesc;
LPDPSESSIONDESC2 newSession;
DWORD sessionSize;
static char name[] = "DPlay conformance test";
CoCreateGuid( &appGuid );
IDirectPlayX_EnumConnections(pDP, &appGuid, EnumConnectionsCallback, pDP, 0);
if( !validSP )
{
skip("Tests will not work without a valid service provider, skipping.\n");
return;
}
memset(&sessionDesc, 0, sizeof( DPSESSIONDESC2 ));
memset(&zeroGuid, 0, 16);
sessionDesc.dwSize = sizeof( DPSESSIONDESC2 );
memcpy(&sessionDesc.guidApplication, &appGuid, 16);
sessionDesc.dwFlags = DPSESSION_CLIENTSERVER;
U1(sessionDesc).lpszSessionNameA = name;
sessionDesc.dwMaxPlayers = 10;
sessionDesc.dwCurrentPlayers = 0;
IDirectPlayX_Open(pDP, &sessionDesc, DPOPEN_CREATE);
/* I read the sessiondesc from directplay in a fresh memory location,
because directplay does not touch the original struct, but saves
internally a version with the session guid set*/
IDirectPlayX_GetSessionDesc(pDP, NULL, &sessionSize);
newSession = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sessionSize);
IDirectPlayX_GetSessionDesc(pDP, newSession, &sessionSize);
todo_wine ok( !IsEqualGUID(&newSession->guidInstance, &zeroGuid), "Session guid not initialized\n");
HeapFree(GetProcessHeap(), 0, newSession);
}
START_TEST(dplayx)
{
LPDIRECTPLAY4 pDP;
CoInitialize( NULL );
CoCreateInstance(&CLSID_DirectPlay, NULL, CLSCTX_ALL, &IID_IDirectPlay4A, (VOID**)&pDP);
test_session_guid( pDP );
IDirectPlayX_Release( pDP );
CoUninitialize();
}