Commit 9ce9d734 authored by Owen Rudge's avatar Owen Rudge Committed by Alexandre Julliard

wsdapi: Implement Get/SetLocalAddress.

parent 524c632a
...@@ -32,6 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wsdapi); ...@@ -32,6 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wsdapi);
typedef struct IWSDMessageParametersImpl { typedef struct IWSDMessageParametersImpl {
IWSDMessageParameters IWSDMessageParameters_iface; IWSDMessageParameters IWSDMessageParameters_iface;
LONG ref; LONG ref;
IWSDAddress *localAddress;
} IWSDMessageParametersImpl; } IWSDMessageParametersImpl;
typedef struct IWSDUdpMessageParametersImpl { typedef struct IWSDUdpMessageParametersImpl {
...@@ -68,6 +69,11 @@ static ULONG WINAPI IWSDMessageParametersImpl_Release(IWSDMessageParameters *ifa ...@@ -68,6 +69,11 @@ static ULONG WINAPI IWSDMessageParametersImpl_Release(IWSDMessageParameters *ifa
if (ref == 0) if (ref == 0)
{ {
if (This->localAddress != NULL)
{
IWSDAddress_Release(This->localAddress);
}
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
} }
...@@ -76,14 +82,46 @@ static ULONG WINAPI IWSDMessageParametersImpl_Release(IWSDMessageParameters *ifa ...@@ -76,14 +82,46 @@ static ULONG WINAPI IWSDMessageParametersImpl_Release(IWSDMessageParameters *ifa
static HRESULT WINAPI IWSDMessageParametersImpl_GetLocalAddress(IWSDMessageParameters *This, IWSDAddress **ppAddress) static HRESULT WINAPI IWSDMessageParametersImpl_GetLocalAddress(IWSDMessageParameters *This, IWSDAddress **ppAddress)
{ {
FIXME("(%p, %p)\n", This, ppAddress); IWSDMessageParametersImpl *impl = impl_from_IWSDMessageParameters(This);
return E_NOTIMPL;
TRACE("(%p, %p)\n", impl, ppAddress);
if (ppAddress == NULL)
{
return E_POINTER;
}
if (impl->localAddress == NULL)
{
return E_ABORT;
}
*ppAddress = impl->localAddress;
IWSDAddress_AddRef(*ppAddress);
return S_OK;
} }
static HRESULT WINAPI IWSDMessageParametersImpl_SetLocalAddress(IWSDMessageParameters *This, IWSDAddress *pAddress) static HRESULT WINAPI IWSDMessageParametersImpl_SetLocalAddress(IWSDMessageParameters *This, IWSDAddress *pAddress)
{ {
FIXME("(%p, %p)\n", This, pAddress); IWSDMessageParametersImpl *impl = impl_from_IWSDMessageParameters(This);
return E_NOTIMPL;
TRACE("(%p, %p)\n", impl, pAddress);
if (pAddress == NULL)
{
return E_POINTER;
}
if (impl->localAddress != NULL)
{
IWSDAddress_Release(impl->localAddress);
}
impl->localAddress = pAddress;
IWSDAddress_AddRef(pAddress);
return S_OK;
} }
static HRESULT WINAPI IWSDMessageParametersImpl_GetRemoteAddress(IWSDMessageParameters *This, IWSDAddress **ppAddress) static HRESULT WINAPI IWSDMessageParametersImpl_GetRemoteAddress(IWSDMessageParameters *This, IWSDAddress **ppAddress)
...@@ -215,7 +253,7 @@ HRESULT WINAPI WSDCreateUdpMessageParameters(IWSDUdpMessageParameters **ppTxPara ...@@ -215,7 +253,7 @@ HRESULT WINAPI WSDCreateUdpMessageParameters(IWSDUdpMessageParameters **ppTxPara
*ppTxParams = NULL; *ppTxParams = NULL;
obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*obj)); obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*obj));
if (!obj) return E_OUTOFMEMORY; if (!obj) return E_OUTOFMEMORY;
obj->base.IWSDMessageParameters_iface.lpVtbl = (IWSDMessageParametersVtbl *)&udpMsgParamsVtbl; obj->base.IWSDMessageParameters_iface.lpVtbl = (IWSDMessageParametersVtbl *)&udpMsgParamsVtbl;
......
...@@ -84,11 +84,11 @@ static void LocalAddress_tests(void) ...@@ -84,11 +84,11 @@ static void LocalAddress_tests(void)
ok(udpMessageParams != NULL, "WSDCreateUdpMessageParameters(NULL, &udpMessageParams) failed: udpMessageParams == NULL\n"); ok(udpMessageParams != NULL, "WSDCreateUdpMessageParameters(NULL, &udpMessageParams) failed: udpMessageParams == NULL\n");
rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, NULL); rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, NULL);
todo_wine ok(rc == E_POINTER, "GetLocalAddress failed: %08x\n", rc); ok(rc == E_POINTER, "GetLocalAddress failed: %08x\n", rc);
ok(returnedAddress == NULL, "GetLocalAddress returned %p\n", returnedAddress); ok(returnedAddress == NULL, "GetLocalAddress returned %p\n", returnedAddress);
rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, &returnedAddress); rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, &returnedAddress);
todo_wine ok(rc == E_ABORT, "GetLocalAddress failed: %08x\n", rc); ok(rc == E_ABORT, "GetLocalAddress failed: %08x\n", rc);
ok(returnedAddress == NULL, "GetLocalAddress returned %p\n", returnedAddress); ok(returnedAddress == NULL, "GetLocalAddress returned %p\n", returnedAddress);
rc = WSDCreateUdpAddress(&origUdpAddress); rc = WSDCreateUdpAddress(&origUdpAddress);
...@@ -99,14 +99,14 @@ static void LocalAddress_tests(void) ...@@ -99,14 +99,14 @@ static void LocalAddress_tests(void)
todo_wine ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc); todo_wine ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
rc = IWSDUdpMessageParameters_SetLocalAddress(udpMessageParams, (IWSDAddress *)origUdpAddress); rc = IWSDUdpMessageParameters_SetLocalAddress(udpMessageParams, (IWSDAddress *)origUdpAddress);
todo_wine ok(rc == S_OK, "SetLocalAddress failed: %08x\n", rc); ok(rc == S_OK, "SetLocalAddress failed: %08x\n", rc);
rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, &returnedAddress); rc = IWSDUdpMessageParameters_GetLocalAddress(udpMessageParams, &returnedAddress);
todo_wine ok(rc == S_OK, "GetLocalAddress failed: %08x\n", rc); ok(rc == S_OK, "GetLocalAddress failed: %08x\n", rc);
todo_wine ok(returnedAddress != NULL, "GetLocalAddress returned NULL\n"); ok(returnedAddress != NULL, "GetLocalAddress returned NULL\n");
/* Check if GetLocalAddress returns the same object */ /* Check if GetLocalAddress returns the same object */
todo_wine ok(returnedAddress == (IWSDAddress *)origUdpAddress, "returnedAddress != origUdpAddress\n"); ok(returnedAddress == (IWSDAddress *)origUdpAddress, "returnedAddress != origUdpAddress\n");
ret = IWSDUdpMessageParameters_Release(udpMessageParams); ret = IWSDUdpMessageParameters_Release(udpMessageParams);
ok(ret == 0, "IWSDUdpMessageParameters_Release() has %d references, should have 0\n", ret); ok(ret == 0, "IWSDUdpMessageParameters_Release() has %d references, should have 0\n", ret);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment