From 19f540dbcb851f698c5718eb9e1255f0ea07074f Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 6 Sep 2017 15:56:06 +0200 Subject: [PATCH] webservices: Implement WsSendReplyMessage. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/webservices/channel.c | 39 +++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index 5db6f1dea69..87184c7e889 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -1126,6 +1126,45 @@ done: return hr; } +/************************************************************************** + * WsSendReplyMessage [webservices.@] + */ +HRESULT WINAPI WsSendReplyMessage( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS_MESSAGE_DESCRIPTION *desc, + WS_WRITE_OPTION option, const void *body, ULONG size, WS_MESSAGE *request, + const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error ) +{ + struct channel *channel = (struct channel *)handle; + HRESULT hr; + + TRACE( "%p %p %p %08x %p %u %p %p %p\n", handle, msg, desc, option, body, size, request, ctx, error ); + if (error) FIXME( "ignoring error parameter\n" ); + if (ctx) FIXME( "ignoring ctx parameter\n" ); + + if (!channel || !msg || !desc || !request) return E_INVALIDARG; + + EnterCriticalSection( &channel->cs ); + + if (channel->magic != CHANNEL_MAGIC) + { + LeaveCriticalSection( &channel->cs ); + return E_INVALIDARG; + } + + if ((hr = WsInitializeMessage( msg, WS_REPLY_MESSAGE, NULL, NULL )) != S_OK) goto done; + if ((hr = WsAddressMessage( msg, &channel->addr, NULL )) != S_OK) goto done; + if ((hr = message_set_action( msg, desc->action )) != S_OK) goto done; + + if ((hr = init_writer( channel )) != S_OK) goto done; + if ((hr = write_message( msg, channel->writer, desc->bodyElementDescription, option, body, size )) != S_OK) + goto done; + hr = send_message( channel, msg ); + +done: + LeaveCriticalSection( &channel->cs ); + FIXME( "returning %08x\n", hr ); + return hr; +} + static HRESULT resize_read_buffer( struct channel *channel, ULONG size ) { if (!channel->read_buf) diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 5f9cce8b6c5..53fe5477efc 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -144,7 +144,7 @@ @ stub WsRevokeSecurityContext @ stub WsSendFaultMessageForError @ stdcall WsSendMessage(ptr ptr ptr long ptr long ptr ptr) -@ stub WsSendReplyMessage +@ stdcall WsSendReplyMessage(ptr ptr ptr long ptr long ptr ptr ptr) @ stdcall WsSetChannelProperty(ptr long ptr long ptr) @ stdcall WsSetErrorProperty(ptr long ptr long) @ stub WsSetFaultErrorDetail