ReactOS 0.4.17-dev-934-g091855f
dpnet_main.c
Go to the documentation of this file.
1/*
2 * DirectPlay
3 *
4 * Copyright 2004 Raphael Junqueira
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 *
20 */
21
22
23#include <stdarg.h>
24
25#include "windef.h"
26#include "winbase.h"
27#include "wingdi.h"
28#include "winuser.h"
29#include "objbase.h"
30#include "oleauto.h"
31#include "oleidl.h"
32#include "rpcproxy.h"
33#include "wine/debug.h"
34
35#include "initguid.h"
36#include "dpnet_private.h"
37
39
41
42static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **context)
43{
44 WSADATA wsa_data;
45 DWORD res;
46
47 res = WSAStartup(MAKEWORD(1,1), &wsa_data);
48 if(res == ERROR_SUCCESS)
50 else
51 ERR("WSAStartup failed: %lu\n", res);
52 return TRUE;
53}
54
55void init_winsock(void)
56{
59}
60
61/* At process attach */
63{
64 TRACE("%p,%lx,%p\n", hInstDLL, fdwReason, lpvReserved);
65
66 switch(fdwReason)
67 {
70 break;
71
73 if (lpvReserved) break;
75 WSACleanup();
76 break;
77 }
78 return TRUE;
79}
80
81/***********************************************************************
82 * DirectPlay8Create (DPNET.@)
83 */
84#ifdef __REACTOS__
85HRESULT WINAPI DirectPlay8Create(const GUID *lpGUID, LPVOID *ppvInt, LPUNKNOWN punkOuter)
86#else
88#endif
89{
90 TRACE("(%s, %p, %p): stub\n", debugstr_guid(lpGUID), ppvInt, punkOuter);
91 return S_OK;
92}
93
94/*******************************************************************************
95 * DirectPlay ClassFactory
96 */
97typedef struct
98{
99 /* IUnknown fields */
100 IClassFactory IClassFactory_iface;
101 LONG ref;
103 HRESULT (*pfnCreateInstanceFactory)(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj);
105
107{
108 return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
109}
110
111static HRESULT WINAPI DICF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
113
114 FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
115 return E_NOINTERFACE;
116}
117
118static ULONG WINAPI DICF_AddRef(LPCLASSFACTORY iface) {
120 return InterlockedIncrement(&This->ref);
121}
122
123static ULONG WINAPI DICF_Release(LPCLASSFACTORY iface) {
125 /* static class, won't be freed */
126 return InterlockedDecrement(&This->ref);
127}
128
129static HRESULT WINAPI DICF_CreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj) {
131
132 TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
133 return This->pfnCreateInstanceFactory(iface, pOuter, riid, ppobj);
134}
135
136static HRESULT WINAPI DICF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
138 FIXME("(%p)->(%d),stub!\n",This,dolock);
139 return S_OK;
140}
141
142static const IClassFactoryVtbl DICF_Vtbl = {
148};
149
151 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8Client, DPNET_CreateDirectPlay8Client },
152 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8Server, DPNET_CreateDirectPlay8Server },
153 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8Peer, DPNET_CreateDirectPlay8Peer },
154 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8Address, DPNET_CreateDirectPlay8Address },
155 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8LobbiedApplication, DPNET_CreateDirectPlay8LobbiedApp },
156 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8LobbyClient, DPNET_CreateDirectPlay8LobbyClient },
157 { { &DICF_Vtbl }, 1, &CLSID_DirectPlay8ThreadPool, DPNET_CreateDirectPlay8ThreadPool},
158 { { NULL }, 0, NULL, NULL }
159};
160
161/***********************************************************************
162 * DllGetClassObject (DPNET.@)
163 */
165{
166 int i = 0;
167
168 TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
169 /*
170 if ( IsEqualCLSID( &IID_IClassFactory, riid ) ) {
171 *ppv = (LPVOID)&DPNET_CF;
172 IClassFactory_AddRef((IClassFactory*)*ppv);
173 return S_OK;
174 }
175 */
176 while (NULL != DPNET_CFS[i].rclsid) {
177 if (IsEqualGUID(rclsid, DPNET_CFS[i].rclsid)) {
178 DICF_AddRef(&DPNET_CFS[i].IClassFactory_iface);
179 *ppv = &DPNET_CFS[i];
180 return S_OK;
181 }
182 ++i;
183 }
184
185 FIXME("(%s,%s,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
187}
static DWORD const fdwReason
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define ERROR_SUCCESS
Definition: deptool.c:10
static LPVOID LPUNKNOWN
Definition: dinput.c:53
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT DPNET_CreateDirectPlay8Address(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, LPVOID *ppobj)
Definition: address.c:694
HRESULT DPNET_CreateDirectPlay8Client(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv)
Definition: client.c:384
HRESULT DPNET_CreateDirectPlay8LobbyClient(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj)
Definition: client.c:560
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
Definition: InitOnce.c:12
static ULONG WINAPI DICF_Release(LPCLASSFACTORY iface)
Definition: dpnet_main.c:123
static HRESULT WINAPI DICF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
Definition: dpnet_main.c:136
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
Definition: dpnet_main.c:62
static ULONG WINAPI DICF_AddRef(LPCLASSFACTORY iface)
Definition: dpnet_main.c:118
static IClassFactoryImpl DPNET_CFS[]
Definition: dpnet_main.c:150
static BOOL winsock_loaded
Definition: dpnet_main.c:40
static const IClassFactoryVtbl DICF_Vtbl
Definition: dpnet_main.c:142
static HRESULT WINAPI DICF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
Definition: dpnet_main.c:129
static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **context)
Definition: dpnet_main.c:42
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: dpnet_main.c:164
void init_winsock(void)
Definition: dpnet_main.c:55
HRESULT WINAPI DirectPlay8Create(REFGUID lpGUID, LPVOID *ppvInt, LPUNKNOWN punkOuter)
Definition: dpnet_main.c:87
static HRESULT WINAPI DICF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj)
Definition: dpnet_main.c:111
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: dpnet_main.c:106
HRESULT DPNET_CreateDirectPlay8LobbiedApp(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
Definition: lobbiedapp.c:188
HRESULT DPNET_CreateDirectPlay8Peer(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
HRESULT DPNET_CreateDirectPlay8ThreadPool(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
Definition: threadpool.c:157
HRESULT DPNET_CreateDirectPlay8Server(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLfloat param
Definition: glext.h:5796
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
static IN DWORD IN LPVOID lpvReserved
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define TRACE(s)
Definition: solgame.cpp:4
Definition: scsiwmi.h:51
Definition: http.c:7252
Definition: send.c:48
#define MAKEWORD(a, b)
Definition: typedefs.h:248
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
static INIT_ONCE init_once
Definition: vfwcapture.c:981
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
RTL_RUN_ONCE INIT_ONCE
Definition: winbase.h:3654
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:591
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772
int PASCAL FAR WSACleanup(void)
Definition: startup.c:60