Hans Leidekker : winhttp: Add a stub implementation of IWinHttpRequest.
Alexandre Julliard
julliard at winehq.org
Fri Jul 8 11:23:43 CDT 2011
Module: wine
Branch: master
Commit: fd7538d38cad6c93739a34b68ee573a9bc4d9a3f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fd7538d38cad6c93739a34b68ee573a9bc4d9a3f
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Jul 8 16:46:14 2011 +0200
winhttp: Add a stub implementation of IWinHttpRequest.
---
dlls/winhttp/Makefile.in | 2 +-
dlls/winhttp/request.c | 314 ++++++++++++++++++++++++++++++++++++++++
dlls/winhttp/winhttp_private.h | 3 +
3 files changed, 318 insertions(+), 1 deletions(-)
diff --git a/dlls/winhttp/Makefile.in b/dlls/winhttp/Makefile.in
index ef080a0..ed8968e 100644
--- a/dlls/winhttp/Makefile.in
+++ b/dlls/winhttp/Makefile.in
@@ -1,6 +1,6 @@
MODULE = winhttp.dll
IMPORTLIB = winhttp
-IMPORTS = shlwapi
+IMPORTS = uuid shlwapi
DELAYIMPORTS = crypt32 advapi32
EXTRALIBS = @SOCKETLIBS@
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index c8eca75..d36c657 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
#include "config.h"
#include "wine/port.h"
#include "wine/debug.h"
@@ -30,6 +31,9 @@
#include "windef.h"
#include "winbase.h"
+#include "ole2.h"
+#include "initguid.h"
+#include "httprequest.h"
#include "winhttp.h"
#include "winhttp_private.h"
@@ -2132,3 +2136,313 @@ BOOL WINAPI WinHttpWriteData( HINTERNET hrequest, LPCVOID buffer, DWORD to_write
release_object( &request->hdr );
return ret;
}
+
+struct winhttp_request
+{
+ IWinHttpRequest IWinHttpRequest_iface;
+ LONG refs;
+};
+
+static inline struct winhttp_request *impl_from_IWinHttpRequest( IWinHttpRequest *iface )
+{
+ return CONTAINING_RECORD( iface, struct winhttp_request, IWinHttpRequest_iface );
+}
+
+static ULONG WINAPI winhttp_request_AddRef(
+ IWinHttpRequest *iface )
+{
+ struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
+ return InterlockedIncrement( &request->refs );
+}
+
+static ULONG WINAPI winhttp_request_Release(
+ IWinHttpRequest *iface )
+{
+ struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
+ LONG refs = InterlockedDecrement( &request->refs );
+ if (!refs)
+ {
+ TRACE("destroying %p\n", request);
+ heap_free( request );
+ }
+ return refs;
+}
+
+static HRESULT WINAPI winhttp_request_QueryInterface(
+ IWinHttpRequest *iface,
+ REFIID riid,
+ void **obj )
+{
+ struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
+
+ TRACE("%p, %s, %p\n", request, debugstr_guid(riid), obj );
+
+ if (IsEqualGUID( riid, &IID_IWinHttpRequest ) ||
+ IsEqualGUID( riid, &IID_IDispatch ) ||
+ IsEqualGUID( riid, &IID_IUnknown ))
+ {
+ *obj = iface;
+ }
+ else
+ {
+ FIXME("interface %s not implemented\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+ }
+ IWinHttpRequest_AddRef( iface );
+ return S_OK;
+}
+
+static HRESULT WINAPI winhttp_request_GetTypeInfoCount(
+ IWinHttpRequest *iface,
+ UINT *count )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_GetTypeInfo(
+ IWinHttpRequest *iface,
+ UINT index,
+ LCID lcid,
+ ITypeInfo **info )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_GetIDsOfNames(
+ IWinHttpRequest *iface,
+ REFIID riid,
+ LPOLESTR *names,
+ UINT count,
+ LCID lcid,
+ DISPID *dispid )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_Invoke(
+ IWinHttpRequest *iface,
+ DISPID member,
+ REFIID riid,
+ LCID lcid,
+ WORD flags,
+ DISPPARAMS *params,
+ VARIANT *result,
+ EXCEPINFO *excep_info,
+ UINT *arg_err )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetProxy(
+ IWinHttpRequest *iface,
+ HTTPREQUEST_PROXY_SETTING proxy_setting,
+ VARIANT proxy_server,
+ VARIANT bypass_list )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetCredentials(
+ IWinHttpRequest *iface,
+ BSTR username,
+ BSTR password,
+ HTTPREQUEST_SETCREDENTIALS_FLAGS flags )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_Open(
+ IWinHttpRequest *iface,
+ BSTR method,
+ BSTR url,
+ VARIANT async )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetRequestHeader(
+ IWinHttpRequest *iface,
+ BSTR header,
+ BSTR value )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_GetResponseHeader(
+ IWinHttpRequest *iface,
+ BSTR header,
+ BSTR *value )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_GetAllResponseHeaders(
+ IWinHttpRequest *iface,
+ BSTR *headers )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_Send(
+ IWinHttpRequest *iface,
+ VARIANT body )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_Status(
+ IWinHttpRequest *iface,
+ LONG *status )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_StatusText(
+ IWinHttpRequest *iface,
+ BSTR *status )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_ResponseText(
+ IWinHttpRequest *iface,
+ BSTR *body )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_ResponseBody(
+ IWinHttpRequest *iface,
+ VARIANT *body )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_ResponseStream(
+ IWinHttpRequest *iface,
+ VARIANT *body )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_get_Option(
+ IWinHttpRequest *iface,
+ WinHttpRequestOption option,
+ VARIANT *value )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_put_Option(
+ IWinHttpRequest *iface,
+ WinHttpRequestOption option,
+ VARIANT value )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_WaitForResponse(
+ IWinHttpRequest *iface,
+ VARIANT timeout,
+ VARIANT_BOOL *succeeded )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_Abort(
+ IWinHttpRequest *iface )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetTimeouts(
+ IWinHttpRequest *iface,
+ LONG resolve_timeout,
+ LONG connect_timeout,
+ LONG send_timeout,
+ LONG receive_timeout )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetClientCertificate(
+ IWinHttpRequest *iface,
+ BSTR certificate )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI winhttp_request_SetAutoLogonPolicy(
+ IWinHttpRequest *iface,
+ WinHttpRequestAutoLogonPolicy policy )
+{
+ FIXME("\n");
+ return E_NOTIMPL;
+}
+
+static const struct IWinHttpRequestVtbl winhttp_request_vtbl =
+{
+ winhttp_request_QueryInterface,
+ winhttp_request_AddRef,
+ winhttp_request_Release,
+ winhttp_request_GetTypeInfoCount,
+ winhttp_request_GetTypeInfo,
+ winhttp_request_GetIDsOfNames,
+ winhttp_request_Invoke,
+ winhttp_request_SetProxy,
+ winhttp_request_SetCredentials,
+ winhttp_request_Open,
+ winhttp_request_SetRequestHeader,
+ winhttp_request_GetResponseHeader,
+ winhttp_request_GetAllResponseHeaders,
+ winhttp_request_Send,
+ winhttp_request_get_Status,
+ winhttp_request_get_StatusText,
+ winhttp_request_get_ResponseText,
+ winhttp_request_get_ResponseBody,
+ winhttp_request_get_ResponseStream,
+ winhttp_request_get_Option,
+ winhttp_request_put_Option,
+ winhttp_request_WaitForResponse,
+ winhttp_request_Abort,
+ winhttp_request_SetTimeouts,
+ winhttp_request_SetClientCertificate,
+ winhttp_request_SetAutoLogonPolicy
+};
+
+HRESULT WinHttpRequest_create( IUnknown *unknown, void **obj )
+{
+ struct winhttp_request *request;
+
+ TRACE("%p, %p\n", unknown, obj);
+
+ if (!(request = heap_alloc( sizeof(*request) ))) return E_OUTOFMEMORY;
+ request->IWinHttpRequest_iface.lpVtbl = &winhttp_request_vtbl;
+ request->refs = 1;
+
+ *obj = &request->IWinHttpRequest_iface;
+ TRACE("returning iface %p\n", *obj);
+ return S_OK;
+}
diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h
index 2444052..7607174 100644
--- a/dlls/winhttp/winhttp_private.h
+++ b/dlls/winhttp/winhttp_private.h
@@ -42,6 +42,7 @@
# define closesocket close
# define ioctlsocket ioctl
#endif
+#include "ole2.h"
static const WCHAR getW[] = {'G','E','T',0};
static const WCHAR postW[] = {'P','O','S','T',0};
@@ -237,6 +238,8 @@ BOOL add_request_headers( request_t *, LPCWSTR, DWORD, DWORD ) DECLSPEC_HIDDEN;
void delete_domain( domain_t * ) DECLSPEC_HIDDEN;
BOOL set_server_for_hostname( connect_t *connect, LPCWSTR server, INTERNET_PORT port ) DECLSPEC_HIDDEN;
+extern HRESULT WinHttpRequest_create( IUnknown *, void ** ) DECLSPEC_HIDDEN;
+
static inline void *heap_alloc( SIZE_T size )
{
return HeapAlloc( GetProcessHeap(), 0, size );
More information about the wine-cvs
mailing list