[PATCH 2/5] httpapi: Implement HttpAddUrlToUrlGroup() and HttpRemoveUrlFromUrlGroup().

Zebediah Figura z.figura12 at gmail.com
Thu Aug 29 19:58:05 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/httpapi/httpapi.spec   |  2 +
 dlls/httpapi/httpapi_main.c | 87 +++++++++++++++++++++++++++++++++----
 include/http.h              |  2 +
 3 files changed, 82 insertions(+), 9 deletions(-)

diff --git a/dlls/httpapi/httpapi.spec b/dlls/httpapi/httpapi.spec
index b3f3148acbc..ae3406f44ee 100644
--- a/dlls/httpapi/httpapi.spec
+++ b/dlls/httpapi/httpapi.spec
@@ -1,6 +1,7 @@
 @ stub HttpAddFragmentToCache
 @ stdcall HttpAddUrl(ptr wstr ptr)
 @ stub HttpAddUrlToConfigGroup
+@ stdcall HttpAddUrlToUrlGroup(int64 wstr int64 long)
 @ stub HttpCancelHttpRequest
 @ stub HttpCreateAppPool
 @ stub HttpCreateConfigGroup
@@ -40,6 +41,7 @@
 @ stub HttpRemoveAllUrlsFromConfigGroup
 @ stdcall HttpRemoveUrl(ptr wstr)
 @ stub HttpRemoveUrlFromConfigGroup
+@ stdcall HttpRemoveUrlFromUrlGroup(int64 wstr long)
 @ stub HttpSendHttpRequest
 @ stdcall HttpSendHttpResponse(ptr int64 long ptr ptr ptr ptr long ptr ptr)
 @ stub HttpSendRequestEntityBody
diff --git a/dlls/httpapi/httpapi_main.c b/dlls/httpapi/httpapi_main.c
index 29a8e70301f..79497087d31 100644
--- a/dlls/httpapi/httpapi_main.c
+++ b/dlls/httpapi/httpapi_main.c
@@ -27,6 +27,14 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(httpapi);
 
+static WCHAR *heap_strdupW(const WCHAR *str)
+{
+    int len = wcslen(str) + 1;
+    WCHAR *ret = heap_alloc(len * sizeof(WCHAR));
+    wcscpy(ret, str);
+    return ret;
+}
+
 BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID lpv )
 {
     switch(reason)
@@ -247,21 +255,13 @@ ULONG WINAPI HttpAddUrl(HANDLE queue, const WCHAR *url, void *reserved)
     return add_url(queue, url, 0);
 }
 
-/***********************************************************************
- *        HttpRemoveUrl     (HTTPAPI.@)
- */
-ULONG WINAPI HttpRemoveUrl(HANDLE queue, const WCHAR *urlW)
+static ULONG remove_url(HANDLE queue, const WCHAR *urlW)
 {
     ULONG ret = ERROR_SUCCESS;
     OVERLAPPED ovl = {};
     char *url;
     int len;
 
-    TRACE("queue %p, url %s.\n", queue, debugstr_w(urlW));
-
-    if (!queue)
-        return ERROR_INVALID_PARAMETER;
-
     len = WideCharToMultiByte(CP_ACP, 0, urlW, -1, NULL, 0, NULL, NULL);
     if (!(url = heap_alloc(len)))
         return ERROR_OUTOFMEMORY;
@@ -276,6 +276,19 @@ ULONG WINAPI HttpRemoveUrl(HANDLE queue, const WCHAR *urlW)
     return ret;
 }
 
+/***********************************************************************
+ *        HttpRemoveUrl     (HTTPAPI.@)
+ */
+ULONG WINAPI HttpRemoveUrl(HANDLE queue, const WCHAR *url)
+{
+    TRACE("queue %p, url %s.\n", queue, debugstr_w(url));
+
+    if (!queue)
+        return ERROR_INVALID_PARAMETER;
+
+    return remove_url(queue, url);
+}
+
 /***********************************************************************
  *        HttpReceiveHttpRequest     (HTTPAPI.@)
  */
@@ -475,6 +488,8 @@ struct url_group
 {
     struct list entry, session_entry;
     HANDLE queue;
+    WCHAR *url;
+    HTTP_URL_CONTEXT context;
 };
 
 static struct list url_groups = LIST_INIT(url_groups);
@@ -621,5 +636,59 @@ ULONG WINAPI HttpSetUrlGroupProperty(HTTP_URL_GROUP_ID id, HTTP_SERVER_PROPERTY
 
     group->queue = info->RequestQueueHandle;
 
+    if (group->url)
+        add_url(group->queue, group->url, group->context);
+
+    return ERROR_SUCCESS;
+}
+
+/***********************************************************************
+ *        HttpAddUrlToUrlGroup     (HTTPAPI.@)
+ */
+ULONG WINAPI HttpAddUrlToUrlGroup(HTTP_URL_GROUP_ID id, const WCHAR *url,
+        HTTP_URL_CONTEXT context, ULONG reserved)
+{
+    struct url_group *group = get_url_group(id);
+
+    TRACE("id %s, url %s, context %s, reserved %#x.\n", wine_dbgstr_longlong(id),
+            debugstr_w(url), wine_dbgstr_longlong(context), reserved);
+
+    if (group->url)
+    {
+        FIXME("Multiple URLs are not handled!\n");
+        return ERROR_CALL_NOT_IMPLEMENTED;
+    }
+
+    if (!(group->url = heap_strdupW(url)))
+        return ERROR_OUTOFMEMORY;
+    group->context = context;
+
+    if (group->queue)
+        return add_url(group->queue, url, context);
+
+    return ERROR_SUCCESS;
+}
+
+/***********************************************************************
+ *        HttpRemoveUrlFromUrlGroup     (HTTPAPI.@)
+ */
+ULONG WINAPI HttpRemoveUrlFromUrlGroup(HTTP_URL_GROUP_ID id, const WCHAR *url, ULONG flags)
+{
+    struct url_group *group = get_url_group(id);
+
+    TRACE("id %s, url %s, flags %#x.\n", wine_dbgstr_longlong(id), debugstr_w(url), flags);
+
+    if (!group->url)
+        return ERROR_FILE_NOT_FOUND;
+
+    if (flags)
+        FIXME("Ignoring flags %#x.\n", flags);
+
+    heap_free(group->url);
+    group->url = NULL;
+
+    if (group->queue)
+        return remove_url(group->queue, url);
+
     return ERROR_SUCCESS;
 }
diff --git a/include/http.h b/include/http.h
index 60494a130f9..c4bb107dd18 100644
--- a/include/http.h
+++ b/include/http.h
@@ -425,6 +425,7 @@ typedef struct _HTTP_BINDING_INFO
 } HTTP_BINDING_INFO, *PHTTP_BINDING_INFO;
 
 ULONG WINAPI HttpAddUrl(HANDLE,PCWSTR,PVOID);
+ULONG WINAPI HttpAddUrlToUrlGroup(HTTP_URL_GROUP_ID id, const WCHAR *url, HTTP_URL_CONTEXT context, ULONG reserved);
 ULONG WINAPI HttpCloseServerSession(HTTP_SERVER_SESSION_ID id);
 ULONG WINAPI HttpCloseUrlGroup(HTTP_URL_GROUP_ID id);
 ULONG WINAPI HttpCreateHttpHandle(PHANDLE,ULONG);
@@ -436,6 +437,7 @@ ULONG WINAPI HttpTerminate(ULONG flags, void *reserved);
 ULONG WINAPI HttpQueryServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,PVOID,ULONG,PULONG,LPOVERLAPPED);
 ULONG WINAPI HttpReceiveHttpRequest(HANDLE queue, HTTP_REQUEST_ID id, ULONG flags, HTTP_REQUEST *request, ULONG size, ULONG *ret_size, OVERLAPPED *ovl);
 ULONG WINAPI HttpRemoveUrl(HANDLE queue, const WCHAR *url);
+ULONG WINAPI HttpRemoveUrlFromUrlGroup(HTTP_URL_GROUP_ID id, const WCHAR *url, ULONG flags);
 ULONG WINAPI HttpSendHttpResponse(HANDLE queue, HTTP_REQUEST_ID id, ULONG flags, HTTP_RESPONSE *response, HTTP_CACHE_POLICY *cache_policy, ULONG *ret_size, void *reserved1, ULONG reserved2, OVERLAPPED *ovl, HTTP_LOG_DATA *log_data);
 ULONG WINAPI HttpSetServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);
 ULONG WINAPI HttpSetUrlGroupProperty(HTTP_URL_GROUP_ID id, HTTP_SERVER_PROPERTY property, void *value, ULONG length);
-- 
2.22.0




More information about the wine-devel mailing list