2 * Copyright 2014 Alistair Leslie-Hughes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #define WIN32_LEAN_AND_MEAN
23 #include "wine/test.h"
25 /* {CD0C3D4B-E15E-4CF2-9EA8-6E1D6548C5A5} */
26 static const GUID appguid
= { 0xcd0c3d4b, 0xe15e, 0x4cf2, { 0x9e, 0xa8, 0x6e, 0x1d, 0x65, 0x48, 0xc5, 0xa5 } };
27 static WCHAR sessionname
[] = {'w','i','n','e','g','a','m','e','s','s','e','r','v','e','r',0};
29 static BOOL nCreatePlayer
;
30 static BOOL nDestroyPlayer
;
32 static HRESULT WINAPI
DirectPlayMessageHandler(PVOID pvUserContext
, DWORD dwMessageId
, PVOID pMsgBuffer
)
34 trace("msgid: 0x%08x\n", dwMessageId
);
38 case DPN_MSGID_CREATE_PLAYER
:
41 case DPN_MSGID_DESTROY_PLAYER
:
42 nDestroyPlayer
= TRUE
;
49 static void create_server(void)
52 IDirectPlay8Server
*server
= NULL
;
54 hr
= CoCreateInstance( &CLSID_DirectPlay8Server
, NULL
, CLSCTX_ALL
, &IID_IDirectPlay8Server
, (LPVOID
*)&server
);
55 ok(hr
== S_OK
, "Failed to create IDirectPlay8Server object\n");
58 hr
= IDirectPlay8Server_Close(server
, 0);
59 todo_wine
ok(hr
== DPNERR_UNINITIALIZED
, "got 0x%08x\n", hr
);
61 hr
= IDirectPlay8Server_Initialize(server
, NULL
, NULL
, 0);
62 ok(hr
== DPNERR_INVALIDPARAM
, "got 0x%08x\n", hr
);
64 hr
= IDirectPlay8Server_Initialize(server
, NULL
, DirectPlayMessageHandler
, 0);
65 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
68 IDirectPlay8Address
*localaddr
= NULL
;
69 DPN_APPLICATION_DESC appdesc
;
71 hr
= CoCreateInstance( &CLSID_DirectPlay8Address
, NULL
, CLSCTX_ALL
, &IID_IDirectPlay8Address
, (LPVOID
*)&localaddr
);
72 ok(hr
== S_OK
, "Failed to create IDirectPlay8Address object\n");
74 hr
= IDirectPlay8Address_SetSP(localaddr
, &CLSID_DP8SP_TCPIP
);
75 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
77 memset( &appdesc
, 0, sizeof(DPN_APPLICATION_DESC
) );
78 appdesc
.dwSize
= sizeof( DPN_APPLICATION_DESC
);
79 appdesc
.dwFlags
= DPNSESSION_CLIENT_SERVER
;
80 appdesc
.guidApplication
= appguid
;
81 appdesc
.pwszSessionName
= sessionname
;
83 hr
= IDirectPlay8Server_Host(server
, &appdesc
, &localaddr
, 1, NULL
, NULL
, NULL
, 0);
84 todo_wine
ok(hr
== S_OK
, "got 0x%08x\n", hr
);
86 todo_wine
ok(nCreatePlayer
, "No DPN_MSGID_CREATE_PLAYER Message\n");
87 ok(!nDestroyPlayer
, "Received DPN_MSGID_DESTROY_PLAYER Message\n");
89 hr
= IDirectPlay8Server_Close(server
, 0);
90 todo_wine
ok(hr
== S_OK
, "got 0x%08x\n", hr
);
92 todo_wine
ok(nDestroyPlayer
, "No DPN_MSGID_DESTROY_PLAYER Message\n");
94 IDirectPlay8Address_Release(localaddr
);
97 IDirectPlay8Server_Release(server
);
101 static void test_server_info(void)
104 DPN_PLAYER_INFO info
;
105 WCHAR name
[] = {'w','i','n','e',0};
106 WCHAR name2
[] = {'w','i','n','e','2',0};
107 WCHAR data
[] = {'X','X','X','X',0};
108 IDirectPlay8Server
*server
= NULL
;
110 hr
= CoCreateInstance( &CLSID_DirectPlay8Server
, NULL
, CLSCTX_ALL
, &IID_IDirectPlay8Server
, (LPVOID
*)&server
);
111 ok(hr
== S_OK
, "Failed to create IDirectPlay8Server object\n");
114 ZeroMemory( &info
, sizeof(DPN_PLAYER_INFO
) );
115 info
.dwSize
= sizeof(DPN_PLAYER_INFO
);
116 info
.dwInfoFlags
= DPNINFO_NAME
;
118 hr
= IDirectPlay8Server_SetServerInfo(server
, NULL
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
119 ok(hr
== E_POINTER
, "got %x\n", hr
);
121 info
.pwszName
= name
;
122 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
123 ok(hr
== DPNERR_UNINITIALIZED
, "got %x\n", hr
);
125 hr
= IDirectPlay8Server_Initialize(server
, NULL
, DirectPlayMessageHandler
, 0);
126 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
128 hr
= IDirectPlay8Server_SetServerInfo(server
, NULL
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
129 ok(hr
== E_POINTER
, "got %x\n", hr
);
131 info
.pwszName
= NULL
;
132 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
133 ok(hr
== S_OK
, "got %x\n", hr
);
135 info
.pwszName
= name
;
136 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
137 ok(hr
== S_OK
, "got %x\n", hr
);
139 info
.dwInfoFlags
= DPNINFO_NAME
;
140 info
.pwszName
= name2
;
141 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
142 ok(hr
== S_OK
, "got %x\n", hr
);
144 info
.dwInfoFlags
= DPNINFO_DATA
;
145 info
.pwszName
= NULL
;
147 info
.dwDataSize
= sizeof(data
);
148 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
149 ok(hr
== E_POINTER
, "got %x\n", hr
);
151 info
.dwInfoFlags
= DPNINFO_DATA
;
152 info
.pwszName
= NULL
;
155 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
156 ok(hr
== S_OK
, "got %x\n", hr
);
158 info
.dwInfoFlags
= DPNINFO_DATA
;
159 info
.pwszName
= NULL
;
161 info
.dwDataSize
= sizeof(data
);
162 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
163 ok(hr
== S_OK
, "got %x\n", hr
);
165 info
.dwInfoFlags
= DPNINFO_DATA
| DPNINFO_NAME
;
166 info
.pwszName
= name
;
168 info
.dwDataSize
= sizeof(data
);
169 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
170 ok(hr
== S_OK
, "got %x\n", hr
);
172 info
.dwInfoFlags
= DPNINFO_DATA
| DPNINFO_NAME
;
173 info
.pwszName
= name
;
176 hr
= IDirectPlay8Server_SetServerInfo(server
, &info
, NULL
, NULL
, DPNSETSERVERINFO_SYNC
);
177 ok(hr
== S_OK
, "got %x\n", hr
);
179 IDirectPlay8Server_Release(server
);
183 /* taken from programs/winetest/main.c */
184 static BOOL
is_stub_dll(const char *filename
)
190 size
= GetFileVersionInfoSizeA(filename
, &ver
);
191 if (!size
) return FALSE
;
193 data
= HeapAlloc(GetProcessHeap(), 0, size
);
194 if (!data
) return FALSE
;
196 if (GetFileVersionInfoA(filename
, ver
, size
, data
))
200 sprintf(buf
, "\\StringFileInfo\\%04x%04x\\OriginalFilename", MAKELANGID(LANG_ENGLISH
, SUBLANG_ENGLISH_US
), 1200);
201 if (VerQueryValueA(data
, buf
, (void**)&p
, &size
))
202 isstub
= !lstrcmpiA("wcodstub.dll", p
);
204 HeapFree(GetProcessHeap(), 0, data
);
213 if (!winetest_interactive
&&
214 (is_stub_dll("c:\\windows\\system32\\dpnet.dll") ||
215 is_stub_dll("c:\\windows\\syswow64\\dpnet.dll")))
217 win_skip("dpnet is a stub dll, skipping tests\n");
221 hr
= CoInitialize(0);
222 ok( hr
== S_OK
, "failed to init com\n");