Piotr Caban : urlmon: Added CoInternetGetSecurityUrl implementation.

Alexandre Julliard julliard at winehq.org
Wed Dec 16 09:41:38 CST 2009


Module: wine
Branch: master
Commit: 73c3160674ef454711613486b79c831251e05e18
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=73c3160674ef454711613486b79c831251e05e18

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Dec 15 23:48:23 2009 +0100

urlmon: Added CoInternetGetSecurityUrl implementation.

---

 dlls/urlmon/sec_mgr.c |   62 +++++++++++++++++++++++++++++++++++++++++++++++-
 include/urlmon.idl    |    1 +
 2 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/dlls/urlmon/sec_mgr.c b/dlls/urlmon/sec_mgr.c
index 968a987..c242274 100644
--- a/dlls/urlmon/sec_mgr.c
+++ b/dlls/urlmon/sec_mgr.c
@@ -1234,6 +1234,64 @@ HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider* pSP, IInternetZoneM
  */
 HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved)
 {
-    FIXME("(%p,%p,%u,%u): stub\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
-    return E_NOTIMPL;
+    WCHAR url[INTERNET_MAX_URL_LENGTH], domain[INTERNET_MAX_URL_LENGTH];
+    DWORD len;
+    HRESULT hres;
+
+    TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
+
+    hres = CoInternetParseUrl(pwzUrl, PARSE_SECURITY_URL, 0, url, INTERNET_MAX_URL_LENGTH, &len, 0);
+    if(hres==S_OK) {
+        if(psuAction == PSU_DEFAULT)
+            hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain,
+                    INTERNET_MAX_URL_LENGTH, &len, 0);
+
+        if(psuAction==PSU_SECURITY_URL_ONLY || hres!=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;
+        }
+
+        len++;
+        *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+        if(!*ppwzSecUrl)
+            return E_OUTOFMEMORY;
+
+        memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
+        return S_OK;
+    }
+
+    if(psuAction == PSU_DEFAULT) {
+        hres = CoInternetParseUrl(pwzUrl, PARSE_ROOTDOCUMENT, 0, url, 0, &len, 0);
+        if(hres == S_FALSE) {
+            hres = CoInternetParseUrl(pwzUrl, PARSE_SCHEMA, 0, domain,
+                    INTERNET_MAX_URL_LENGTH, &len, 0);
+            if(hres == S_OK) {
+                domain[len] = ':';
+                hres = CoInternetParseUrl(pwzUrl, 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(pwzUrl)+1;
+    *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+    if(!*ppwzSecUrl)
+        return E_OUTOFMEMORY;
+
+    memcpy(*ppwzSecUrl, pwzUrl, len*sizeof(WCHAR));
+    return S_OK;
 }
diff --git a/include/urlmon.idl b/include/urlmon.idl
index 78afd16..828cbd2 100644
--- a/include/urlmon.idl
+++ b/include/urlmon.idl
@@ -1758,6 +1758,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);")




More information about the wine-cvs mailing list