[6/9] winhttp: Add an initial implementation of WinHttpQueryOption and WinHttpSetOption.

Hans Leidekker hans at codeweavers.com
Wed Sep 3 05:31:24 CDT 2008


diff --git a/dlls/winhttp/main.c b/dlls/winhttp/main.c
index 5ea3994..4a4aea8 100644
--- a/dlls/winhttp/main.c
+++ b/dlls/winhttp/main.c
@@ -85,28 +85,6 @@ HRESULT WINAPI DllUnregisterServer(void)
     return S_OK;
 }
 
-/***********************************************************************
- *          WinHttpQueryOption (winhttp.@)
- */
-BOOL WINAPI WinHttpQueryOption (HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength)
-{
-    FIXME("(%d): stub\n", dwOption);
-
-    SetLastError(ERROR_NOT_SUPPORTED);
-    return FALSE;
-}
-
-/***********************************************************************
- *          WinHttpSetOption (winhttp.@)
- */
-BOOL WINAPI WinHttpSetOption (HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength)
-{
-    FIXME("stub\n");
-
-    SetLastError(ERROR_NOT_SUPPORTED);
-    return FALSE;
-}
-
 #define SCHEME_HTTP  3
 #define SCHEME_HTTPS 4
 
diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c
index 885a4a4..d044d90 100644
--- a/dlls/winhttp/session.c
+++ b/dlls/winhttp/session.c
@@ -303,6 +303,91 @@ BOOL WINAPI WinHttpCloseHandle( HINTERNET handle )
     return TRUE;
 }
 
+static BOOL query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPDWORD buflen )
+{
+    BOOL ret = FALSE;
+
+    switch (option)
+    {
+    case WINHTTP_OPTION_CONTEXT_VALUE:
+    {
+        *(DWORD_PTR *)buffer = hdr->context;
+        *buflen = sizeof(DWORD_PTR);
+        return TRUE;
+    }
+    default:
+    {
+        if (hdr->vtbl->query_option) ret = hdr->vtbl->query_option( hdr, option, buffer, buflen );
+        else FIXME("unimplemented option %u\n", option);
+    }
+    }
+    return ret;
+}
+
+/***********************************************************************
+ *          WinHttpQueryOption (winhttp.@)
+ */
+BOOL WINAPI WinHttpQueryOption( HINTERNET handle, DWORD option, LPVOID buffer, LPDWORD buflen )
+{
+    BOOL ret = FALSE;
+    object_header_t *hdr;
+
+    TRACE("%p, %u, %p, %p\n", handle, option, buffer, buflen);
+
+    if (!(hdr = grab_object( handle )))
+    {
+        set_last_error( ERROR_INVALID_HANDLE );
+        return FALSE;
+    }
+
+    ret = query_option( hdr, option, buffer, buflen );
+
+    release_object( hdr );
+    return ret;
+}
+
+static BOOL set_option( object_header_t *hdr, DWORD option, LPVOID buffer, DWORD buflen )
+{
+    BOOL ret = FALSE;
+
+    switch (option)
+    {
+    case WINHTTP_OPTION_CONTEXT_VALUE:
+    {
+        hdr->context = *(DWORD_PTR *)buffer;
+        return TRUE;
+    }
+    default:
+    {
+        if (hdr->vtbl->set_option) ret = hdr->vtbl->set_option( hdr, option, buffer, buflen );
+        else FIXME("unimplemented option %u\n", option);
+    }
+    }
+    return ret;
+}
+
+/***********************************************************************
+ *          WinHttpSetOption (winhttp.@)
+ */
+BOOL WINAPI WinHttpSetOption( HINTERNET handle, DWORD option, LPVOID buffer, DWORD buflen )
+{
+    BOOL ret = FALSE;
+    object_header_t *hdr;
+
+    TRACE("%p, %u, %p, %u\n", handle, option, buffer, buflen);
+
+    if (!(hdr = grab_object( handle )))
+    {
+        set_last_error( ERROR_INVALID_HANDLE );
+        return FALSE;
+    }
+
+    ret = set_option( hdr, option, buffer, buflen );
+
+    release_object( hdr );
+    return ret;
+}
+
 /***********************************************************************
  *          WinHttpDetectAutoProxyConfigUrl (winhttp.@)
  */
diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h
index 6bd6949..04dd7dc 100644
--- a/dlls/winhttp/winhttp_private.h
+++ b/dlls/winhttp/winhttp_private.h
@@ -41,7 +41,7 @@ typedef struct _object_header_t object_header_t;
 typedef struct
 {
     void (*destroy)( object_header_t * );
-    BOOL (*query_option)( object_header_t *, DWORD, void *, DWORD *, BOOL );
+    BOOL (*query_option)( object_header_t *, DWORD, void *, DWORD * );
     BOOL (*set_option)( object_header_t *, DWORD, void *, DWORD );
 } object_vtbl_t;
 



More information about the wine-patches mailing list