From fbed23740ea98a63e3893d1cfea52f8a52cc6af0 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sun, 1 Feb 2009 13:46:44 +0000 Subject: [PATCH] sync urlmon to wine 1.1.14 svn path=/trunk/; revision=39266 --- reactos/dll/win32/urlmon/binding.c | 2 ++ reactos/dll/win32/urlmon/bindprot.c | 1 + reactos/dll/win32/urlmon/http.c | 54 ++++++++++++++++------------ reactos/dll/win32/urlmon/umon.c | 43 +++++++--------------- reactos/dll/win32/urlmon/urlmon.spec | 2 +- 5 files changed, 48 insertions(+), 54 deletions(-) diff --git a/reactos/dll/win32/urlmon/binding.c b/reactos/dll/win32/urlmon/binding.c index e0f0085da31..41fa677bc28 100644 --- a/reactos/dll/win32/urlmon/binding.c +++ b/reactos/dll/win32/urlmon/binding.c @@ -1183,6 +1183,8 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink case BINDSTATUS_DIRECTBIND: This->report_mime = FALSE; break; + case BINDSTATUS_ACCEPTRANGES: + break; default: FIXME("Unhandled status code %d\n", ulStatusCode); return E_NOTIMPL; diff --git a/reactos/dll/win32/urlmon/bindprot.c b/reactos/dll/win32/urlmon/bindprot.c index 81dfabf214a..07f2722bf7c 100644 --- a/reactos/dll/win32/urlmon/bindprot.c +++ b/reactos/dll/win32/urlmon/bindprot.c @@ -486,6 +486,7 @@ static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSin case BINDSTATUS_SENDINGREQUEST: case BINDSTATUS_CACHEFILENAMEAVAILABLE: case BINDSTATUS_DIRECTBIND: + case BINDSTATUS_ACCEPTRANGES: case BINDSTATUS_MIMETYPEAVAILABLE: if(!This->protocol_sink) return S_OK; diff --git a/reactos/dll/win32/urlmon/http.c b/reactos/dll/win32/urlmon/http.c index 20e90edf93b..2e73653bb00 100644 --- a/reactos/dll/win32/urlmon/http.c +++ b/reactos/dll/win32/urlmon/http.c @@ -63,6 +63,7 @@ typedef struct { const IInternetProtocolVtbl *lpInternetProtocolVtbl; const IInternetPriorityVtbl *lpInternetPriorityVtbl; + BOOL https; DWORD flags, grfBINDF; BINDINFO bind_info; IInternetProtocolSink *protocol_sink; @@ -309,7 +310,8 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl LPOLESTR user_agent = NULL, accept_mimes[257]; 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] = {{'G','E','T',0}, {'P','O','S','T',0}, @@ -330,8 +332,9 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl goto done; } - if (strlenW(szUrl) < sizeof(wszHttp)/sizeof(WCHAR) - || memcmp(szUrl, wszHttp, sizeof(wszHttp))) + if(This->https + ? strncmpW(szUrl, httpsW, sizeof(httpsW)/sizeof(WCHAR)) + : strncmpW(szUrl, httpW, sizeof(httpW)/sizeof(WCHAR))) { hres = MK_E_SYNTAX; goto done; @@ -351,7 +354,7 @@ static HRESULT WINAPI HttpProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl user = strndupW(url.lpszUserName, url.dwUserNameLength); pass = strndupW(url.lpszPassword, url.dwPasswordLength); 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)) 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); 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) { 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; if (This->grfBINDF & BINDF_NEEDFILE) 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 ? wszBindVerb[This->bind_info.dwBindVerb] : 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; if ((!HttpQueryInfoW(This->request, HTTP_QUERY_CONTENT_TYPE, content_type, &len, NULL) && GetLastError() != ERROR_INSUFFICIENT_BUFFER) || @@ -923,36 +933,36 @@ static const IInternetProtocolVtbl HttpProtocolVtbl = { HttpProtocol_UnlockRequest }; -HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) +HRESULT create_http_protocol(BOOL https, void **ppobj) { HttpProtocol *ret; - TRACE("(%p %p)\n", pUnkOuter, ppobj); - - URLMON_LockModule(); - - ret = heap_alloc(sizeof(HttpProtocol)); + ret = heap_alloc_zero(sizeof(HttpProtocol)); + if(!ret) + return E_OUTOFMEMORY; ret->lpInternetProtocolVtbl = &HttpProtocolVtbl; ret->lpInternetPriorityVtbl = &HttpPriorityVtbl; - ret->flags = ret->grfBINDF = 0; - memset(&ret->bind_info, 0, sizeof(ret->bind_info)); - 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->https = https; ret->ref = 1; *ppobj = PROTOCOL(ret); + URLMON_LockModule(); 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) { - FIXME("(%p %p)\n", pUnkOuter, ppobj); - return E_NOINTERFACE; + TRACE("(%p %p)\n", pUnkOuter, ppobj); + + return create_http_protocol(TRUE, ppobj); } diff --git a/reactos/dll/win32/urlmon/umon.c b/reactos/dll/win32/urlmon/umon.c index 01266ddfbd1..521cfc2d14f 100644 --- a/reactos/dll/win32/urlmon/umon.c +++ b/reactos/dll/win32/urlmon/umon.c @@ -532,7 +532,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc, if(SUCCEEDED(hres)) { URL_COMPONENTSW url; WCHAR *host, *path, *user, *pass; - DWORD lensz = sizeof(bind->expected_size); DWORD dwService = 0; BOOL bSuccess; @@ -597,12 +596,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc, url.nPort = INTERNET_DEFAULT_GOPHER_PORT; dwService = INTERNET_SERVICE_GOPHER; 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, @@ -648,28 +641,6 @@ static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc, else hres = HRESULT_FROM_WIN32(GetLastError()); 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) { @@ -734,8 +705,7 @@ static HRESULT WINAPI URLMonikerImpl_BindToStorage(IMoniker* iface, } 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)) return URLMonikerImpl_BindToStorage_hack(This->URLName, pbc, ppvObject); @@ -1281,6 +1251,17 @@ HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPW 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.@) */ diff --git a/reactos/dll/win32/urlmon/urlmon.spec b/reactos/dll/win32/urlmon/urlmon.spec index 2001f0b3bc1..2ed99886d21 100644 --- a/reactos/dll/win32/urlmon/urlmon.spec +++ b/reactos/dll/win32/urlmon/urlmon.spec @@ -48,7 +48,7 @@ @ stub HlinkGoForward @ stub HlinkNavigateMoniker @ 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 IsAsyncMoniker(ptr) @ stdcall IsLoggingEnabledA(str)