From 92fdb3ffb55fd408c5590b75b2f2c41d73a26dee Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 5 Apr 2017 11:40:26 +0200 Subject: [PATCH] webservices: Implement WsGetListenerProperty and WsSetListenerProperty. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/webservices/listener.c | 75 +++++++++++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 4 +-- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/dlls/webservices/listener.c b/dlls/webservices/listener.c index 205f7bc6dab..4adddf4af51 100644 --- a/dlls/webservices/listener.c +++ b/dlls/webservices/listener.c @@ -172,3 +172,78 @@ void WINAPI WsFreeListener( WS_LISTENER *handle ) LeaveCriticalSection( &listener->cs ); free_listener( listener ); } + +/************************************************************************** + * WsGetListenerProperty [webservices.@] + */ +HRESULT WINAPI WsGetListenerProperty( WS_LISTENER *handle, WS_LISTENER_PROPERTY_ID id, void *buf, + ULONG size, WS_ERROR *error ) +{ + struct listener *listener = (struct listener *)handle; + HRESULT hr = S_OK; + + TRACE( "%p %u %p %u %p\n", handle, id, buf, size, error ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!listener) return E_INVALIDARG; + + EnterCriticalSection( &listener->cs ); + + if (listener->magic != LISTENER_MAGIC) + { + LeaveCriticalSection( &listener->cs ); + return E_INVALIDARG; + } + + switch (id) + { + case WS_LISTENER_PROPERTY_STATE: + if (!buf || size != sizeof(listener->state)) hr = E_INVALIDARG; + else *(WS_LISTENER_STATE *)buf = listener->state; + break; + + case WS_LISTENER_PROPERTY_CHANNEL_TYPE: + if (!buf || size != sizeof(listener->type)) hr = E_INVALIDARG; + else *(WS_CHANNEL_TYPE *)buf = listener->type; + break; + + case WS_LISTENER_PROPERTY_CHANNEL_BINDING: + if (!buf || size != sizeof(listener->binding)) hr = E_INVALIDARG; + else *(WS_CHANNEL_BINDING *)buf = listener->binding; + break; + + default: + hr = prop_get( listener->prop, listener->prop_count, id, buf, size ); + } + + LeaveCriticalSection( &listener->cs ); + return hr; +} + +/************************************************************************** + * WsSetListenerProperty [webservices.@] + */ +HRESULT WINAPI WsSetListenerProperty( WS_LISTENER *handle, WS_LISTENER_PROPERTY_ID id, const void *value, + ULONG size, WS_ERROR *error ) +{ + struct listener *listener = (struct listener *)handle; + HRESULT hr; + + TRACE( "%p %u %p %u\n", handle, id, value, size ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!listener) return E_INVALIDARG; + + EnterCriticalSection( &listener->cs ); + + if (listener->magic != LISTENER_MAGIC) + { + LeaveCriticalSection( &listener->cs ); + return E_INVALIDARG; + } + + hr = prop_set( listener->prop, listener->prop_count, id, value, size ); + + LeaveCriticalSection( &listener->cs ); + return hr; +} diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 9f1fc3e20c0..7e8dbee5835 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -69,7 +69,7 @@ @ stub WsGetHeader @ stub WsGetHeaderAttributes @ stdcall WsGetHeapProperty(ptr long ptr long ptr) -@ stub WsGetListenerProperty +@ stdcall WsGetListenerProperty(ptr long ptr long ptr) @ stub WsGetMappedHeader @ stdcall WsGetMessageProperty(ptr long ptr long ptr) @ stub WsGetMetadataEndpoints @@ -152,7 +152,7 @@ @ stdcall WsSetHeader(ptr long long long ptr long ptr) @ stdcall WsSetInput(ptr ptr ptr ptr long ptr) @ stdcall WsSetInputToBuffer(ptr ptr ptr long ptr) -@ stub WsSetListenerProperty +@ stdcall WsSetListenerProperty(ptr long ptr long ptr) @ stdcall WsSetMessageProperty(ptr long ptr long ptr) @ stdcall WsSetOutput(ptr ptr ptr ptr long ptr) @ stdcall WsSetOutputToBuffer(ptr ptr ptr long ptr) -- 2.11.4.GIT