diff --git a/dlls/wsdapi/discovery.c b/dlls/wsdapi/discovery.c index 990f030fd14..a3d7b9b465d 100644 --- a/dlls/wsdapi/discovery.c +++ b/dlls/wsdapi/discovery.c @@ -36,6 +36,7 @@ typedef struct IWSDiscoveryPublisherImpl { IWSDiscoveryPublisher IWSDiscoveryPublisher_iface; LONG ref; IWSDXMLContext *xmlContext; + DWORD addressFamily; } IWSDiscoveryPublisherImpl; static inline IWSDiscoveryPublisherImpl *impl_from_IWSDiscoveryPublisher(IWSDiscoveryPublisher *iface) @@ -101,8 +102,25 @@ static ULONG WINAPI IWSDiscoveryPublisherImpl_Release(IWSDiscoveryPublisher *ifa static HRESULT WINAPI IWSDiscoveryPublisherImpl_SetAddressFamily(IWSDiscoveryPublisher *This, DWORD dwAddressFamily) { - FIXME("(%p, %d)\n", This, dwAddressFamily); - return E_NOTIMPL; + IWSDiscoveryPublisherImpl *impl = impl_from_IWSDiscoveryPublisher(This); + + TRACE("(%p, %d)\n", This, dwAddressFamily); + + /* Has the address family already been set? */ + if (impl->addressFamily != 0) + { + return STG_E_INVALIDFUNCTION; + } + + if ((dwAddressFamily == WSDAPI_ADDRESSFAMILY_IPV4) || (dwAddressFamily == WSDAPI_ADDRESSFAMILY_IPV6) || + (dwAddressFamily == (WSDAPI_ADDRESSFAMILY_IPV4 | WSDAPI_ADDRESSFAMILY_IPV6))) + { + /* TODO: Check that the address family is supported by the system */ + impl->addressFamily = dwAddressFamily; + return S_OK; + } + + return E_INVALIDARG; } static HRESULT WINAPI IWSDiscoveryPublisherImpl_RegisterNotificationSink(IWSDiscoveryPublisher *This, IWSDiscoveryPublisherNotify *pSink) diff --git a/include/wsdbase.idl b/include/wsdbase.idl index 35db5b90be0..c93262daa88 100644 --- a/include/wsdbase.idl +++ b/include/wsdbase.idl @@ -18,6 +18,9 @@ import "objidl.idl"; +cpp_quote("#define WSDAPI_ADDRESSFAMILY_IPV4 1") +cpp_quote("#define WSDAPI_ADDRESSFAMILY_IPV6 2") + interface IWSDAddress; interface IWSDMessageParameters;