Owen Rudge : wsdapi: Add support for sending reference parameters in the Hello message.

Alexandre Julliard julliard at winehq.org
Thu Apr 26 16:18:17 CDT 2018


Module: wine
Branch: master
Commit: 7b6b34d0c9ec2b8fe3d4c0f3b9eb0540573d9f89
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7b6b34d0c9ec2b8fe3d4c0f3b9eb0540573d9f89

Author: Owen Rudge <orudge at codeweavers.com>
Date:   Wed Apr 25 22:20:15 2018 +0100

wsdapi: Add support for sending reference parameters in the Hello message.

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/soap.c            | 14 +++++++++++++-
 dlls/wsdapi/tests/discovery.c | 14 +++++++++++---
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/dlls/wsdapi/soap.c b/dlls/wsdapi/soap.c
index e7cd651..943a6a3 100644
--- a/dlls/wsdapi/soap.c
+++ b/dlls/wsdapi/soap.c
@@ -77,6 +77,7 @@ static const WCHAR bodyString[] = { 'B','o','d','y', 0 };
 static const WCHAR helloString[] = { 'H','e','l','l','o', 0 };
 static const WCHAR endpointReferenceString[] = { 'E','n','d','p','o','i','n','t','R','e','f','e','r','e','n','c','e', 0 };
 static const WCHAR addressString[] = { 'A','d','d','r','e','s','s', 0 };
+static const WCHAR referenceParametersString[] = { 'R','e','f','e','r','e','n','c','e','P','a','r','a','m','e','t','e','r','s', 0 };
 static const WCHAR typesString[] = { 'T','y','p','e','s', 0 };
 static const WCHAR scopesString[] = { 'S','c','o','p','e','s', 0 };
 static const WCHAR xAddrsString[] = { 'X','A','d','d','r','s', 0 };
@@ -883,7 +884,7 @@ HRESULT send_hello_message(IWSDiscoveryPublisherImpl *impl, LPCWSTR id, ULONGLON
     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)
 {
-    WSDXML_ELEMENT *body_element = NULL, *hello_element, *endpoint_reference_element;
+    WSDXML_ELEMENT *body_element = NULL, *hello_element, *endpoint_reference_element, *ref_params_element;
     struct list *discoveredNamespaces = NULL;
     WSDXML_NAME *body_name = NULL;
     WSD_SOAP_HEADER soapHeader;
@@ -923,6 +924,17 @@ HRESULT send_hello_message(IWSDiscoveryPublisherImpl *impl, LPCWSTR id, ULONGLON
     ret = add_child_element(impl->xmlContext, endpoint_reference_element, addressingNsUri, addressString, id, NULL);
     if (FAILED(ret)) goto cleanup;
 
+    /* Write any reference parameters */
+    if (ref_param_any != NULL)
+    {
+        ret = add_child_element(impl->xmlContext, endpoint_reference_element, addressingNsUri, referenceParametersString,
+            NULL, &ref_params_element);
+        if (FAILED(ret)) goto cleanup;
+
+        ret = duplicate_element(ref_params_element, ref_param_any, discoveredNamespaces);
+        if (FAILED(ret)) goto cleanup;
+    }
+
     /* Write any endpoint reference headers */
     if (endpoint_ref_any != NULL)
     {
diff --git a/dlls/wsdapi/tests/discovery.c b/dlls/wsdapi/tests/discovery.c
index 5d10d3d..69cce44 100644
--- a/dlls/wsdapi/tests/discovery.c
+++ b/dlls/wsdapi/tests/discovery.c
@@ -514,7 +514,7 @@ static void Publish_tests(void)
     HRESULT rc;
     ULONG ref;
     char *msg;
-    WSDXML_ELEMENT *header_any_element, *body_any_element, *endpoint_any_element;
+    WSDXML_ELEMENT *header_any_element, *body_any_element, *endpoint_any_element, *ref_param_any_element;
     WSDXML_NAME header_any_name, another_name;
     WSDXML_NAMESPACE ns, ns2;
     WCHAR header_any_name_text[] = {'B','e','e','r',0};
@@ -522,6 +522,7 @@ static void Publish_tests(void)
     static const WCHAR header_any_text[] = {'P','u','b','l','i','s','h','T','e','s','t',0};
     static const WCHAR body_any_text[] = {'B','o','d','y','T','e','s','t',0};
     static const WCHAR endpoint_any_text[] = {'E','n','d','P','T','e','s','t',0};
+    static const WCHAR ref_param_any_text[] = {'R','e','f','P','T','e','s','t',0};
     static const WCHAR uri[] = {'h','t','t','p',':','/','/','w','i','n','e','.','t','e','s','t','/',0};
     static const WCHAR prefix[] = {'w','i','n','e',0};
     static const WCHAR uri2[] = {'h','t','t','p',':','/','/','m','o','r','e','.','t','e','s','t','s','/',0};
@@ -606,6 +607,9 @@ static void Publish_tests(void)
     rc = WSDXMLBuildAnyForSingleElement(&header_any_name, endpoint_any_text, &endpoint_any_element);
     ok(rc == S_OK, "WSDXMLBuildAnyForSingleElement failed with %08x\n", rc);
 
+    rc = WSDXMLBuildAnyForSingleElement(&header_any_name, ref_param_any_text, &ref_param_any_element);
+    ok(rc == S_OK, "WSDXMLBuildAnyForSingleElement failed with %08x\n", rc);
+
     /* Create types list */
     ns2.Uri = uri2;
     ns2.PreferredPrefix = prefix2;
@@ -634,11 +638,12 @@ static void Publish_tests(void)
 
     /* Publish the service */
     rc = IWSDiscoveryPublisher_PublishEx(publisher, publisherIdW, 1, 1, 1, sequenceIdW, &types_list, &scopes_list,
-        &xaddrs_list, header_any_element, NULL, NULL, endpoint_any_element, body_any_element);
+        &xaddrs_list, header_any_element, ref_param_any_element, NULL, endpoint_any_element, body_any_element);
 
     WSDFreeLinkedMemory(header_any_element);
     WSDFreeLinkedMemory(body_any_element);
     WSDFreeLinkedMemory(endpoint_any_element);
+    WSDFreeLinkedMemory(ref_param_any_element);
     free(types_list.Next);
     free(scopes_list.Next);
     free(xaddrs_list.Next);
@@ -658,7 +663,10 @@ static void Publish_tests(void)
     /* Verify we've received a message */
     ok(msgStorage->messageCount >= 1, "No messages received\n");
 
-    sprintf(endpointReferenceString, "<wsa:EndpointReference><wsa:Address>%s</wsa:Address><wine:Beer>EndPTest</wine:Beer></wsa:EndpointReference>", publisherId);
+    sprintf(endpointReferenceString, "<wsa:EndpointReference><wsa:Address>%s</wsa:Address><wsa:ReferenceParameters>"
+        "<wine:Beer>RefPTest</wine:Beer></wsa:ReferenceParameters><wine:Beer>EndPTest</wine:Beer>"
+        "</wsa:EndpointReference>", publisherId);
+
     sprintf(app_sequence_string, "<wsd:AppSequence InstanceId=\"1\" SequenceId=\"%s\" MessageNumber=\"1\"></wsd:AppSequence>",
         sequenceId);
 




More information about the wine-cvs mailing list