Owen Rudge : wsdapi: Add stub implementation of IWSDiscoveryPublisher_PublishEx.
Alexandre Julliard
julliard at winehq.org
Tue Mar 20 17:51:34 CDT 2018
Module: wine
Branch: master
Commit: 81e4dbcdac81c437f584520a997157f8c24eafce
URL: https://source.winehq.org/git/wine.git/?a=commit;h=81e4dbcdac81c437f584520a997157f8c24eafce
Author: Owen Rudge <orudge at codeweavers.com>
Date: Mon Mar 19 21:46:08 2018 +0000
wsdapi: Add stub implementation of IWSDiscoveryPublisher_PublishEx.
Signed-off-by: Owen Rudge <orudge at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wsdapi/Makefile.in | 1 +
dlls/wsdapi/discovery.c | 40 +++++++++-----------------
dlls/wsdapi/soap.c | 66 +++++++++++++++++++++++++++++++++++++++++++
dlls/wsdapi/wsdapi_internal.h | 24 ++++++++++++++++
4 files changed, 105 insertions(+), 26 deletions(-)
diff --git a/dlls/wsdapi/Makefile.in b/dlls/wsdapi/Makefile.in
index 5c95351..155d004 100644
--- a/dlls/wsdapi/Makefile.in
+++ b/dlls/wsdapi/Makefile.in
@@ -8,4 +8,5 @@ C_SRCS = \
main.c \
memory.c \
msgparams.c \
+ soap.c \
xml.c
diff --git a/dlls/wsdapi/discovery.c b/dlls/wsdapi/discovery.c
index 82a1ca0..7fa417b 100644
--- a/dlls/wsdapi/discovery.c
+++ b/dlls/wsdapi/discovery.c
@@ -23,30 +23,12 @@
#define COBJMACROS
#define INITGUID
-#include "windef.h"
-#include "winbase.h"
+#include "wsdapi_internal.h"
#include "wine/debug.h"
-#include "wine/list.h"
-#include "objbase.h"
#include "guiddef.h"
-#include "wsdapi.h"
WINE_DEFAULT_DEBUG_CHANNEL(wsdapi);
-struct notificationSink
-{
- struct list entry;
- IWSDiscoveryPublisherNotify *notificationSink;
-};
-
-typedef struct IWSDiscoveryPublisherImpl {
- IWSDiscoveryPublisher IWSDiscoveryPublisher_iface;
- LONG ref;
- IWSDXMLContext *xmlContext;
- DWORD addressFamily;
- struct list notificationSinks;
-} IWSDiscoveryPublisherImpl;
-
static inline IWSDiscoveryPublisherImpl *impl_from_IWSDiscoveryPublisher(IWSDiscoveryPublisher *iface)
{
return CONTAINING_RECORD(iface, IWSDiscoveryPublisherImpl, IWSDiscoveryPublisher_iface);
@@ -200,10 +182,8 @@ static HRESULT WINAPI IWSDiscoveryPublisherImpl_Publish(IWSDiscoveryPublisher *T
ULONGLONG ullMessageNumber, LPCWSTR pszSessionId, const WSD_NAME_LIST *pTypesList,
const WSD_URI_LIST *pScopesList, const WSD_URI_LIST *pXAddrsList)
{
- FIXME("(%p, %s, %s, %s, %s, %s, %p, %p, %p)\n", This, debugstr_w(pszId), wine_dbgstr_longlong(ullMetadataVersion), wine_dbgstr_longlong(ullInstanceId),
- wine_dbgstr_longlong(ullMessageNumber), debugstr_w(pszSessionId), pTypesList, pScopesList, pXAddrsList);
-
- return E_NOTIMPL;
+ return IWSDiscoveryPublisher_PublishEx(This, pszId, ullMetadataVersion, ullInstanceId, ullMessageNumber,
+ pszSessionId, pTypesList, pScopesList, pXAddrsList, NULL, NULL, NULL, NULL, NULL);
}
static HRESULT WINAPI IWSDiscoveryPublisherImpl_UnPublish(IWSDiscoveryPublisher *This, LPCWSTR pszId, ULONGLONG ullInstanceId, ULONGLONG ullMessageNumber,
@@ -248,13 +228,21 @@ static HRESULT WINAPI IWSDiscoveryPublisherImpl_PublishEx(IWSDiscoveryPublisher
const WSDXML_ELEMENT *pReferenceParameterAny, const WSDXML_ELEMENT *pPolicyAny,
const WSDXML_ELEMENT *pEndpointReferenceAny, const WSDXML_ELEMENT *pAny)
{
- FIXME("(%p, %s, %s, %s, %s, %s, %p, %p, %p, %p, %p, %p, %p, %p)\n", This, debugstr_w(pszId), wine_dbgstr_longlong(ullMetadataVersion),
+ IWSDiscoveryPublisherImpl *impl = impl_from_IWSDiscoveryPublisher(This);
+
+ TRACE("(%p, %s, %s, %s, %s, %s, %p, %p, %p, %p, %p, %p, %p, %p)\n", This, debugstr_w(pszId), wine_dbgstr_longlong(ullMetadataVersion),
wine_dbgstr_longlong(ullInstanceId), wine_dbgstr_longlong(ullMessageNumber), debugstr_w(pszSessionId), pTypesList, pScopesList, pXAddrsList,
pHeaderAny, pReferenceParameterAny, pPolicyAny, pEndpointReferenceAny, pAny);
- return E_NOTIMPL;
-}
+ if ((!impl->publisherStarted) || (pszId == NULL) || (lstrlenW(pszId) > WSD_MAX_TEXT_LENGTH) ||
+ ((pszSessionId != NULL) && (lstrlenW(pszSessionId) > WSD_MAX_TEXT_LENGTH)))
+ {
+ return E_INVALIDARG;
+ }
+ return send_hello_message(impl, pszId, ullMetadataVersion, ullInstanceId, ullMessageNumber, pszSessionId,
+ pTypesList, pScopesList, pXAddrsList, pHeaderAny, pReferenceParameterAny, pEndpointReferenceAny, pAny);
+}
static HRESULT WINAPI IWSDiscoveryPublisherImpl_MatchProbeEx(IWSDiscoveryPublisher *This, const WSD_SOAP_MESSAGE *pProbeMessage,
IWSDMessageParameters *pMessageParameters, LPCWSTR pszId, ULONGLONG ullMetadataVersion,
diff --git a/dlls/wsdapi/soap.c b/dlls/wsdapi/soap.c
new file mode 100644
index 0000000..0cc2580
--- /dev/null
+++ b/dlls/wsdapi/soap.c
@@ -0,0 +1,66 @@
+/*
+ * Web Services on Devices
+ *
+ * Copyright 2017-2018 Owen Rudge for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include <limits.h>
+
+#define COBJMACROS
+
+#include "wsdapi_internal.h"
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+#define APP_MAX_DELAY 500
+
+static HRESULT write_and_send_message(IWSDiscoveryPublisherImpl *impl, WSD_SOAP_HEADER *header, WSDXML_ELEMENT *body_element,
+ struct list *discovered_namespaces, IWSDUdpAddress *remote_address, int max_initial_delay)
+{
+ static const char xml_header[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
+ ULONG xml_header_len = sizeof(xml_header) - 1;
+ char *full_xml;
+
+ /* TODO: Create SOAP envelope */
+
+ /* Prefix the XML header */
+ full_xml = heap_alloc(xml_header_len + 1);
+
+ if (full_xml == NULL)
+ return E_OUTOFMEMORY;
+
+ memcpy(full_xml, xml_header, xml_header_len);
+ full_xml[xml_header_len] = 0;
+
+ /* TODO: Send the message */
+
+ heap_free(full_xml);
+
+ return S_OK;
+}
+
+HRESULT send_hello_message(IWSDiscoveryPublisherImpl *impl, LPCWSTR id, ULONGLONG metadata_ver, ULONGLONG instance_id,
+ ULONGLONG msg_num, LPCWSTR session_id, const WSD_NAME_LIST *types_list, const WSD_URI_LIST *scopes_list,
+ const WSD_URI_LIST *xaddrs_list, const WSDXML_ELEMENT *hdr_any, const WSDXML_ELEMENT *ref_param_any,
+ const WSDXML_ELEMENT *endpoint_ref_any, const WSDXML_ELEMENT *any)
+{
+ /* TODO: Populate message body */
+
+ /* Write and send the message */
+ return write_and_send_message(impl, NULL, NULL, NULL, NULL, APP_MAX_DELAY);
+}
diff --git a/dlls/wsdapi/wsdapi_internal.h b/dlls/wsdapi/wsdapi_internal.h
index 22de4a8..631dfb3 100644
--- a/dlls/wsdapi/wsdapi_internal.h
+++ b/dlls/wsdapi/wsdapi_internal.h
@@ -32,4 +32,28 @@
#define WSD_MAX_TEXT_LENGTH 8192
+/* discovery.c */
+
+struct notificationSink
+{
+ struct list entry;
+ IWSDiscoveryPublisherNotify *notificationSink;
+};
+
+typedef struct IWSDiscoveryPublisherImpl {
+ IWSDiscoveryPublisher IWSDiscoveryPublisher_iface;
+ LONG ref;
+ IWSDXMLContext *xmlContext;
+ DWORD addressFamily;
+ struct list notificationSinks;
+ BOOL publisherStarted;
+} IWSDiscoveryPublisherImpl;
+
+/* soap.c */
+
+HRESULT send_hello_message(IWSDiscoveryPublisherImpl *impl, LPCWSTR id, ULONGLONG metadata_ver, ULONGLONG instance_id,
+ ULONGLONG msg_num, LPCWSTR session_id, const WSD_NAME_LIST *types_list, const WSD_URI_LIST *scopes_list,
+ const WSD_URI_LIST *xaddrs_list, const WSDXML_ELEMENT *hdr_any, const WSDXML_ELEMENT *ref_param_any,
+ const WSDXML_ELEMENT *endpoint_ref_any, const WSDXML_ELEMENT *any);
+
#endif
More information about the wine-cvs
mailing list