Nikolay Sivov : msxml3: Support DELETE method in IXMLHttpRequest.
Alexandre Julliard
julliard at winehq.org
Wed Dec 21 12:38:07 CST 2011
Module: wine
Branch: master
Commit: 8c03b4e5f0d73297dfbe6feb6a73a6ca785aa500
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8c03b4e5f0d73297dfbe6feb6a73a6ca785aa500
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Dec 21 00:05:45 2011 +0300
msxml3: Support DELETE method in IXMLHttpRequest.
---
dlls/msxml3/httprequest.c | 42 ++++++++++++++++++++++++++++--------------
1 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c
index 6b77d2e..3000037 100644
--- a/dlls/msxml3/httprequest.c
+++ b/dlls/msxml3/httprequest.c
@@ -47,10 +47,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
#ifdef HAVE_LIBXML2
-static const WCHAR MethodGetW[] = {'G','E','T',0};
-static const WCHAR MethodPutW[] = {'P','U','T',0};
-static const WCHAR MethodPostW[] = {'P','O','S','T',0};
-
static const WCHAR colspaceW[] = {':',' ',0};
static const WCHAR crlfW[] = {'\r','\n',0};
@@ -75,6 +71,7 @@ typedef struct
/* request */
BINDVERB verb;
+ BSTR custom;
BSTR url;
BOOL async;
struct list reqheaders;
@@ -334,6 +331,11 @@ static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallback *iface,
}
pbindinfo->dwBindVerb = This->request->verb;
+ if (This->request->verb == BINDVERB_CUSTOM)
+ {
+ pbindinfo->szCustomVerb = CoTaskMemAlloc(SysStringByteLen(This->request->custom));
+ strcpyW(pbindinfo->szCustomVerb, This->request->custom);
+ }
return S_OK;
}
@@ -732,6 +734,7 @@ static ULONG WINAPI httprequest_Release(IXMLHTTPRequest *iface)
if (This->site)
IUnknown_Release( This->site );
+ SysFreeString(This->custom);
SysFreeString(This->url);
SysFreeString(This->user);
SysFreeString(This->password);
@@ -827,9 +830,14 @@ static HRESULT WINAPI httprequest_Invoke(IXMLHTTPRequest *iface, DISPID dispIdMe
static HRESULT WINAPI httprequest_open(IXMLHTTPRequest *iface, BSTR method, BSTR url,
VARIANT async, VARIANT user, VARIANT password)
{
+ static const WCHAR MethodGetW[] = {'G','E','T',0};
+ static const WCHAR MethodPutW[] = {'P','U','T',0};
+ static const WCHAR MethodPostW[] = {'P','O','S','T',0};
+ static const WCHAR MethodDeleteW[] = {'D','E','L','E','T','E',0};
+
httprequest *This = impl_from_IXMLHTTPRequest( iface );
- HRESULT hr;
VARIANT str, is_async;
+ HRESULT hr;
TRACE("(%p)->(%s %s %s)\n", This, debugstr_w(method), debugstr_w(url),
debugstr_variant(&async));
@@ -842,18 +850,23 @@ static HRESULT WINAPI httprequest_open(IXMLHTTPRequest *iface, BSTR method, BSTR
SysFreeString(This->password);
This->url = This->user = This->password = NULL;
- if (lstrcmpiW(method, MethodGetW) == 0)
+ if (!strcmpiW(method, MethodGetW))
{
This->verb = BINDVERB_GET;
}
- else if (lstrcmpiW(method, MethodPutW) == 0)
+ else if (!strcmpiW(method, MethodPutW))
{
This->verb = BINDVERB_PUT;
}
- else if (lstrcmpiW(method, MethodPostW) == 0)
+ else if (!strcmpiW(method, MethodPostW))
{
This->verb = BINDVERB_POST;
}
+ else if (!strcmpiW(method, MethodDeleteW))
+ {
+ This->verb = BINDVERB_CUSTOM;
+ SysReAllocString(&This->custom, method);
+ }
else
{
FIXME("unsupported request type %s\n", debugstr_w(method));
@@ -1219,7 +1232,7 @@ static HRESULT WINAPI httprequest_put_onreadystatechange(IXMLHTTPRequest *iface,
return S_OK;
}
-static const struct IXMLHTTPRequestVtbl dimimpl_vtbl =
+static const struct IXMLHTTPRequestVtbl XMLHTTPRequestVtbl =
{
httprequest_QueryInterface,
httprequest_AddRef,
@@ -1293,7 +1306,7 @@ static HRESULT WINAPI httprequest_ObjectWithSite_SetSite( IObjectWithSite *iface
return S_OK;
}
-static const IObjectWithSiteVtbl httprequestObjectSite =
+static const IObjectWithSiteVtbl ObjectWithSiteVtbl =
{
httprequest_ObjectWithSite_QueryInterface,
httprequest_ObjectWithSite_AddRef,
@@ -1354,7 +1367,7 @@ static HRESULT WINAPI httprequest_Safety_SetInterfaceSafetyOptions(IObjectSafety
#undef SAFETY_SUPPORTED_OPTIONS
-static const IObjectSafetyVtbl httprequestObjectSafety = {
+static const IObjectSafetyVtbl ObjectSafetyVtbl = {
httprequest_Safety_QueryInterface,
httprequest_Safety_AddRef,
httprequest_Safety_Release,
@@ -1373,13 +1386,14 @@ HRESULT XMLHTTPRequest_create(IUnknown *pUnkOuter, void **ppObj)
if( !req )
return E_OUTOFMEMORY;
- req->IXMLHTTPRequest_iface.lpVtbl = &dimimpl_vtbl;
- req->IObjectWithSite_iface.lpVtbl = &httprequestObjectSite;
- req->IObjectSafety_iface.lpVtbl = &httprequestObjectSafety;
+ req->IXMLHTTPRequest_iface.lpVtbl = &XMLHTTPRequestVtbl;
+ req->IObjectWithSite_iface.lpVtbl = &ObjectWithSiteVtbl;
+ req->IObjectSafety_iface.lpVtbl = &ObjectSafetyVtbl;
req->ref = 1;
req->async = FALSE;
req->verb = -1;
+ req->custom = NULL;
req->url = req->user = req->password = NULL;
req->state = READYSTATE_UNINITIALIZED;
More information about the wine-cvs
mailing list