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