diff --git a/reactos/dll/win32/urlmon/binding.c b/reactos/dll/win32/urlmon/binding.c index 210e8e2ed43..dcf0207278c 100644 --- a/reactos/dll/win32/urlmon/binding.c +++ b/reactos/dll/win32/urlmon/binding.c @@ -98,6 +98,7 @@ struct Binding { LPWSTR mime; UINT clipboard_format; LPWSTR url; + LPWSTR redirect_url; IID iid; BOOL report_mime; DWORD state; @@ -829,6 +830,7 @@ static ULONG WINAPI Binding_Release(IBinding *iface) This->section.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&This->section); heap_free(This->mime); + heap_free(This->redirect_url); heap_free(This->url); heap_free(This); @@ -967,6 +969,11 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink case BINDSTATUS_CONNECTING: on_progress(This, 0, 0, BINDSTATUS_CONNECTING, szStatusText); break; + case BINDSTATUS_REDIRECTING: + heap_free(This->redirect_url); + This->redirect_url = heap_strdupW(szStatusText); + on_progress(This, 0, 0, BINDSTATUS_REDIRECTING, szStatusText); + break; case BINDSTATUS_BEGINDOWNLOADDATA: fill_stgmed_buffer(This->stgmed_buf); break; @@ -1474,6 +1481,8 @@ static HRESULT start_binding(IMoniker *mon, Binding *binding_ctx, LPCWSTR url, I if(binding_ctx) { set_binding_sink(binding->protocol, PROTSINK(binding)); + if(binding_ctx->redirect_url) + IBindStatusCallback_OnProgress(binding->callback, 0, 0, BINDSTATUS_REDIRECTING, binding_ctx->redirect_url); report_data(binding, 0, 0, 0); }else { hres = IInternetProtocol_Start(binding->protocol, url, PROTSINK(binding), diff --git a/reactos/dll/win32/urlmon/bindprot.c b/reactos/dll/win32/urlmon/bindprot.c index e4f203d28f5..07d6fc2f525 100644 --- a/reactos/dll/win32/urlmon/bindprot.c +++ b/reactos/dll/win32/urlmon/bindprot.c @@ -205,7 +205,7 @@ static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc) This->task_queue_tail = task; }else { This->task_queue_tail = This->task_queue_head = task; - do_post = TRUE; + do_post = !This->continue_call; } LeaveCriticalSection(&This->section); @@ -960,6 +960,7 @@ static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR statu switch(status_code) { case BINDSTATUS_FINDINGRESOURCE: case BINDSTATUS_CONNECTING: + case BINDSTATUS_REDIRECTING: case BINDSTATUS_BEGINDOWNLOADDATA: case BINDSTATUS_SENDINGREQUEST: case BINDSTATUS_CACHEFILENAMEAVAILABLE: diff --git a/reactos/dll/win32/urlmon/download.c b/reactos/dll/win32/urlmon/download.c index d81dffaedc4..ebcb9c932c7 100644 --- a/reactos/dll/win32/urlmon/download.c +++ b/reactos/dll/win32/urlmon/download.c @@ -140,6 +140,7 @@ static HRESULT WINAPI DownloadBSC_OnProgress(IBindStatusCallback *iface, ULONG u debugstr_w(szStatusText)); switch(ulStatusCode) { + case BINDSTATUS_CONNECTING: case BINDSTATUS_BEGINDOWNLOADDATA: case BINDSTATUS_DOWNLOADINGDATA: case BINDSTATUS_ENDDOWNLOADDATA: @@ -153,8 +154,7 @@ static HRESULT WINAPI DownloadBSC_OnProgress(IBindStatusCallback *iface, ULONG u This->cache_file = heap_strdupW(szStatusText); break; - case BINDSTATUS_FINDINGRESOURCE: - case BINDSTATUS_CONNECTING: + case BINDSTATUS_FINDINGRESOURCE: /* FIXME */ break; default: diff --git a/reactos/dll/win32/urlmon/http.c b/reactos/dll/win32/urlmon/http.c index bb81ec820b6..fc0b8c4ecfe 100644 --- a/reactos/dll/win32/urlmon/http.c +++ b/reactos/dll/win32/urlmon/http.c @@ -17,11 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* - * TODO: - * - Handle redirects as native. - */ - #include "urlmon_main.h" #include "wininet.h" @@ -84,7 +79,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ URL_COMPONENTSW url_comp; BYTE security_id[512]; DWORD len = 0; - ULONG num = 0; + ULONG num; BOOL res, b; HRESULT hres; @@ -95,7 +90,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ memset(&url_comp, 0, sizeof(url_comp)); url_comp.dwStructSize = sizeof(url_comp); - url_comp.dwSchemeLength = url_comp.dwHostNameLength = url_comp.dwUrlPathLength = + url_comp.dwSchemeLength = url_comp.dwHostNameLength = url_comp.dwUrlPathLength = url_comp.dwExtraInfoLength = url_comp.dwUserNameLength = url_comp.dwPasswordLength = 1; if (!InternetCrackUrlW(url, 0, 0, &url_comp)) return MK_E_SYNTAX; @@ -124,7 +119,12 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ } accept_mimes[num] = 0; - path = heap_strndupW(url_comp.lpszUrlPath, url_comp.dwUrlPathLength); + path = heap_alloc((url_comp.dwUrlPathLength+url_comp.dwExtraInfoLength+1)*sizeof(WCHAR)); + if(url_comp.dwUrlPathLength) + memcpy(path, url_comp.lpszUrlPath, url_comp.dwUrlPathLength*sizeof(WCHAR)); + if(url_comp.dwExtraInfoLength) + memcpy(path+url_comp.dwUrlPathLength, url_comp.lpszExtraInfo, url_comp.dwExtraInfoLength*sizeof(WCHAR)); + path[url_comp.dwUrlPathLength+url_comp.dwExtraInfoLength] = 0; if(This->https) request_flags |= INTERNET_FLAG_SECURE; This->base.request = HttpOpenRequestW(This->base.connection, @@ -132,8 +132,8 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ ? wszBindVerb[This->base.bind_info.dwBindVerb] : This->base.bind_info.szCustomVerb, path, NULL, NULL, (LPCWSTR *)accept_mimes, request_flags, (DWORD_PTR)&This->base); heap_free(path); - while (numbase.request) { WARN("HttpOpenRequest failed: %d\n", GetLastError()); return INET_E_RESOURCE_NOT_FOUND; @@ -227,7 +227,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ static HRESULT HttpProtocol_start_downloading(Protocol *prot) { HttpProtocol *This = ASYNCPROTOCOL_THIS(prot); - LPWSTR content_type = 0, content_length = 0; + LPWSTR content_type, content_length, ranges; DWORD len = sizeof(DWORD); DWORD status_code; BOOL res; @@ -258,8 +258,11 @@ static HRESULT HttpProtocol_start_downloading(Protocol *prot) WARN("HttpQueryInfo failed: %d\n", GetLastError()); } - if(This->https) + ranges = query_http_info(This, HTTP_QUERY_ACCEPT_RANGES); + if(ranges) { IInternetProtocolSink_ReportProgress(This->base.protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL); + heap_free(ranges); + } content_type = query_http_info(This, HTTP_QUERY_CONTENT_TYPE); if(content_type) { diff --git a/reactos/dll/win32/urlmon/internet.c b/reactos/dll/win32/urlmon/internet.c index 8bde7b4790f..6a79e48b526 100644 --- a/reactos/dll/win32/urlmon/internet.c +++ b/reactos/dll/win32/urlmon/internet.c @@ -38,6 +38,9 @@ static HRESULT parse_schema(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, if(ptr) len = ptr-url; + if(rsize) + *rsize = len; + if(len >= size) return E_POINTER; @@ -45,9 +48,6 @@ static HRESULT parse_schema(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, memcpy(result, url, len*sizeof(WCHAR)); result[len] = 0; - if(rsize) - *rsize = len; - return S_OK; } @@ -170,6 +170,100 @@ static HRESULT parse_security_domain(LPCWSTR url, DWORD flags, LPWSTR result, return E_FAIL; } +static HRESULT parse_domain(LPCWSTR url, DWORD flags, LPWSTR result, + DWORD size, DWORD *rsize) +{ + IInternetProtocolInfo *protocol_info; + HRESULT hres; + + TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize); + + protocol_info = get_protocol_info(url); + + if(protocol_info) { + hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_DOMAIN, + flags, result, size, rsize, 0); + IInternetProtocolInfo_Release(protocol_info); + if(SUCCEEDED(hres)) + return hres; + } + + hres = UrlGetPartW(url, result, &size, URL_PART_HOSTNAME, flags); + if(rsize) + *rsize = size; + + if(hres == E_POINTER) + return S_FALSE; + + if(FAILED(hres)) + return E_FAIL; + return S_OK; +} + +static HRESULT parse_rootdocument(LPCWSTR url, DWORD flags, LPWSTR result, + DWORD size, DWORD *rsize) +{ + IInternetProtocolInfo *protocol_info; + PARSEDURLW url_info; + HRESULT hres; + + TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize); + + protocol_info = get_protocol_info(url); + + if(protocol_info) { + hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_ROOTDOCUMENT, + flags, result, size, rsize, 0); + IInternetProtocolInfo_Release(protocol_info); + if(SUCCEEDED(hres)) + return hres; + } + + url_info.cbSize = sizeof(url_info); + if(FAILED(ParseURLW(url, &url_info))) + return E_FAIL; + + switch(url_info.nScheme) { + case URL_SCHEME_FTP: + case URL_SCHEME_HTTP: + case URL_SCHEME_HTTPS: + if(url_info.cchSuffix<3 || *(url_info.pszSuffix)!='/' + || *(url_info.pszSuffix+1)!='/') + return E_FAIL; + + if(size < url_info.cchProtocol+3) { + size = 0; + hres = UrlGetPartW(url, result, &size, URL_PART_HOSTNAME, flags); + + if(rsize) + *rsize = size+url_info.cchProtocol+3; + + if(hres == E_POINTER) + return S_FALSE; + + return hres; + } + + size -= url_info.cchProtocol+3; + hres = UrlGetPartW(url, result+url_info.cchProtocol+3, + &size, URL_PART_HOSTNAME, flags); + + if(hres == E_POINTER) + return S_FALSE; + + if(FAILED(hres)) + return E_FAIL; + + if(rsize) + *rsize = size+url_info.cchProtocol+3; + + memcpy(result, url, (url_info.cchProtocol+3)*sizeof(WCHAR)); + return hres; + default: + return E_FAIL; + } +} + /************************************************************************** * CoInternetParseUrl (URLMON.@) */ @@ -192,6 +286,10 @@ HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD return parse_schema(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); case PARSE_SECURITY_DOMAIN: return parse_security_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); + case PARSE_DOMAIN: + return parse_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); + case PARSE_ROOTDOCUMENT: + return parse_rootdocument(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); default: FIXME("not supported action %d\n", ParseAction); } diff --git a/reactos/dll/win32/urlmon/protocol.c b/reactos/dll/win32/urlmon/protocol.c index 9b25cbf4307..3f3cbe505bc 100644 --- a/reactos/dll/win32/urlmon/protocol.c +++ b/reactos/dll/win32/urlmon/protocol.c @@ -151,6 +151,11 @@ static void WINAPI internet_status_callback(HINTERNET internet, DWORD_PTR contex report_progress(protocol, BINDSTATUS_SENDINGREQUEST, (LPWSTR)status_info); break; + case INTERNET_STATUS_REDIRECT: + TRACE("%p INTERNET_STATUS_REDIRECT\n", protocol); + report_progress(protocol, BINDSTATUS_REDIRECTING, (LPWSTR)status_info); + break; + case INTERNET_STATUS_REQUEST_COMPLETE: request_complete(protocol, status_info); break; diff --git a/reactos/dll/win32/urlmon/regsvr.c b/reactos/dll/win32/urlmon/regsvr.c index 9561a23feaf..9e278259e37 100644 --- a/reactos/dll/win32/urlmon/regsvr.c +++ b/reactos/dll/win32/urlmon/regsvr.c @@ -495,6 +495,12 @@ static struct regsvr_coclass const coclass_list[] = { "urlmon.dll", "Both" }, + { &CLSID_PSFactoryBuffer, + "URLMoniker ProxyStub Factory", + NULL, + "urlmon.dll", + "Apartment" + }, { NULL } /* list terminator */ }; @@ -573,12 +579,14 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n"); - hr = register_coclasses(coclass_list); - if (SUCCEEDED(hr)) + hr = URLMON_DllRegisterServer(); + if(SUCCEEDED(hr)) + hr = register_coclasses(coclass_list); + if(SUCCEEDED(hr)) hr = register_interfaces(interface_list); - if(FAILED(hr)) - return hr; - return register_inf(TRUE); + if(SUCCEEDED(hr)) + hr = register_inf(TRUE); + return hr; } /*********************************************************************** @@ -590,10 +598,12 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE("\n"); - hr = unregister_coclasses(coclass_list); - if (SUCCEEDED(hr)) + hr = URLMON_DllUnregisterServer(); + if(SUCCEEDED(hr)) + hr = unregister_coclasses(coclass_list); + if(SUCCEEDED(hr)) hr = unregister_interfaces(interface_list); - if(FAILED(hr)) - return hr; - return register_inf(FALSE); + if(SUCCEEDED(hr)) + hr = register_inf(FALSE); + return hr; } diff --git a/reactos/dll/win32/urlmon/sec_mgr.c b/reactos/dll/win32/urlmon/sec_mgr.c index 7a1255a49ad..81f2f507d0d 100644 --- a/reactos/dll/win32/urlmon/sec_mgr.c +++ b/reactos/dll/win32/urlmon/sec_mgr.c @@ -147,12 +147,18 @@ static HRESULT map_url_to_zone(LPCWSTR url, DWORD *zone, LPWSTR *ret_url) DWORD size=0; HRESULT hres; - secur_url = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR)); *zone = -1; - hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, secur_url, INTERNET_MAX_URL_LENGTH, &size, 0); - if(hres != S_OK) - strcpyW(secur_url, url); + hres = CoInternetGetSecurityUrl(url, &secur_url, PSU_SECURITY_URL_ONLY, 0); + if(hres != S_OK) { + size = strlenW(url)*sizeof(WCHAR); + + secur_url = heap_alloc(size); + if(!secur_url) + return E_OUTOFMEMORY; + + memcpy(secur_url, url, size); + } hres = CoInternetParseUrl(secur_url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(WCHAR), &size, 0); if(FAILED(hres) || !*schema) { @@ -1228,3 +1234,84 @@ HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider* pSP, IInternetZoneM TRACE("(%p %p %x)\n", pSP, ppZM, dwReserved); return ZoneMgrImpl_Construct(NULL, (void**)ppZM); } + +/******************************************************************** + * CoInternetGetSecurityUrl (URLMON.@) + */ +HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved) +{ + WCHAR buf1[INTERNET_MAX_URL_LENGTH], buf2[INTERNET_MAX_URL_LENGTH]; + LPWSTR url, domain; + DWORD len; + HRESULT hres; + + TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved); + + url = buf1; + domain = buf2; + strcpyW(url, pwzUrl); + + while(1) { + hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, domain, INTERNET_MAX_URL_LENGTH, &len, 0); + if(hres!=S_OK || !strcmpW(url, domain)) + break; + + if(url == buf1) { + url = buf2; + domain = buf1; + } else { + url = buf1; + domain = buf2; + } + } + + if(psuAction==PSU_SECURITY_URL_ONLY) { + len = lstrlenW(url)+1; + *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR)); + if(!*ppwzSecUrl) + return E_OUTOFMEMORY; + + memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR)); + return S_OK; + } + + hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain, + INTERNET_MAX_URL_LENGTH, &len, 0); + if(SUCCEEDED(hres)) { + len++; + *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR)); + if(!*ppwzSecUrl) + return E_OUTOFMEMORY; + + memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR)); + return S_OK; + } + + hres = CoInternetParseUrl(url, PARSE_ROOTDOCUMENT, 0, domain, 0, &len, 0); + if(hres == S_FALSE) { + hres = CoInternetParseUrl(url, PARSE_SCHEMA, 0, domain, + INTERNET_MAX_URL_LENGTH, &len, 0); + if(hres == S_OK) { + domain[len] = ':'; + hres = CoInternetParseUrl(url, PARSE_DOMAIN, 0, domain+len+1, + INTERNET_MAX_URL_LENGTH-len-1, &len, 0); + if(hres == S_OK) { + len = lstrlenW(domain)+1; + *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR)); + if(!*ppwzSecUrl) + return E_OUTOFMEMORY; + + memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR)); + return S_OK; + } + } + } + + len = lstrlenW(url)+1; + *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR)); + if(!*ppwzSecUrl) + return E_OUTOFMEMORY; + + memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR)); + return S_OK; +} diff --git a/reactos/dll/win32/urlmon/uri.c b/reactos/dll/win32/urlmon/uri.c new file mode 100644 index 00000000000..d4d6b47e5ab --- /dev/null +++ b/reactos/dll/win32/urlmon/uri.c @@ -0,0 +1,302 @@ +/* + * Copyright 2010 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "urlmon_main.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(urlmon); + +typedef struct { + const IUriVtbl *lpIUriVtbl; + LONG ref; +} Uri; + +#define URI(x) ((IUri*) &(x)->lpIUriVtbl) + +#define URI_THIS(iface) DEFINE_THIS(Uri, IUri, iface) + +static HRESULT WINAPI Uri_QueryInterface(IUri *iface, REFIID riid, void **ppv) +{ + Uri *This = URI_THIS(iface); + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = URI(This); + }else if(IsEqualGUID(&IID_IUri, riid)) { + TRACE("(%p)->(IID_IUri %p)\n", This, ppv); + *ppv = URI(This); + }else { + TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + *ppv = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI Uri_AddRef(IUri *iface) +{ + Uri *This = URI_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI Uri_Release(IUri *iface) +{ + Uri *This = URI_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) + heap_free(This); + + return ref; +} + +static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BSTR *pbstrProperty, DWORD dwFlags) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_HasProperty(IUri *iface, Uri_PROPERTY uriProp, BOOL *pfHasProperty) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetAbsoluteUri(IUri *iface, BSTR *pstrAbsoluteUri) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrAbsoluteUri); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetAuthority(IUri *iface, BSTR *pstrAuthority) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrAuthority); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetDisplayUri(IUri *iface, BSTR *pstrDisplayUri) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrDisplayUri); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetDomain(IUri *iface, BSTR *pstrDomain) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrDomain); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetExtension(IUri *iface, BSTR *pstrExtension) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrExtension); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetFragment(IUri *iface, BSTR *pstrFragment) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrFragment); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetHost(IUri *iface, BSTR *pstrHost) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrHost); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPassword(IUri *iface, BSTR *pstrPassword) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrPassword); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPath(IUri *iface, BSTR *pstrPath) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrPath); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPathAndQuery(IUri *iface, BSTR *pstrPathAndQuery) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrPathAndQuery); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetQuery(IUri *iface, BSTR *pstrQuery) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrQuery); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetRawUri(IUri *iface, BSTR *pstrRawUri) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrRawUri); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetSchemeName(IUri *iface, BSTR *pstrSchemeName) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrSchemeName); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetUserInfo(IUri *iface, BSTR *pstrUserInfo) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrUserInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetUserName(IUri *iface, BSTR *pstrUserName) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pstrUserName); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetHostType(IUri *iface, DWORD *pdwHostType) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwHostType); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetPort(IUri *iface, DWORD *pdwPort) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwPort); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetScheme(IUri *iface, DWORD *pdwScheme) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwScheme); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetZone(IUri *iface, DWORD *pdwZone) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwZone); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_GetProperties(IUri *iface, DWORD *pdwProperties) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwProperties); + return E_NOTIMPL; +} + +static HRESULT WINAPI Uri_IsEqual(IUri *iface, IUri *pUri, BOOL *pfEqual) +{ + Uri *This = URI_THIS(iface); + FIXME("(%p)->(%p %p)\n", This, pUri, pfEqual); + return E_NOTIMPL; +} + +#undef URI_THIS + +static const IUriVtbl UriVtbl = { + Uri_QueryInterface, + Uri_AddRef, + Uri_Release, + Uri_GetPropertyBSTR, + Uri_GetPropertyLength, + Uri_GetPropertyDWORD, + Uri_HasProperty, + Uri_GetAbsoluteUri, + Uri_GetAuthority, + Uri_GetDisplayUri, + Uri_GetDomain, + Uri_GetExtension, + Uri_GetFragment, + Uri_GetHost, + Uri_GetPassword, + Uri_GetPath, + Uri_GetPathAndQuery, + Uri_GetQuery, + Uri_GetRawUri, + Uri_GetSchemeName, + Uri_GetUserInfo, + Uri_GetUserName, + Uri_GetHostType, + Uri_GetPort, + Uri_GetScheme, + Uri_GetZone, + Uri_GetProperties, + Uri_IsEqual +}; + +/*********************************************************************** + * CreateUri (urlmon.@) + */ +HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI) +{ + Uri *ret; + + TRACE("(%s %x %x %p)\n", debugstr_w(pwzURI), dwFlags, (DWORD)dwReserved, ppURI); + + ret = heap_alloc(sizeof(Uri)); + if(!ret) + return E_OUTOFMEMORY; + + ret->lpIUriVtbl = &UriVtbl; + ret->ref = 1; + + *ppURI = URI(ret); + return S_OK; +} diff --git a/reactos/dll/win32/urlmon/urlmon.inf b/reactos/dll/win32/urlmon/urlmon.inf index 4d781c73bd0..c9debb43a80 100644 --- a/reactos/dll/win32/urlmon/urlmon.inf +++ b/reactos/dll/win32/urlmon/urlmon.inf @@ -43,7 +43,6 @@ HKCR,"PROTOCOLS\Filter\lzdhtml","CLSID",,"%CLSID_DeCompMimeFilter%" [ZoneMap.Reg] -HKCU,"Software\Microsoft\Windows\CurrentVersion\Internet Settings",,, HKCU,"%PATH_ZONEMAP%",,, HKLM,"%PATH_ZONEMAP%",,, HKCU,"%PATH_ZONEMAP%","ProxyByPass", 0x10001,0x1 diff --git a/reactos/dll/win32/urlmon/urlmon.rbuild b/reactos/dll/win32/urlmon/urlmon.rbuild index 48034c5b4bb..c8c75863db4 100644 --- a/reactos/dll/win32/urlmon/urlmon.rbuild +++ b/reactos/dll/win32/urlmon/urlmon.rbuild @@ -27,18 +27,29 @@ session.c umon.c umstream.c + uri.c urlmon_main.c + usrmarshal.c rsrc.rc wine uuid + rpcrt4 ole32 shlwapi wininet user32 advapi32 + pseh + urlmon_proxy ntdll - - urlmon_local.idl + + + URLMON_ + + + + {0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}} + urlmon_urlmon.idl diff --git a/reactos/dll/win32/urlmon/urlmon.spec b/reactos/dll/win32/urlmon/urlmon.spec index 2ed99886d21..dbb8fa974c6 100644 --- a/reactos/dll/win32/urlmon/urlmon.spec +++ b/reactos/dll/win32/urlmon/urlmon.spec @@ -15,7 +15,7 @@ @ stdcall CoInternetCreateSecurityManager(ptr ptr long) @ stdcall CoInternetCreateZoneManager(ptr ptr long) @ stub CoInternetGetProtocolFlags -@ stub CoInternetGetSecurityUrl +@ stdcall CoInternetGetSecurityUrl(ptr ptr long long) @ stdcall CoInternetGetSession(long ptr long) @ stdcall CoInternetParseUrl(wstr long long wstr long ptr long) @ stdcall CoInternetQueryInfo(ptr long long ptr long ptr long) @@ -26,6 +26,7 @@ @ stdcall CreateAsyncBindCtx(long ptr ptr ptr) @ stdcall CreateAsyncBindCtxEx(ptr long ptr ptr ptr long) @ stdcall CreateFormatEnumerator(long ptr ptr) +@ stdcall CreateUri(wstr long long ptr) @ stdcall CreateURLMoniker(ptr wstr ptr) @ stdcall CreateURLMonikerEx(ptr wstr ptr long) @ stdcall -private DllCanUnloadNow() diff --git a/reactos/dll/win32/urlmon/urlmon_local.idl b/reactos/dll/win32/urlmon/urlmon_local.idl deleted file mode 100644 index 1a1403ea73e..00000000000 --- a/reactos/dll/win32/urlmon/urlmon_local.idl +++ /dev/null @@ -1,2 +0,0 @@ - -#include "urlmon.idl" diff --git a/reactos/dll/win32/urlmon/urlmon_main.c b/reactos/dll/win32/urlmon/urlmon_main.c index a420308453d..272884eb2a6 100644 --- a/reactos/dll/win32/urlmon/urlmon_main.c +++ b/reactos/dll/win32/urlmon/urlmon_main.c @@ -348,6 +348,7 @@ static void init_session(BOOL init) HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) { unsigned int i; + HRESULT hr; TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); @@ -357,6 +358,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv); } + hr = URLMON_DllGetClassObject(rclsid, riid, ppv); + if(SUCCEEDED(hr)) + return hr; + FIXME("%s: no class found.\n", debugstr_guid(rclsid)); return CLASS_E_CLASSNOTAVAILABLE; } diff --git a/reactos/dll/win32/urlmon/urlmon_main.h b/reactos/dll/win32/urlmon/urlmon_main.h index 21b93430a60..8db786b7d80 100644 --- a/reactos/dll/win32/urlmon/urlmon_main.h +++ b/reactos/dll/win32/urlmon/urlmon_main.h @@ -48,6 +48,12 @@ extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); +extern HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN; +extern HRESULT WINAPI URLMON_DllRegisterServer(void) DECLSPEC_HIDDEN; +extern HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN; + +extern GUID const CLSID_PSFactoryBuffer DECLSPEC_HIDDEN; + /********************************************************************** * Dll lifetime tracking declaration for urlmon.dll */ diff --git a/reactos/dll/win32/urlmon/urlmon_urlmon.idl b/reactos/dll/win32/urlmon/urlmon_urlmon.idl new file mode 100644 index 00000000000..71a0719d7d9 --- /dev/null +++ b/reactos/dll/win32/urlmon/urlmon_urlmon.idl @@ -0,0 +1,19 @@ +/* + * Copyright 2009 Piotr Caban for Codeweavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "urlmon.idl" diff --git a/reactos/dll/win32/urlmon/usrmarshal.c b/reactos/dll/win32/urlmon/usrmarshal.c new file mode 100644 index 00000000000..b94556362be --- /dev/null +++ b/reactos/dll/win32/urlmon/usrmarshal.c @@ -0,0 +1,162 @@ +/* + * Copyright 2009 Piotr Caban for Codeweavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "urlmon_main.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(urlmon); + +HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This, + DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags, + DWORD *pdwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo* This, + DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf, DWORD *pdwFlags, + DWORD *pdwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(IWinInetInfo* This, + DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(IWinInetInfo* This, + DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(IBindHost* This, + IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, + REFIID riid, void **ppvObj) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(IBindHost* This, + IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, + REFIID riid, IUnknown **ppvObj) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(IBindHost* This, + IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, + REFIID riid, void **ppvObj) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(IBindHost* This, + IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, + REFIID riid, IUnknown **ppvObj) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy( + IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *pbindinfo, + DWORD *grfBINDF2, DWORD *pdwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub( + IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *pbindinfo, + RemSTGMEDIUM *pstgmed, DWORD *grfBINDF2, DWORD *pdwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy( + IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *pbindinfo) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub( + IBindStatusCallback* This, DWORD *grfBINDF, + RemBINDINFO *pbindinfo, RemSTGMEDIUM *pstgmed) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy( + IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize, + FORMATETC *pformatetc, STGMEDIUM *pstgmed) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub( + IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize, + RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This, + CLSID *pclsidProtocol, DWORD *pdwResult, + LPOLESTR *pszResult, DWORD *pdwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT __RPC_STUB IBinding_GetBindResult_Stub(IBinding* This, + CLSID *pclsidProtocol, DWORD *pdwResult, + LPOLESTR *pszResult, DWORD dwReserved) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy( + IWindowForBindingUI* This, REFGUID rguidReason, HWND *phwnd) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer* This, + IRpcChannelBuffer* pRpcChannelBuffer, PRPC_MESSAGE pRpcMessage, + DWORD* pdwStubPhase) +{ + FIXME("stub\n"); +} diff --git a/reactos/include/psdk/urlmon.idl b/reactos/include/psdk/urlmon.idl index 78afd1691c9..d16a3b5d7ec 100644 --- a/reactos/include/psdk/urlmon.idl +++ b/reactos/include/psdk/urlmon.idl @@ -1646,6 +1646,62 @@ interface IUri : IUnknown [out] BOOL *pfEqual); } +cpp_quote("HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);") +cpp_quote("HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);") +cpp_quote("HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);") + +cpp_quote("#define Uri_HAS_ABSOLUTE_URI (1 << Uri_PROPERTY_ABSOLUTE_URI)") +cpp_quote("#define Uri_HAS_AUTHORITY (1 << Uri_PROPERTY_AUTHORITY)") +cpp_quote("#define Uri_HAS_DISPLAY_URI (1 << Uri_PROPERTY_DISPLAY_URI)") +cpp_quote("#define Uri_HAS_DOMAIN (1 << Uri_PROPERTY_DOMAIN)") +cpp_quote("#define Uri_HAS_EXTENSION (1 << Uri_PROPERTY_EXTENSION)") +cpp_quote("#define Uri_HAS_FRAGMENT (1 << Uri_PROPERTY_FRAGMENT)") +cpp_quote("#define Uri_HAS_HOST (1 << Uri_PROPERTY_HOST)") +cpp_quote("#define Uri_HAS_PASSWORD (1 << Uri_PROPERTY_PASSWORD)") +cpp_quote("#define Uri_HAS_PATH (1 << Uri_PROPERTY_PATH)") +cpp_quote("#define Uri_HAS_QUERY (1 << Uri_PROPERTY_QUERY)") +cpp_quote("#define Uri_HAS_RAW_URI (1 << Uri_PROPERTY_RAW_URI)") +cpp_quote("#define Uri_HAS_SCHEME_NAME (1 << Uri_PROPERTY_SCHEME_NAME)") +cpp_quote("#define Uri_HAS_USER_NAME (1 << Uri_PROPERTY_USER_NAME)") +cpp_quote("#define Uri_HAS_PATH_AND_QUERY (1 << Uri_PROPERTY_PATH_AND_QUERY)") +cpp_quote("#define Uri_HAS_USER_INFO (1 << Uri_PROPERTY_USER_INFO)") +cpp_quote("#define Uri_HAS_HOST_TYPE (1 << Uri_PROPERTY_HOST_TYPE)") +cpp_quote("#define Uri_HAS_PORT (1 << Uri_PROPERTY_PORT)") +cpp_quote("#define Uri_HAS_SCHEME (1 << Uri_PROPERTY_SCHEME)") +cpp_quote("#define Uri_HAS_ZONE (1 << Uri_PROPERTY_ZONE)") + +cpp_quote("#define Uri_CREATE_ALLOW_RELATIVE 0x0001") +cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME 0x0002") +cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME 0x0004") +cpp_quote("#define Uri_CREATE_NOFRAG 0x0008") +cpp_quote("#define Uri_CREATE_NO_CANONICALIZE 0x0010") +cpp_quote("#define Uri_CREATE_CANONICALIZE 0x0100") +cpp_quote("#define Uri_CREATE_FILE_USE_DOS_PATH 0x0020") +cpp_quote("#define Uri_CREATE_DECODE_EXTRA_INFO 0x0040") +cpp_quote("#define Uri_CREATE_NO_DECODE_EXTRA_INFO 0x0080") +cpp_quote("#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES 0x0200") +cpp_quote("#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES 0x0400") +cpp_quote("#define Uri_CREATE_PRE_PROCESS_HTML_URI 0x0800") +cpp_quote("#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI 0x1000") +cpp_quote("#define Uri_CREATE_IE_SETTINGS 0x2000") +cpp_quote("#define Uri_CREATE_NO_IE_SETTINGS 0x4000") +cpp_quote("#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS 0x8000") + +cpp_quote("#define Uri_DISPLAY_NO_FRAGMENT 0x00000001") +cpp_quote("#define Uri_PUNYCODE_IDN_HOST 0x00000002") +cpp_quote("#define Uri_DISPLAY_IDN_HOST 0x00000004") + +cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8 0x00000001") +cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP 0x00000002") +cpp_quote("#define Uri_ENCODING_HOST_IS_IDN 0x00000004") +cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8 0x00000008") +cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP 0x00000010") +cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8 0x00000020") +cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP 0x00000040") +cpp_quote("#define Uri_ENCODING_RFC (Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8)") + +cpp_quote("#define UriBuilder_USE_ORIGINAL_FLAGS 0x00000001") + /***************************************************************************** * IUriContainer interface */ @@ -1740,6 +1796,8 @@ cpp_quote("#define INET_E_DEFAULT_ACTION INET_E_USE_DEFAULT_PROTOCOLH cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);") cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);") +cpp_quote("HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);") +cpp_quote("HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);") cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);") cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);") cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);") @@ -1758,6 +1816,7 @@ cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IIntern cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);") +cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);") cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);") cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);") cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")