ReactOS 0.4.16-dev-306-g647d351
gopher.c File Reference
#include "urlmon_main.h"
#include "wine/debug.h"
Include dependency graph for gopher.c:

Go to the source code of this file.

Classes

struct  GopherProtocol
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (urlmon)
 
static GopherProtocolimpl_from_Protocol (Protocol *prot)
 
static HRESULT GopherProtocol_open_request (Protocol *prot, IUri *uri, DWORD request_flags, HINTERNET internet_session, IInternetBindInfo *bind_info)
 
static HRESULT GopherProtocol_end_request (Protocol *prot)
 
static HRESULT GopherProtocol_start_downloading (Protocol *prot)
 
static void GopherProtocol_close_connection (Protocol *prot)
 
static void GopherProtocol_on_error (Protocol *prot, DWORD error)
 
static GopherProtocolimpl_from_IInternetProtocol (IInternetProtocol *iface)
 
static HRESULT WINAPI GopherProtocol_QueryInterface (IInternetProtocol *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI GopherProtocol_AddRef (IInternetProtocol *iface)
 
static ULONG WINAPI GopherProtocol_Release (IInternetProtocol *iface)
 
static HRESULT WINAPI GopherProtocol_Start (IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
 
static HRESULT WINAPI GopherProtocol_Continue (IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
 
static HRESULT WINAPI GopherProtocol_Abort (IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
 
static HRESULT WINAPI GopherProtocol_Terminate (IInternetProtocol *iface, DWORD dwOptions)
 
static HRESULT WINAPI GopherProtocol_Suspend (IInternetProtocol *iface)
 
static HRESULT WINAPI GopherProtocol_Resume (IInternetProtocol *iface)
 
static HRESULT WINAPI GopherProtocol_Read (IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
 
static HRESULT WINAPI GopherProtocol_Seek (IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
 
static HRESULT WINAPI GopherProtocol_LockRequest (IInternetProtocol *iface, DWORD dwOptions)
 
static HRESULT WINAPI GopherProtocol_UnlockRequest (IInternetProtocol *iface)
 
static GopherProtocolimpl_from_IInternetPriority (IInternetPriority *iface)
 
static HRESULT WINAPI GopherPriority_QueryInterface (IInternetPriority *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI GopherPriority_AddRef (IInternetPriority *iface)
 
static ULONG WINAPI GopherPriority_Release (IInternetPriority *iface)
 
static HRESULT WINAPI GopherPriority_SetPriority (IInternetPriority *iface, LONG nPriority)
 
static HRESULT WINAPI GopherPriority_GetPriority (IInternetPriority *iface, LONG *pnPriority)
 
HRESULT GopherProtocol_Construct (IUnknown *pUnkOuter, LPVOID *ppobj)
 

Variables

static const ProtocolVtbl AsyncProtocolVtbl
 
static const IInternetProtocolVtbl GopherProtocolVtbl
 
static const IInternetPriorityVtbl GopherPriorityVtbl
 

Function Documentation

◆ GopherPriority_AddRef()

static ULONG WINAPI GopherPriority_AddRef ( IInternetPriority iface)
static

Definition at line 272 of file gopher.c.

273{
275 return IInternetProtocol_AddRef(&This->IInternetProtocol_iface);
276}
static GopherProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: gopher.c:261

◆ GopherPriority_GetPriority()

static HRESULT WINAPI GopherPriority_GetPriority ( IInternetPriority iface,
LONG pnPriority 
)
static

Definition at line 294 of file gopher.c.

295{
297
298 TRACE("(%p)->(%p)\n", This, pnPriority);
299
300 *pnPriority = This->base.priority;
301 return S_OK;
302}
#define S_OK
Definition: intsafe.h:52
#define TRACE(s)
Definition: solgame.cpp:4

◆ GopherPriority_QueryInterface()

static HRESULT WINAPI GopherPriority_QueryInterface ( IInternetPriority iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 266 of file gopher.c.

267{
269 return IInternetProtocol_QueryInterface(&This->IInternetProtocol_iface, riid, ppv);
270}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ GopherPriority_Release()

static ULONG WINAPI GopherPriority_Release ( IInternetPriority iface)
static

Definition at line 278 of file gopher.c.

279{
281 return IInternetProtocol_Release(&This->IInternetProtocol_iface);
282}

◆ GopherPriority_SetPriority()

static HRESULT WINAPI GopherPriority_SetPriority ( IInternetPriority iface,
LONG  nPriority 
)
static

Definition at line 284 of file gopher.c.

285{
287
288 TRACE("(%p)->(%d)\n", This, nPriority);
289
290 This->base.priority = nPriority;
291 return S_OK;
292}

◆ GopherProtocol_Abort()

static HRESULT WINAPI GopherProtocol_Abort ( IInternetProtocol iface,
HRESULT  hrReason,
DWORD  dwOptions 
)
static

Definition at line 175 of file gopher.c.

177{
179
180 TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
181
182 return protocol_abort(&This->base, hrReason);
183}
HRESULT protocol_abort(Protocol *protocol, HRESULT reason)
Definition: protocol.c:518
DWORD dwOptions
Definition: solitaire.cpp:25
static GopherProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: gopher.c:87

◆ GopherProtocol_AddRef()

static ULONG WINAPI GopherProtocol_AddRef ( IInternetProtocol iface)
static

Definition at line 120 of file gopher.c.

121{
124 TRACE("(%p) ref=%d\n", This, ref);
125 return ref;
126}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60
Definition: send.c:48

◆ GopherProtocol_close_connection()

static void GopherProtocol_close_connection ( Protocol prot)
static

Definition at line 70 of file gopher.c.

71{
72}

◆ GopherProtocol_Construct()

HRESULT GopherProtocol_Construct ( IUnknown pUnkOuter,
LPVOID ppobj 
)

Definition at line 312 of file gopher.c.

313{
315
316 TRACE("(%p %p)\n", pUnkOuter, ppobj);
317
319
320 ret = heap_alloc_zero(sizeof(GopherProtocol));
321
322 ret->base.vtbl = &AsyncProtocolVtbl;
323 ret->IInternetProtocol_iface.lpVtbl = &GopherProtocolVtbl;
324 ret->IInternetPriority_iface.lpVtbl = &GopherPriorityVtbl;
325 ret->ref = 1;
326
327 *ppobj = &ret->IInternetProtocol_iface;
328
329 return S_OK;
330}
static const IInternetProtocolVtbl GopherProtocolVtbl
Definition: gopher.c:245
static const IInternetPriorityVtbl GopherPriorityVtbl
Definition: gopher.c:304
static const ProtocolVtbl AsyncProtocolVtbl
Definition: gopher.c:79
static void URLMON_LockModule(void)
Definition: urlmon_main.h:68
int ret

◆ GopherProtocol_Continue()

static HRESULT WINAPI GopherProtocol_Continue ( IInternetProtocol iface,
PROTOCOLDATA *  pProtocolData 
)
static

Definition at line 166 of file gopher.c.

167{
169
170 TRACE("(%p)->(%p)\n", This, pProtocolData);
171
172 return protocol_continue(&This->base, pProtocolData);
173}
HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data)
Definition: protocol.c:355

◆ GopherProtocol_end_request()

static HRESULT GopherProtocol_end_request ( Protocol prot)
static

Definition at line 60 of file gopher.c.

61{
62 return E_NOTIMPL;
63}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ GopherProtocol_LockRequest()

static HRESULT WINAPI GopherProtocol_LockRequest ( IInternetProtocol iface,
DWORD  dwOptions 
)
static

Definition at line 227 of file gopher.c.

228{
230
231 TRACE("(%p)->(%08x)\n", This, dwOptions);
232
233 return protocol_lock_request(&This->base);
234}
HRESULT protocol_lock_request(Protocol *protocol)
Definition: protocol.c:498

◆ GopherProtocol_on_error()

static void GopherProtocol_on_error ( Protocol prot,
DWORD  error 
)
static

Definition at line 74 of file gopher.c.

75{
76 FIXME("(%p) %d - stub\n", prot, error);
77}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define error(str)
Definition: mkdosfs.c:1605

◆ GopherProtocol_open_request()

static HRESULT GopherProtocol_open_request ( Protocol prot,
IUri uri,
DWORD  request_flags,
HINTERNET  internet_session,
IInternetBindInfo bind_info 
)
static

Definition at line 38 of file gopher.c.

40{
42 BSTR url;
44
45 hres = IUri_GetAbsoluteUri(uri, &url);
46 if(FAILED(hres))
47 return hres;
48
49 This->base.request = InternetOpenUrlW(internet_session, url, NULL, 0,
50 request_flags, (DWORD_PTR)&This->base);
52 if (!This->base.request && GetLastError() != ERROR_IO_PENDING) {
53 WARN("InternetOpenUrl failed: %d\n", GetLastError());
54 return INET_E_RESOURCE_NOT_FOUND;
55 }
56
57 return S_OK;
58}
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERROR_IO_PENDING
Definition: dderror.h:15
#define NULL
Definition: types.h:112
OLECHAR * BSTR
Definition: compat.h:2293
static HINTERNET internet_session
Definition: protocol.c:288
HINTERNET WINAPI InternetOpenUrlW(HINTERNET hInternet, LPCWSTR lpszUrl, LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext)
Definition: internet.c:3722
#define FAILED(hr)
Definition: intsafe.h:51
static const WCHAR url[]
Definition: encode.c:1432
HRESULT hres
Definition: protocol.c:465
const char * uri
Definition: sec_mgr.c:1588
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
uint32_t DWORD_PTR
Definition: typedefs.h:65
static GopherProtocol * impl_from_Protocol(Protocol *prot)
Definition: gopher.c:33
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

◆ GopherProtocol_QueryInterface()

static HRESULT WINAPI GopherProtocol_QueryInterface ( IInternetProtocol iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 92 of file gopher.c.

93{
95
96 *ppv = NULL;
98 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
99 *ppv = &This->IInternetProtocol_iface;
100 }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) {
101 TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv);
102 *ppv = &This->IInternetProtocol_iface;
103 }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
104 TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
105 *ppv = &This->IInternetProtocol_iface;
106 }else if(IsEqualGUID(&IID_IInternetPriority, riid)) {
107 TRACE("(%p)->(IID_IInternetPriority %p)\n", This, ppv);
108 *ppv = &This->IInternetPriority_iface;
109 }
110
111 if(*ppv) {
112 IInternetProtocol_AddRef(iface);
113 return S_OK;
114 }
115
116 WARN("not supported interface %s\n", debugstr_guid(riid));
117 return E_NOINTERFACE;
118}
const GUID IID_IUnknown
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ GopherProtocol_Read()

static HRESULT WINAPI GopherProtocol_Read ( IInternetProtocol iface,
void pv,
ULONG  cb,
ULONG pcbRead 
)
static

Definition at line 209 of file gopher.c.

211{
213
214 TRACE("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead);
215
216 return protocol_read(&This->base, pv, cb, pcbRead);
217}
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static int protocol_read
Definition: htmldoc.c:205

◆ GopherProtocol_Release()

static ULONG WINAPI GopherProtocol_Release ( IInternetProtocol iface)
static

Definition at line 128 of file gopher.c.

129{
132
133 TRACE("(%p) ref=%d\n", This, ref);
134
135 if(!ref) {
137
139 }
140
141 return ref;
142}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedDecrement
Definition: armddk.h:52
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:69

◆ GopherProtocol_Resume()

static HRESULT WINAPI GopherProtocol_Resume ( IInternetProtocol iface)
static

Definition at line 202 of file gopher.c.

203{
205 FIXME("(%p)\n", This);
206 return E_NOTIMPL;
207}

◆ GopherProtocol_Seek()

static HRESULT WINAPI GopherProtocol_Seek ( IInternetProtocol iface,
LARGE_INTEGER  dlibMove,
DWORD  dwOrigin,
ULARGE_INTEGER plibNewPosition 
)
static

Definition at line 219 of file gopher.c.

221{
223 FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
224 return E_NOTIMPL;
225}
struct _LARGE_INTEGER::@2303 u

◆ GopherProtocol_Start()

static HRESULT WINAPI GopherProtocol_Start ( IInternetProtocol iface,
LPCWSTR  szUrl,
IInternetProtocolSink pOIProtSink,
IInternetBindInfo pOIBindInfo,
DWORD  grfPI,
HANDLE_PTR  dwReserved 
)
static

Definition at line 144 of file gopher.c.

147{
149 IUri *uri;
151
152 TRACE("(%p)->(%s %p %p %08x %lx)\n", This, debugstr_w(szUrl), pOIProtSink,
153 pOIBindInfo, grfPI, dwReserved);
154
155 hres = CreateUri(szUrl, 0, 0, &uri);
156 if(FAILED(hres))
157 return hres;
158
159 hres = protocol_start(&This->base, &This->IInternetProtocol_iface, uri, pOIProtSink,
160 pOIBindInfo);
161
162 IUri_Release(uri);
163 return hres;
164}
HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
Definition: uri.c:5700
#define debugstr_w
Definition: kernel32.h:32
#define protocol_start(p, u, e)
Definition: protocol.c:303
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95

◆ GopherProtocol_start_downloading()

static HRESULT GopherProtocol_start_downloading ( Protocol prot)
static

Definition at line 65 of file gopher.c.

66{
67 return S_OK;
68}

◆ GopherProtocol_Suspend()

static HRESULT WINAPI GopherProtocol_Suspend ( IInternetProtocol iface)
static

Definition at line 195 of file gopher.c.

196{
198 FIXME("(%p)\n", This);
199 return E_NOTIMPL;
200}

◆ GopherProtocol_Terminate()

static HRESULT WINAPI GopherProtocol_Terminate ( IInternetProtocol iface,
DWORD  dwOptions 
)
static

Definition at line 185 of file gopher.c.

186{
188
189 TRACE("(%p)->(%08x)\n", This, dwOptions);
190
192 return S_OK;
193}
void protocol_close_connection(Protocol *protocol)
Definition: protocol.c:531

◆ GopherProtocol_UnlockRequest()

static HRESULT WINAPI GopherProtocol_UnlockRequest ( IInternetProtocol iface)
static

Definition at line 236 of file gopher.c.

237{
239
240 TRACE("(%p)\n", This);
241
242 return protocol_unlock_request(&This->base);
243}
HRESULT protocol_unlock_request(Protocol *protocol)
Definition: protocol.c:506

◆ impl_from_IInternetPriority()

static GopherProtocol * impl_from_IInternetPriority ( IInternetPriority iface)
inlinestatic

Definition at line 261 of file gopher.c.

262{
263 return CONTAINING_RECORD(iface, GopherProtocol, IInternetPriority_iface);
264}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by GopherPriority_AddRef(), GopherPriority_GetPriority(), GopherPriority_QueryInterface(), GopherPriority_Release(), and GopherPriority_SetPriority().

◆ impl_from_IInternetProtocol()

◆ impl_from_Protocol()

static GopherProtocol * impl_from_Protocol ( Protocol prot)
inlinestatic

Definition at line 33 of file gopher.c.

34{
36}

Referenced by GopherProtocol_open_request().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( urlmon  )

Variable Documentation

◆ AsyncProtocolVtbl

const ProtocolVtbl AsyncProtocolVtbl
static
Initial value:
= {
}
static HRESULT GopherProtocol_end_request(Protocol *prot)
Definition: gopher.c:60
static HRESULT GopherProtocol_start_downloading(Protocol *prot)
Definition: gopher.c:65
static void GopherProtocol_on_error(Protocol *prot, DWORD error)
Definition: gopher.c:74
static HRESULT GopherProtocol_open_request(Protocol *prot, IUri *uri, DWORD request_flags, HINTERNET internet_session, IInternetBindInfo *bind_info)
Definition: gopher.c:38
static void GopherProtocol_close_connection(Protocol *prot)
Definition: gopher.c:70

Definition at line 79 of file gopher.c.

Referenced by GopherProtocol_Construct().

◆ GopherPriorityVtbl

const IInternetPriorityVtbl GopherPriorityVtbl
static
Initial value:
= {
}
static ULONG WINAPI GopherPriority_AddRef(IInternetPriority *iface)
Definition: gopher.c:272
static HRESULT WINAPI GopherPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
Definition: gopher.c:284
static HRESULT WINAPI GopherPriority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv)
Definition: gopher.c:266
static ULONG WINAPI GopherPriority_Release(IInternetPriority *iface)
Definition: gopher.c:278
static HRESULT WINAPI GopherPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
Definition: gopher.c:294

Definition at line 304 of file gopher.c.

Referenced by GopherProtocol_Construct().

◆ GopherProtocolVtbl

const IInternetProtocolVtbl GopherProtocolVtbl
static
Initial value:
= {
}
static HRESULT WINAPI GopherProtocol_Suspend(IInternetProtocol *iface)
Definition: gopher.c:195
static ULONG WINAPI GopherProtocol_AddRef(IInternetProtocol *iface)
Definition: gopher.c:120
static HRESULT WINAPI GopherProtocol_UnlockRequest(IInternetProtocol *iface)
Definition: gopher.c:236
static HRESULT WINAPI GopherProtocol_Read(IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
Definition: gopher.c:209
static HRESULT WINAPI GopherProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
Definition: gopher.c:144
static HRESULT WINAPI GopherProtocol_Resume(IInternetProtocol *iface)
Definition: gopher.c:202
static HRESULT WINAPI GopherProtocol_Abort(IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
Definition: gopher.c:175
static HRESULT WINAPI GopherProtocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
Definition: gopher.c:227
static HRESULT WINAPI GopherProtocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
Definition: gopher.c:219
static HRESULT WINAPI GopherProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
Definition: gopher.c:166
static ULONG WINAPI GopherProtocol_Release(IInternetProtocol *iface)
Definition: gopher.c:128
static HRESULT WINAPI GopherProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
Definition: gopher.c:92
static HRESULT WINAPI GopherProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
Definition: gopher.c:185

Definition at line 245 of file gopher.c.

Referenced by GopherProtocol_Construct().