Jacek Caban : urlmon: Added UrlMkSetSessionOption(URLMON_OPTION_USERAGENT) implementation.

Alexandre Julliard julliard at winehq.org
Mon Jun 29 09:17:38 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Jun 27 00:37:11 2009 +0200

urlmon: Added UrlMkSetSessionOption(URLMON_OPTION_USERAGENT) implementation.

---

 dlls/urlmon/session.c     |   44 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/urlmon/urlmon_main.c |   11 -----------
 2 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 60402ad..3cee893 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -587,6 +587,50 @@ HRESULT WINAPI UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBuf
     return E_INVALIDARG;
 }
 
+/**************************************************************************
+ *                 UrlMkSetSessionOption (URLMON.@)
+ */
+HRESULT WINAPI UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength,
+        DWORD Reserved)
+{
+    TRACE("(%x %p %x)\n", dwOption, pBuffer, dwBufferLength);
+
+    switch(dwOption) {
+    case URLMON_OPTION_USERAGENT: {
+        LPWSTR new_user_agent;
+        char *buf = pBuffer;
+        DWORD len, size;
+
+        if(!pBuffer || !dwBufferLength)
+            return E_INVALIDARG;
+
+        for(len=0; len<dwBufferLength && buf[len]; len++);
+
+        TRACE("Setting user agent %s\n", debugstr_an(buf, len));
+
+        size = MultiByteToWideChar(CP_ACP, 0, buf, len, NULL, 0);
+        new_user_agent = heap_alloc((size+1)*sizeof(WCHAR));
+        if(!new_user_agent)
+            return E_OUTOFMEMORY;
+        MultiByteToWideChar(CP_ACP, 0, buf, len, new_user_agent, size);
+        new_user_agent[size] = 0;
+
+        EnterCriticalSection(&session_cs);
+
+        heap_free(user_agent);
+        user_agent = new_user_agent;
+
+        LeaveCriticalSection(&session_cs);
+        break;
+    }
+    default:
+        FIXME("Unknown option %x\n", dwOption);
+        return E_INVALIDARG;
+    }
+
+    return S_OK;
+}
+
 void free_session(void)
 {
     heap_free(user_agent);
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index 62fe4ec..0d5bc2a 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -362,17 +362,6 @@ HRESULT WINAPI DllRegisterServerEx(void)
     return E_FAIL;
 }
 
-/**************************************************************************
- *                 UrlMkSetSessionOption (URLMON.@)
- */
-HRESULT WINAPI UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength,
- 					DWORD Reserved)
-{
-    FIXME("(%#x, %p, %#x): stub\n", dwOption, pBuffer, dwBufferLength);
-
-    return S_OK;
-}
-
 static const CHAR Agent[] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)";
 
 /**************************************************************************




More information about the wine-cvs mailing list