mshtml: Add nsChannel_GetResponseStatusText implementation.
This commit is contained in:
parent
21043e5acf
commit
4e6e9a1485
|
@ -51,6 +51,7 @@ typedef struct {
|
||||||
char *content_type;
|
char *content_type;
|
||||||
char *charset;
|
char *charset;
|
||||||
UINT32 response_status;
|
UINT32 response_status;
|
||||||
|
char *response_status_text;
|
||||||
REQUEST_METHOD request_method;
|
REQUEST_METHOD request_method;
|
||||||
struct list response_headers;
|
struct list response_headers;
|
||||||
struct list request_headers;
|
struct list request_headers;
|
||||||
|
|
|
@ -1230,6 +1230,23 @@ static inline char *heap_strdupWtoU(const WCHAR *str)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline char *heap_strndupWtoU(LPCWSTR str, unsigned len)
|
||||||
|
{
|
||||||
|
char *ret = NULL;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
if(str && len) {
|
||||||
|
size = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL);
|
||||||
|
ret = heap_alloc(size + 1);
|
||||||
|
if(ret) {
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, str, len, ret, size, NULL, NULL);
|
||||||
|
ret[size] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void windowref_addref(windowref_t *ref)
|
static inline void windowref_addref(windowref_t *ref)
|
||||||
{
|
{
|
||||||
InterlockedIncrement(&ref->ref);
|
InterlockedIncrement(&ref->ref);
|
||||||
|
|
|
@ -1595,10 +1595,29 @@ static HRESULT nsChannelBSC_on_progress(BSCallback *bsc, ULONG status_code, LPCW
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT process_response_status_text(const WCHAR *header, const WCHAR *header_end, char **status_text)
|
||||||
|
{
|
||||||
|
header = strchrW(header + 1, ' ');
|
||||||
|
if(!header || header >= header_end)
|
||||||
|
return E_FAIL;
|
||||||
|
header = strchrW(header + 1, ' ');
|
||||||
|
if(!header || header >= header_end)
|
||||||
|
return E_FAIL;
|
||||||
|
++header;
|
||||||
|
|
||||||
|
*status_text = heap_strndupWtoU(header, header_end - header);
|
||||||
|
|
||||||
|
if(!*status_text)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
|
static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
|
||||||
LPCWSTR response_headers)
|
LPCWSTR response_headers)
|
||||||
{
|
{
|
||||||
nsChannelBSC *This = nsChannelBSC_from_BSCallback(bsc);
|
nsChannelBSC *This = nsChannelBSC_from_BSCallback(bsc);
|
||||||
|
char *str;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
This->response_processed = TRUE;
|
This->response_processed = TRUE;
|
||||||
|
@ -1608,6 +1627,15 @@ static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code,
|
||||||
const WCHAR *headers;
|
const WCHAR *headers;
|
||||||
|
|
||||||
headers = strchrW(response_headers, '\r');
|
headers = strchrW(response_headers, '\r');
|
||||||
|
hres = process_response_status_text(response_headers, headers, &str);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
WARN("parsing headers failed: %08x\n", hres);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
heap_free(This->nschannel->response_status_text);
|
||||||
|
This->nschannel->response_status_text = str;
|
||||||
|
|
||||||
if(headers && headers[1] == '\n') {
|
if(headers && headers[1] == '\n') {
|
||||||
headers += 2;
|
headers += 2;
|
||||||
hres = process_response_headers(This, headers);
|
hres = process_response_headers(This, headers);
|
||||||
|
|
|
@ -1394,9 +1394,10 @@ static nsresult NSAPI nsChannel_GetResponseStatusText(nsIHttpChannel *iface,
|
||||||
{
|
{
|
||||||
nsChannel *This = impl_from_nsIHttpChannel(iface);
|
nsChannel *This = impl_from_nsIHttpChannel(iface);
|
||||||
|
|
||||||
FIXME("(%p)->(%p)\n", This, aResponseStatusText);
|
TRACE("(%p)->(%p)\n", This, aResponseStatusText);
|
||||||
|
|
||||||
return NS_ERROR_NOT_IMPLEMENTED;
|
nsACString_SetData(aResponseStatusText, This->response_status_text);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static nsresult NSAPI nsChannel_GetRequestSucceeded(nsIHttpChannel *iface,
|
static nsresult NSAPI nsChannel_GetRequestSucceeded(nsIHttpChannel *iface,
|
||||||
|
|
Loading…
Reference in New Issue