sync urlmon to wine 1.1.14

svn path=/trunk/; revision=39266
This commit is contained in:
Christoph von Wittich 2009-02-01 13:46:44 +00:00
parent 05b450ba65
commit fbed23740e
5 changed files with 48 additions and 54 deletions

View file

@ -1183,6 +1183,8 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink
case BINDSTATUS_DIRECTBIND: case BINDSTATUS_DIRECTBIND:
This->report_mime = FALSE; This->report_mime = FALSE;
break; break;
case BINDSTATUS_ACCEPTRANGES:
break;
default: default:
FIXME("Unhandled status code %d\n", ulStatusCode); FIXME("Unhandled status code %d\n", ulStatusCode);
return E_NOTIMPL; return E_NOTIMPL;

View file

@ -486,6 +486,7 @@ static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSin
case BINDSTATUS_SENDINGREQUEST: case BINDSTATUS_SENDINGREQUEST:
case BINDSTATUS_CACHEFILENAMEAVAILABLE: case BINDSTATUS_CACHEFILENAMEAVAILABLE:
case BINDSTATUS_DIRECTBIND: case BINDSTATUS_DIRECTBIND:
case BINDSTATUS_ACCEPTRANGES:
case BINDSTATUS_MIMETYPEAVAILABLE: case BINDSTATUS_MIMETYPEAVAILABLE:
if(!This->protocol_sink) if(!This->protocol_sink)
return S_OK; return S_OK;

View file

@ -63,6 +63,7 @@ typedef struct {
const IInternetProtocolVtbl *lpInternetProtocolVtbl; const IInternetProtocolVtbl *lpInternetProtocolVtbl;
const IInternetPriorityVtbl *lpInternetPriorityVtbl; const IInternetPriorityVtbl *lpInternetPriorityVtbl;
BOOL https;
DWORD flags, grfBINDF; DWORD flags, grfBINDF;
BINDINFO bind_info; BINDINFO bind_info;
IInternetProtocolSink *protocol_sink; IInternetProtocolSink *protocol_sink;
@ -309,7 +310,8 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
LPOLESTR user_agent = NULL, accept_mimes[257]; LPOLESTR user_agent = NULL, accept_mimes[257];
HRESULT hres; HRESULT hres;
static const WCHAR wszHttp[] = {'h','t','t','p',':'}; static const WCHAR httpW[] = {'h','t','t','p',':'};
static const WCHAR httpsW[] = {'h','t','t','p','s',':'};
static const WCHAR wszBindVerb[BINDVERB_CUSTOM][5] = static const WCHAR wszBindVerb[BINDVERB_CUSTOM][5] =
{{'G','E','T',0}, {{'G','E','T',0},
{'P','O','S','T',0}, {'P','O','S','T',0},
@ -330,8 +332,9 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
goto done; goto done;
} }
if (strlenW(szUrl) < sizeof(wszHttp)/sizeof(WCHAR) if(This->https
|| memcmp(szUrl, wszHttp, sizeof(wszHttp))) ? strncmpW(szUrl, httpsW, sizeof(httpsW)/sizeof(WCHAR))
: strncmpW(szUrl, httpW, sizeof(httpW)/sizeof(WCHAR)))
{ {
hres = MK_E_SYNTAX; hres = MK_E_SYNTAX;
goto done; goto done;
@ -351,7 +354,7 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
user = strndupW(url.lpszUserName, url.dwUserNameLength); user = strndupW(url.lpszUserName, url.dwUserNameLength);
pass = strndupW(url.lpszPassword, url.dwPasswordLength); pass = strndupW(url.lpszPassword, url.dwPasswordLength);
if (!url.nPort) if (!url.nPort)
url.nPort = INTERNET_DEFAULT_HTTP_PORT; url.nPort = This->https ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT;
if(!(This->grfBINDF & BINDF_FROMURLMON)) if(!(This->grfBINDF & BINDF_FROMURLMON))
IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_DIRECTBIND, NULL); IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_DIRECTBIND, NULL);
@ -397,7 +400,9 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
InternetSetStatusCallbackW(This->internet, HTTPPROTOCOL_InternetStatusCallback); InternetSetStatusCallbackW(This->internet, HTTPPROTOCOL_InternetStatusCallback);
This->connect = InternetConnectW(This->internet, host, url.nPort, user, This->connect = InternetConnectW(This->internet, host, url.nPort, user,
pass, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)This); pass, INTERNET_SERVICE_HTTP,
This->https ? INTERNET_FLAG_SECURE : 0,
(DWORD_PTR)This);
if (!This->connect) if (!This->connect)
{ {
WARN("InternetConnect failed: %d\n", GetLastError()); WARN("InternetConnect failed: %d\n", GetLastError());
@ -421,6 +426,8 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
request_flags |= INTERNET_FLAG_NO_CACHE_WRITE; request_flags |= INTERNET_FLAG_NO_CACHE_WRITE;
if (This->grfBINDF & BINDF_NEEDFILE) if (This->grfBINDF & BINDF_NEEDFILE)
request_flags |= INTERNET_FLAG_NEED_FILE; request_flags |= INTERNET_FLAG_NEED_FILE;
if (This->https)
request_flags |= INTERNET_FLAG_SECURE;
This->request = HttpOpenRequestW(This->connect, This->bind_info.dwBindVerb < BINDVERB_CUSTOM ? This->request = HttpOpenRequestW(This->connect, This->bind_info.dwBindVerb < BINDVERB_CUSTOM ?
wszBindVerb[This->bind_info.dwBindVerb] : wszBindVerb[This->bind_info.dwBindVerb] :
This->bind_info.szCustomVerb, This->bind_info.szCustomVerb,
@ -618,6 +625,9 @@ static HRESULT WINAPI HttpProtocol_Continue(IInternetProtocol *iface, PROTOCOLDA
} }
} }
if(This->https)
IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL);
len = 0; len = 0;
if ((!HttpQueryInfoW(This->request, HTTP_QUERY_CONTENT_TYPE, content_type, &len, NULL) && if ((!HttpQueryInfoW(This->request, HTTP_QUERY_CONTENT_TYPE, content_type, &len, NULL) &&
GetLastError() != ERROR_INSUFFICIENT_BUFFER) || GetLastError() != ERROR_INSUFFICIENT_BUFFER) ||
@ -923,36 +933,36 @@ static const IInternetProtocolVtbl HttpProtocolVtbl = {
HttpProtocol_UnlockRequest HttpProtocol_UnlockRequest
}; };
HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) HRESULT create_http_protocol(BOOL https, void **ppobj)
{ {
HttpProtocol *ret; HttpProtocol *ret;
TRACE("(%p %p)\n", pUnkOuter, ppobj); ret = heap_alloc_zero(sizeof(HttpProtocol));
if(!ret)
URLMON_LockModule(); return E_OUTOFMEMORY;
ret = heap_alloc(sizeof(HttpProtocol));
ret->lpInternetProtocolVtbl = &HttpProtocolVtbl; ret->lpInternetProtocolVtbl = &HttpProtocolVtbl;
ret->lpInternetPriorityVtbl = &HttpPriorityVtbl; ret->lpInternetPriorityVtbl = &HttpPriorityVtbl;
ret->flags = ret->grfBINDF = 0;
memset(&ret->bind_info, 0, sizeof(ret->bind_info)); ret->https = https;
ret->protocol_sink = 0;
ret->http_negotiate = 0;
ret->internet = ret->connect = ret->request = 0;
ret->full_header = 0;
ret->lock = 0;
ret->current_position = ret->content_length = ret->available_bytes = 0;
ret->priority = 0;
ret->ref = 1; ret->ref = 1;
*ppobj = PROTOCOL(ret); *ppobj = PROTOCOL(ret);
URLMON_LockModule();
return S_OK; return S_OK;
} }
HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
{
TRACE("(%p %p)\n", pUnkOuter, ppobj);
return create_http_protocol(FALSE, ppobj);
}
HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
{ {
FIXME("(%p %p)\n", pUnkOuter, ppobj); TRACE("(%p %p)\n", pUnkOuter, ppobj);
return E_NOINTERFACE;
return create_http_protocol(TRUE, ppobj);
} }

View file

@ -532,7 +532,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc,
if(SUCCEEDED(hres)) { if(SUCCEEDED(hres)) {
URL_COMPONENTSW url; URL_COMPONENTSW url;
WCHAR *host, *path, *user, *pass; WCHAR *host, *path, *user, *pass;
DWORD lensz = sizeof(bind->expected_size);
DWORD dwService = 0; DWORD dwService = 0;
BOOL bSuccess; BOOL bSuccess;
@ -597,12 +596,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc,
url.nPort = INTERNET_DEFAULT_GOPHER_PORT; url.nPort = INTERNET_DEFAULT_GOPHER_PORT;
dwService = INTERNET_SERVICE_GOPHER; dwService = INTERNET_SERVICE_GOPHER;
break; break;
case INTERNET_SCHEME_HTTPS:
if (!url.nPort)
url.nPort = INTERNET_DEFAULT_HTTPS_PORT;
dwService = INTERNET_SERVICE_HTTP;
break;
} }
bind->hconnect = InternetConnectW(bind->hinternet, host, url.nPort, user, pass, bind->hconnect = InternetConnectW(bind->hinternet, host, url.nPort, user, pass,
@ -648,28 +641,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc,
else else
hres = HRESULT_FROM_WIN32(GetLastError()); hres = HRESULT_FROM_WIN32(GetLastError());
break; break;
case INTERNET_SERVICE_HTTP:
bind->hrequest = HttpOpenRequestW(bind->hconnect, NULL, path, NULL, NULL, NULL, 0, (DWORD_PTR)bind);
if (!bind->hrequest)
{
hres = HRESULT_FROM_WIN32(GetLastError());
}
else if (!HttpSendRequestW(bind->hrequest, NULL, 0, NULL, 0))
{
hres = HRESULT_FROM_WIN32(GetLastError());
InternetCloseHandle(bind->hrequest);
}
else
{
HttpQueryInfoW(bind->hrequest,
HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
&bind->expected_size,
&lensz,
NULL);
bSuccess = TRUE;
}
break;
} }
if(bSuccess) if(bSuccess)
{ {
@ -734,8 +705,7 @@ static HRESULT WINAPI URLMonikerImpl_BindToStorage(IMoniker* iface,
} }
if(IsEqualGUID(&IID_IStream, riid) && if(IsEqualGUID(&IID_IStream, riid) &&
( url.nScheme == INTERNET_SCHEME_HTTPS ( url.nScheme == INTERNET_SCHEME_FTP
|| url.nScheme == INTERNET_SCHEME_FTP
|| url.nScheme == INTERNET_SCHEME_GOPHER)) || url.nScheme == INTERNET_SCHEME_GOPHER))
return URLMonikerImpl_BindToStorage_hack(This->URLName, pbc, ppvObject); return URLMonikerImpl_BindToStorage_hack(This->URLName, pbc, ppvObject);
@ -1281,6 +1251,17 @@ HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPW
return S_OK; return S_OK;
} }
/***********************************************************************
* HlinkSimpleNavigateToMoniker (URLMON.@)
*/
HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker *pmkTarget,
LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk,
IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
{
FIXME("stub\n");
return E_NOTIMPL;
}
/*********************************************************************** /***********************************************************************
* HlinkSimpleNavigateToString (URLMON.@) * HlinkSimpleNavigateToString (URLMON.@)
*/ */

View file

@ -48,7 +48,7 @@
@ stub HlinkGoForward @ stub HlinkGoForward
@ stub HlinkNavigateMoniker @ stub HlinkNavigateMoniker
@ stdcall HlinkNavigateString(ptr wstr) @ stdcall HlinkNavigateString(ptr wstr)
@ stub HlinkSimpleNavigateToMoniker @ stdcall HlinkSimpleNavigateToMoniker(ptr wstr wstr ptr ptr ptr long long)
@ stdcall HlinkSimpleNavigateToString(wstr wstr wstr ptr ptr ptr long long) @ stdcall HlinkSimpleNavigateToString(wstr wstr wstr ptr ptr ptr long long)
@ stdcall IsAsyncMoniker(ptr) @ stdcall IsAsyncMoniker(ptr)
@ stdcall IsLoggingEnabledA(str) @ stdcall IsLoggingEnabledA(str)