Owen Rudge : wsdapi: Implement IWSDUdpAddress_SetTransportAddress.
Alexandre Julliard
julliard at winehq.org
Wed Jun 28 15:10:26 CDT 2017
Module: wine
Branch: master
Commit: 4f1dca9db07dc98223aedf479b1465612a88c9a9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4f1dca9db07dc98223aedf479b1465612a88c9a9
Author: Owen Rudge <orudge at codeweavers.com>
Date: Mon Jun 26 22:35:54 2017 +0100
wsdapi: Implement IWSDUdpAddress_SetTransportAddress.
Signed-off-by: Owen Rudge <orudge at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wsdapi/Makefile.in | 2 +-
dlls/wsdapi/address.c | 30 ++++++++++++++++++++++++++++--
dlls/wsdapi/tests/address.c | 10 +++++-----
dlls/wsdapi/tests/msgparams.c | 4 ++--
4 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/dlls/wsdapi/Makefile.in b/dlls/wsdapi/Makefile.in
index 0f28ce5..5c95351 100644
--- a/dlls/wsdapi/Makefile.in
+++ b/dlls/wsdapi/Makefile.in
@@ -1,6 +1,6 @@
MODULE = wsdapi.dll
IMPORTLIB = wsdapi
-IMPORTS = user32
+IMPORTS = user32 ws2_32
C_SRCS = \
address.c \
diff --git a/dlls/wsdapi/address.c b/dlls/wsdapi/address.c
index 7efcac2..587d090 100644
--- a/dlls/wsdapi/address.c
+++ b/dlls/wsdapi/address.c
@@ -22,6 +22,8 @@
#define COBJMACROS
+#include "winsock2.h"
+#include "ws2tcpip.h"
#include "windef.h"
#include "winbase.h"
#include "wine/debug.h"
@@ -32,6 +34,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wsdapi);
typedef struct IWSDUdpAddressImpl {
IWSDUdpAddress IWSDUdpAddress_iface;
LONG ref;
+ SOCKADDR_STORAGE sockAddr;
} IWSDUdpAddressImpl;
static inline IWSDUdpAddressImpl *impl_from_IWSDUdpAddress(IWSDUdpAddress *iface)
@@ -132,8 +135,31 @@ static HRESULT WINAPI IWSDUdpAddressImpl_GetTransportAddressEx(IWSDUdpAddress *T
static HRESULT WINAPI IWSDUdpAddressImpl_SetTransportAddress(IWSDUdpAddress *This, LPCWSTR pszAddress)
{
- FIXME("(%p, %s)\n", This, debugstr_w(pszAddress));
- return E_NOTIMPL;
+ IWSDUdpAddressImpl *impl = impl_from_IWSDUdpAddress(This);
+ ADDRINFOW *addrInfo = NULL;
+ ADDRINFOW hints;
+ int ret;
+
+ TRACE("(%p, %s)\n", impl, debugstr_w(pszAddress));
+
+ if (pszAddress == NULL)
+ return E_INVALIDARG;
+
+ ZeroMemory(&hints, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+
+ ret = GetAddrInfoW(pszAddress, NULL, &hints, &addrInfo);
+
+ if (ret == 0)
+ {
+ ZeroMemory(&impl->sockAddr, sizeof(SOCKADDR_STORAGE));
+ memcpy(&impl->sockAddr, addrInfo->ai_addr, addrInfo->ai_addrlen);
+ }
+
+ if (addrInfo != NULL)
+ FreeAddrInfoW(addrInfo);
+
+ return HRESULT_FROM_WIN32(ret);
}
static HRESULT WINAPI IWSDUdpAddressImpl_SetSockaddr(IWSDUdpAddress *This, const SOCKADDR_STORAGE *pSockAddr)
diff --git a/dlls/wsdapi/tests/address.c b/dlls/wsdapi/tests/address.c
index fefc253..8861d2f 100644
--- a/dlls/wsdapi/tests/address.c
+++ b/dlls/wsdapi/tests/address.c
@@ -98,15 +98,15 @@ static void GetSetTransportAddress_udp_tests(void)
/* Try setting a null address */
rc = IWSDUdpAddress_SetTransportAddress(udpAddress, NULL);
- todo_wine ok(rc == E_INVALIDARG, "SetTransportAddress(NULL) returned unexpected result: %08x\n", rc);
+ ok(rc == E_INVALIDARG, "SetTransportAddress(NULL) returned unexpected result: %08x\n", rc);
/* Try setting an invalid address */
rc = IWSDUdpAddress_SetTransportAddress(udpAddress, invalidAddress);
- todo_wine ok(rc == HRESULT_FROM_WIN32(WSAHOST_NOT_FOUND), "SetTransportAddress(invalidAddress) returned unexpected result: %08x\n", rc);
+ ok(rc == HRESULT_FROM_WIN32(WSAHOST_NOT_FOUND), "SetTransportAddress(invalidAddress) returned unexpected result: %08x\n", rc);
/* Try setting an IPv4 address */
rc = IWSDUdpAddress_SetTransportAddress(udpAddress, ipv4Address);
- todo_wine ok(rc == S_OK, "SetTransportAddress(ipv4Address) failed: %08x\n", rc);
+ ok(rc == S_OK, "SetTransportAddress(ipv4Address) failed: %08x\n", rc);
rc = IWSDUdpAddress_GetTransportAddress(udpAddress, NULL);
todo_wine ok(rc == E_POINTER, "GetTransportAddress(NULL) returned unexpected result: %08x\n", rc);
@@ -118,7 +118,7 @@ static void GetSetTransportAddress_udp_tests(void)
/* Try setting an IPv6 address */
rc = IWSDUdpAddress_SetTransportAddress(udpAddress, ipv6Address);
- todo_wine ok(rc == S_OK, "SetTransportAddress(ipv6Address) failed: %08x\n", rc);
+ ok(rc == S_OK, "SetTransportAddress(ipv6Address) failed: %08x\n", rc);
rc = IWSDUdpAddress_GetTransportAddress(udpAddress, &returnedAddress);
todo_wine ok(rc == S_OK, "GetTransportAddress returned unexpected result: %08x\n", rc);
@@ -264,7 +264,7 @@ static void GetSetSockaddr_udp_tests(void)
/* Try setting a transport address */
rc = IWSDUdpAddress_SetTransportAddress(udpAddress, expectedIpv6TransportAddr);
- todo_wine ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
+ ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
/* A socket address should be returned */
rc = IWSDUdpAddress_GetSockaddr(udpAddress, &returnedStorage);
diff --git a/dlls/wsdapi/tests/msgparams.c b/dlls/wsdapi/tests/msgparams.c
index 0621950..9322ce1 100644
--- a/dlls/wsdapi/tests/msgparams.c
+++ b/dlls/wsdapi/tests/msgparams.c
@@ -96,7 +96,7 @@ static void LocalAddress_tests(void)
ok(origUdpAddress != NULL, "WSDCreateUdpMessageParameters(NULL, &origUdpAddress) failed: origUdpAddress == NULL\n");
rc = IWSDUdpAddress_SetTransportAddress(origUdpAddress, address);
- todo_wine ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
+ ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
rc = IWSDUdpMessageParameters_SetLocalAddress(udpMessageParams, (IWSDAddress *)origUdpAddress);
ok(rc == S_OK, "SetLocalAddress failed: %08x\n", rc);
@@ -154,7 +154,7 @@ static void RemoteAddress_tests(void)
ok(origUdpAddress != NULL, "WSDCreateUdpMessageParameters(NULL, &origUdpAddress) failed: origUdpAddress == NULL\n");
rc = IWSDUdpAddress_SetTransportAddress(origUdpAddress, address);
- todo_wine ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
+ ok(rc == S_OK, "SetTransportAddress failed: %08x\n", rc);
rc = IWSDUdpMessageParameters_SetRemoteAddress(udpMessageParams, (IWSDAddress *)origUdpAddress);
ok(rc == S_OK, "SetRemoteAddress failed: %08x\n", rc);
More information about the wine-cvs
mailing list