/************************************************************************** * CoInternetParseUrl (URLMON.@) */ HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwFlags, LPWSTR pszResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved) { if(dwReserved) WARN("dwReserved = %d\n", dwReserved); switch(ParseAction) { case PARSE_CANONICALIZE: return parse_canonicalize_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); case PARSE_SECURITY_URL: return parse_security_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); case PARSE_ENCODE: return parse_encode(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); case PARSE_PATH_FROM_URL: return parse_path_from_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult); case PARSE_SCHEMA: 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); } return E_NOTIMPL; }
/******************************************************************** * CoInternetGetSecurityUrlEx (URLMON.@) */ HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri *pUri, IUri **ppSecUri, PSUACTION psuAction, DWORD_PTR dwReserved) { URL_SCHEME scheme_type; BSTR secure_uri; WCHAR *ret_url; HRESULT hres; TRACE("(%p,%p,%u,%u)\n", pUri, ppSecUri, psuAction, (DWORD)dwReserved); if(!pUri || !ppSecUri) return E_INVALIDARG; hres = IUri_GetDisplayUri(pUri, &secure_uri); if(FAILED(hres)) return hres; hres = parse_security_url(secure_uri, psuAction, &ret_url); SysFreeString(secure_uri); if(FAILED(hres)) return hres; hres = CreateUri(ret_url, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri); if(FAILED(hres)) { CoTaskMemFree(ret_url); return hres; } /* File URIs have to hierarchical. */ hres = IUri_GetScheme(pUri, (DWORD*)&scheme_type); if(SUCCEEDED(hres) && scheme_type == URL_SCHEME_FILE) { const WCHAR *tmp = ret_url; /* Check and see if a "//" is after the scheme name. */ tmp += sizeof(fileW)/sizeof(WCHAR); if(*tmp != '/' || *(tmp+1) != '/') hres = E_INVALIDARG; } if(SUCCEEDED(hres)) hres = CreateUri(ret_url, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri); CoTaskMemFree(ret_url); return hres; }
/******************************************************************** * CoInternetGetSecurityUrl (URLMON.@) */ HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved) { WCHAR *secure_url; HRESULT hres; TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved); hres = parse_security_url(pwzUrl, psuAction, &secure_url); if(FAILED(hres)) return hres; if(psuAction != PSU_SECURITY_URL_ONLY) { PARSEDURLW parsed_url = { sizeof(parsed_url) }; DWORD size; /* FIXME: Use helpers from uri.c */ if(SUCCEEDED(ParseURLW(secure_url, &parsed_url))) { WCHAR *new_url; switch(parsed_url.nScheme) { case URL_SCHEME_FTP: case URL_SCHEME_HTTP: case URL_SCHEME_HTTPS: size = strlenW(secure_url)+1; new_url = CoTaskMemAlloc(size * sizeof(WCHAR)); if(new_url) hres = UrlGetPartW(secure_url, new_url, &size, URL_PART_HOSTNAME, URL_PARTFLAG_KEEPSCHEME); else hres = E_OUTOFMEMORY; CoTaskMemFree(secure_url); if(hres != S_OK) { WARN("UrlGetPart failed: %08x\n", hres); CoTaskMemFree(new_url); return FAILED(hres) ? hres : E_FAIL; } secure_url = new_url; } } } *ppwzSecUrl = secure_url; return S_OK; }