Module: wine Branch: master Commit: 6b583f9350af180ba908016453a5b16decb8c9d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6b583f9350af180ba908016453...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Aug 31 14:35:33 2016 +0200
webservices: Implement WsReadEnvelopeEnd.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/msg.c | 27 ++++++++++++++++++++++ dlls/webservices/tests/msg.c | 47 +++++++++++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 2 +- include/webservices.h | 1 + 4 files changed, 76 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/msg.c b/dlls/webservices/msg.c index 2004c70..27dbddd 100644 --- a/dlls/webservices/msg.c +++ b/dlls/webservices/msg.c @@ -588,6 +588,33 @@ HRESULT WINAPI WsReadEnvelopeStart( WS_MESSAGE *handle, WS_XML_READER *reader, W return S_OK; }
+static HRESULT read_envelope_end( WS_XML_READER *reader ) +{ + HRESULT hr; + if ((hr = WsReadEndElement( reader, NULL )) != S_OK) return hr; /* </s:Body> */ + return WsReadEndElement( reader, NULL ); /* </s:Envelope> */ +} + +/************************************************************************** + * WsReadEnvelopeEnd [webservices.@] + */ +HRESULT WINAPI WsReadEnvelopeEnd( WS_MESSAGE *handle, WS_ERROR *error ) +{ + struct msg *msg = (struct msg *)handle; + HRESULT hr; + + TRACE( "%p %p\n", handle, error ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!handle) return E_INVALIDARG; + if (msg->state != WS_MESSAGE_STATE_READING) return WS_E_INVALID_OPERATION; + + if ((hr = read_envelope_end( msg->reader_body )) != S_OK) return hr; + + msg->state = WS_MESSAGE_STATE_DONE; + return S_OK; +} + /************************************************************************** * WsInitializeMessage [webservices.@] */ diff --git a/dlls/webservices/tests/msg.c b/dlls/webservices/tests/msg.c index a31ed94..99db9e6 100644 --- a/dlls/webservices/tests/msg.c +++ b/dlls/webservices/tests/msg.c @@ -916,6 +916,52 @@ static void test_WsReadEnvelopeStart(void) WsFreeReader( reader ); }
+static void test_WsReadEnvelopeEnd(void) +{ + static const char xml[] = + "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/%5C%22%3E<s:Body></s:Body></s:Envelope>"; + WS_MESSAGE *msg, *msg2; + WS_XML_READER *reader; + WS_MESSAGE_STATE state; + HRESULT hr; + + hr = WsReadEnvelopeEnd( NULL, NULL ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + hr = WsCreateMessage( WS_ADDRESSING_VERSION_0_9, WS_ENVELOPE_VERSION_SOAP_1_1, NULL, 0, &msg, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsCreateReader( NULL, 0, &reader, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsInitializeMessage( msg, WS_REQUEST_MESSAGE, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsCreateMessage( WS_ADDRESSING_VERSION_0_9, WS_ENVELOPE_VERSION_SOAP_1_1, NULL, 0, &msg2, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = set_input( reader, xml, strlen(xml) ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsReadEnvelopeEnd( msg2, NULL ); + ok( hr == WS_E_INVALID_OPERATION, "got %08x\n", hr ); + + hr = WsReadEnvelopeStart( msg2, reader, NULL, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsReadEnvelopeEnd( msg2, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + state = 0xdeadbeef; + hr = WsGetMessageProperty( msg2, WS_MESSAGE_PROPERTY_STATE, &state, sizeof(state), NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( state == WS_MESSAGE_STATE_DONE, "got %u\n", state ); + + WsFreeMessage( msg ); + WsFreeMessage( msg2 ); + WsFreeReader( reader ); +} + START_TEST(msg) { test_WsCreateMessage(); @@ -932,4 +978,5 @@ START_TEST(msg) test_WsAddCustomHeader(); test_WsRemoveCustomHeader(); test_WsReadEnvelopeStart(); + test_WsReadEnvelopeEnd(); } diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 6354243..a0f88ac 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -111,7 +111,7 @@ @ stdcall WsReadEndAttribute(ptr ptr) @ stdcall WsReadEndElement(ptr ptr) @ stub WsReadEndpointAddressExtension -@ stub WsReadEnvelopeEnd +@ stdcall WsReadEnvelopeEnd(ptr ptr) @ stdcall WsReadEnvelopeStart(ptr ptr ptr ptr ptr) @ stub WsReadMessageEnd @ stub WsReadMessageStart diff --git a/include/webservices.h b/include/webservices.h index 3a06ab5..dbaa5d1 100644 --- a/include/webservices.h +++ b/include/webservices.h @@ -1444,6 +1444,7 @@ HRESULT WINAPI WsReadElement(WS_XML_READER*, const WS_ELEMENT_DESCRIPTION*, WS_R WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadEndAttribute(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsReadEndElement(WS_XML_READER*, WS_ERROR*); +HRESULT WINAPI WsReadEnvelopeEnd(WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsReadEnvelopeStart(WS_MESSAGE*, WS_XML_READER*, WS_MESSAGE_DONE_CALLBACK, void*, WS_ERROR*); HRESULT WINAPI WsReadNode(WS_XML_READER*, WS_ERROR*);