//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.idl";
import "Windows.Networking.Connectivity.idl";
import "Windows.Networking.Sockets.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IStringable;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Connectivity
        {
            runtimeclass NetworkAdapter;
        }
    }
}
namespace Windows
{
    namespace Networking
    {
        runtimeclass HostName;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Sockets
        {
            runtimeclass DatagramSocket;

            runtimeclass StreamSocketListener;
        }
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace ServiceDiscovery
        {
            namespace Dnssd
            {
                typedef enum DnssdRegistrationStatus DnssdRegistrationStatus;

                typedef enum DnssdServiceWatcherStatus DnssdServiceWatcherStatus;

                interface IDnssdRegistrationResult;

                interface IDnssdServiceInstance;

                interface IDnssdServiceInstanceFactory;

                interface IDnssdServiceWatcher;

                runtimeclass DnssdRegistrationResult;

                runtimeclass DnssdServiceInstance;

                runtimeclass DnssdServiceInstanceCollection;

                runtimeclass DnssdServiceWatcher;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Networking
    {
        namespace ServiceDiscovery
        {
            namespace Dnssd
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher*, IInspectable*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher*, Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Networking
    {
        namespace ServiceDiscovery
        {
            namespace Dnssd
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum DnssdRegistrationStatus
                {
                    Success            = 0,
                    InvalidServiceName = 1,
                    ServerError        = 2,
                    SecurityError      = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum DnssdServiceWatcherStatus
                {
                    Created              = 0,
                    Started              = 1,
                    EnumerationCompleted = 2,
                    Stopping             = 3,
                    Stopped              = 4,
                    Aborted              = 5
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult)]
                [uuid(3D786AD2-E606-5350-73EA-7E97F066162F)]
                interface IDnssdRegistrationResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationStatus* value);
                    [propget] HRESULT IPAddress([out] [retval] Windows.Networking.HostName** value);
                    [propget] HRESULT HasInstanceNameChanged([out] [retval] boolean* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance)]
                [uuid(E246DB7E-98A5-4CA1-B9E4-C253D33C35FF)]
                interface IDnssdServiceInstance : IInspectable
                {
                    [propget] HRESULT DnssdServiceInstanceName([out] [retval] HSTRING* value);
                    [propput] HRESULT DnssdServiceInstanceName([in] HSTRING value);
                    [propget] HRESULT HostName([out] [retval] Windows.Networking.HostName** value);
                    [propput] HRESULT HostName([in] Windows.Networking.HostName* value);
                    [propget] HRESULT Port([out] [retval] UINT16* value);
                    [propput] HRESULT Port([in] UINT16 value);
                    [propget] HRESULT Priority([out] [retval] UINT16* value);
                    [propput] HRESULT Priority([in] UINT16 value);
                    [propget] HRESULT Weight([out] [retval] UINT16* value);
                    [propput] HRESULT Weight([in] UINT16 value);
                    [propget] HRESULT TextAttributes([out] [retval] Windows.Foundation.Collections.IMap<HSTRING, HSTRING>** value);
                    [overload("RegisterStreamSocketListenerAsync")] HRESULT RegisterStreamSocketListenerAsync1([in] Windows.Networking.Sockets.StreamSocketListener* socket, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult*>** result);
                    [overload("RegisterStreamSocketListenerAsync")] HRESULT RegisterStreamSocketListenerAsync2([in] Windows.Networking.Sockets.StreamSocketListener* socket, [in] Windows.Networking.Connectivity.NetworkAdapter* adapter, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult*>** result);
                    [overload("RegisterDatagramSocketAsync")] HRESULT RegisterDatagramSocketAsync1([in] Windows.Networking.Sockets.DatagramSocket* socket, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult*>** result);
                    [overload("RegisterDatagramSocketAsync")] HRESULT RegisterDatagramSocketAsync2([in] Windows.Networking.Sockets.DatagramSocket* socket, [in] Windows.Networking.Connectivity.NetworkAdapter* adapter, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.ServiceDiscovery.Dnssd.DnssdRegistrationResult*>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance)]
                [uuid(6CB061A1-C478-4331-9684-4AF2186C0A2B)]
                interface IDnssdServiceInstanceFactory : IInspectable
                {
                    HRESULT Create([in] HSTRING dnssdServiceInstanceName, [in] Windows.Networking.HostName* hostName, [in] UINT16 port, [out] [retval] Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher)]
                [uuid(CC34D9C1-DB7D-4B69-983D-C6F83F205682)]
                interface IDnssdServiceWatcher : IInspectable
                {
                    [eventadd] HRESULT Added([in] Windows.Foundation.TypedEventHandler<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher*, Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Added([in] EventRegistrationToken token);
                    [eventadd] HRESULT EnumerationCompleted([in] Windows.Foundation.TypedEventHandler<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT EnumerationCompleted([in] EventRegistrationToken token);
                    [eventadd] HRESULT Stopped([in] Windows.Foundation.TypedEventHandler<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Stopped([in] EventRegistrationToken token);
                    [propget] HRESULT Status([out] [retval] Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceWatcherStatus* status);
                    HRESULT Start();
                    HRESULT Stop();
                }

                [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass DnssdRegistrationResult
                {
                    [default] interface Windows.Networking.ServiceDiscovery.Dnssd.IDnssdRegistrationResult;
                    interface Windows.Foundation.IStringable;
                }

                [activatable(Windows.Networking.ServiceDiscovery.Dnssd.IDnssdServiceInstanceFactory, Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass DnssdServiceInstance
                {
                    [default] interface Windows.Networking.ServiceDiscovery.Dnssd.IDnssdServiceInstance;
                    interface Windows.Foundation.IStringable;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass DnssdServiceInstanceCollection
                {
                    [default] interface Windows.Foundation.Collections.IVectorView<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;
                    interface Windows.Foundation.Collections.IIterable<Windows.Networking.ServiceDiscovery.Dnssd.DnssdServiceInstance*>;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass DnssdServiceWatcher
                {
                    [default] interface Windows.Networking.ServiceDiscovery.Dnssd.IDnssdServiceWatcher;
                }
            }
        }
    }
}
