Module: wine Branch: master Commit: a3999d77efd41faf995c29bb138ff9a7f98bb5aa URL: http://source.winehq.org/git/wine.git/?a=commit;h=a3999d77efd41faf995c29bb13...
Author: Hans Leidekker hans@codeweavers.com Date: Thu Apr 20 10:45:46 2017 +0200
webservices: Implement WsResetListener.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/listener.c | 32 ++++++++++++++++++++++++ dlls/webservices/tests/listener.c | 51 +++++++++++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 2 +- 3 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/listener.c b/dlls/webservices/listener.c index a236ab9..99402ff 100644 --- a/dlls/webservices/listener.c +++ b/dlls/webservices/listener.c @@ -361,6 +361,38 @@ HRESULT WINAPI WsCloseListener( WS_LISTENER *handle, const WS_ASYNC_CONTEXT *ctx }
/************************************************************************** + * WsResetListener [webservices.@] + */ +HRESULT WINAPI WsResetListener( WS_LISTENER *handle, WS_ERROR *error ) +{ + struct listener *listener = (struct listener *)handle; + + TRACE( "%p %p\n", handle, 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; + } + + if (listener->state != WS_LISTENER_STATE_CREATED && listener->state != WS_LISTENER_STATE_CLOSED) + { + LeaveCriticalSection( &listener->cs ); + return WS_E_INVALID_OPERATION; + } + + reset_listener( listener ); + + LeaveCriticalSection( &listener->cs ); + return S_OK; +} + +/************************************************************************** * WsGetListenerProperty [webservices.@] */ HRESULT WINAPI WsGetListenerProperty( WS_LISTENER *handle, WS_LISTENER_PROPERTY_ID id, void *buf, diff --git a/dlls/webservices/tests/listener.c b/dlls/webservices/tests/listener.c index c4a2747..9aaf330 100644 --- a/dlls/webservices/tests/listener.c +++ b/dlls/webservices/tests/listener.c @@ -190,9 +190,60 @@ static void test_WsCreateChannelForListener(void) WsFreeListener( listener ); }
+static void test_WsResetListener(void) +{ + WCHAR str[] = + {'n','e','t','.','t','c','p',':','/','/','+',':','2','0','1','7','/','p','a','t','h'}; + WS_STRING url = { sizeof(str)/sizeof(str[0]), str }; + WS_LISTENER *listener; + WS_LISTENER_STATE state; + WS_LISTENER_PROPERTY prop; + ULONG size, timeout = 1000; + HRESULT hr; + + hr = WsResetListener( NULL, NULL ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + prop.id = WS_LISTENER_PROPERTY_CONNECT_TIMEOUT; + prop.value = &timeout; + prop.valueSize = sizeof(timeout); + hr = WsCreateListener( WS_CHANNEL_TYPE_DUPLEX_SESSION, WS_TCP_CHANNEL_BINDING, &prop, 1, NULL, &listener, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsResetListener( listener, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsOpenListener( listener, &url, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsResetListener( listener, NULL ); + ok( hr == WS_E_INVALID_OPERATION, "got %08x\n", hr ); + + hr = WsCloseListener( listener, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsResetListener( listener, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + state = 0xdeadbeef; + size = sizeof(state); + hr = WsGetListenerProperty( listener, WS_LISTENER_PROPERTY_STATE, &state, size, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( state == WS_LISTENER_STATE_CREATED, "got %u\n", state ); + + timeout = 0xdeadbeef; + size = sizeof(timeout); + hr = WsGetListenerProperty( listener, WS_LISTENER_PROPERTY_CONNECT_TIMEOUT, &timeout, size, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( timeout == 1000, "got %u\n", timeout ); + + WsFreeListener( listener ); +} + START_TEST(listener) { test_WsCreateListener(); test_WsOpenListener(); test_WsCreateChannelForListener(); + test_WsResetListener(); } diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 522cc56..f55bef8 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -136,7 +136,7 @@ @ stdcall WsResetChannel(ptr ptr) @ stdcall WsResetError(ptr) @ stdcall WsResetHeap(ptr ptr) -@ stub WsResetListener +@ stdcall WsResetListener(ptr ptr) @ stdcall WsResetMessage(ptr ptr) @ stub WsResetMetadata @ stub WsResetServiceHost