Jacek Caban : urlmon: Added implementation of QueryService and stub
implementation
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jan 5 10:53:57 CST 2006
Module: wine
Branch: refs/heads/master
Commit: b235d7953c4569931087f67e651a3983a1a6ad85
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b235d7953c4569931087f67e651a3983a1a6ad85
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Jan 5 13:42:43 2006 +0100
urlmon: Added implementation of QueryService and stub implementation
of IHttpNegotiate2 interface.
---
dlls/urlmon/binding.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 87 insertions(+), 1 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 46ced83..4cb41a5 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -58,6 +58,77 @@ typedef struct {
#define BINDINF(x) ((IInternetBindInfo*) &(x)->lpInternetBindInfoVtbl)
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
+static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface,
+ REFIID riid, void **ppv)
+{
+ *ppv = NULL;
+
+ if(IsEqualGUID(&IID_IUnknown, riid)) {
+ TRACE("(IID_IUnknown %p)\n", ppv);
+ *ppv = iface;
+ }else if(IsEqualGUID(&IID_IHttpNegotiate, riid)) {
+ TRACE("(IID_IHttpNegotiate %p)\n", ppv);
+ *ppv = iface;
+ }else if(IsEqualGUID(&IID_IHttpNegotiate2, riid)) {
+ TRACE("(IID_IHttpNegotiate2 %p)\n", ppv);
+ *ppv = iface;
+ }
+
+ if(*ppv) {
+ IHttpNegotiate2_AddRef(iface);
+ return S_OK;
+ }
+
+ WARN("Unsupported interface %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI HttpNegotiate_AddRef(IHttpNegotiate2 *iface)
+{
+ URLMON_LockModule();
+ return 2;
+}
+
+static ULONG WINAPI HttpNegotiate_Release(IHttpNegotiate2 *iface)
+{
+ URLMON_UnlockModule();
+ return 1;
+}
+
+static HRESULT WINAPI HttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface,
+ LPCWSTR szURL, LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders)
+{
+ FIXME("(%s %s %ld %p)\n", debugstr_w(szURL), debugstr_w(szHeaders), dwReserved,
+ pszAdditionalHeaders);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HttpNegotiate_OnResponse(IHttpNegotiate2 *iface, DWORD dwResponseCode,
+ LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders,
+ LPWSTR *pszAdditionalRequestHeaders)
+{
+ FIXME("(%ld %s %s %p)\n", dwResponseCode, debugstr_w(szResponseHeaders),
+ debugstr_w(szRequestHeaders), pszAdditionalRequestHeaders);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HttpNegotiate_GetRootSecurityId(IHttpNegotiate2 *iface,
+ BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
+{
+ FIXME("(%p %p %ld)\n", pbSecurityId, pcbSecurityId, dwReserved);
+ return E_NOTIMPL;
+}
+
+static const IHttpNegotiate2Vtbl HttpNegotiate2Vtbl = {
+ HttpNegotiate_QueryInterface,
+ HttpNegotiate_AddRef,
+ HttpNegotiate_Release,
+ HttpNegotiate_BeginningTransaction,
+ HttpNegotiate_OnResponse,
+ HttpNegotiate_GetRootSecurityId
+};
+
+static IHttpNegotiate2 HttpNegotiate = { &HttpNegotiate2Vtbl };
#define BINDING_THIS(iface) DEFINE_THIS(Binding, Binding, iface)
@@ -425,7 +496,22 @@ static HRESULT WINAPI ServiceProvider_Qu
REFGUID guidService, REFIID riid, void **ppv)
{
Binding *This = SERVPROV_THIS(iface);
- FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
+
+ if(This->service_provider) {
+ hres = IServiceProvider_QueryService(This->service_provider, guidService,
+ riid, ppv);
+ if(SUCCEEDED(hres))
+ return hres;
+ }
+
+ if(IsEqualGUID(&IID_IHttpNegotiate, guidService)
+ || IsEqualGUID(&IID_IHttpNegotiate2, guidService))
+ return IHttpNegotiate2_QueryInterface(&HttpNegotiate, riid, ppv);
+
+ WARN("unknown service %s\n", debugstr_guid(guidService));
return E_NOTIMPL;
}
More information about the wine-cvs
mailing list