//
// 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.Connectivity.idl";

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

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Connectivity
        {
            runtimeclass IPInformation;
        }
    }
}
namespace Windows
{
    namespace Networking
    {
        typedef enum DomainNameType DomainNameType;

        typedef enum HostNameSortOptions HostNameSortOptions;

        typedef enum HostNameType HostNameType;

        interface IEndpointPair;

        interface IEndpointPairFactory;

        interface IHostName;

        interface IHostNameFactory;

        interface IHostNameStatics;

        runtimeclass EndpointPair;

        runtimeclass HostName;
    }
}

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

            interface Windows.Foundation.Collections.IIterable<Windows.Networking.HostName*>;

            interface Windows.Foundation.Collections.IIterator<Windows.Networking.EndpointPair*>;

            interface Windows.Foundation.Collections.IIterator<Windows.Networking.HostName*>;

            interface Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair*>;

            interface Windows.Foundation.Collections.IVectorView<Windows.Networking.HostName*>;

            interface Windows.Foundation.Collections.IVector<Windows.Networking.HostName*>;

            interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair*>*>;
        }
    }
}

// Type definition
namespace Windows
{
    namespace Networking
    {
        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        enum DomainNameType
        {
            Suffix         = 0,
            FullyQualified = 1
        };

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [flags]
        enum HostNameSortOptions
        {
            None                       = 0x0,
            OptimizeForLongConnections = 0x2
        };

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        enum HostNameType
        {
            DomainName = 0,
            Ipv4       = 1,
            Ipv6       = 2,
            Bluetooth  = 3
        };

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [exclusiveto(Windows.Networking.EndpointPair)]
        [uuid(33A0AA36-F8FA-4B30-B856-76517C3BD06D)]
        interface IEndpointPair : IInspectable
        {
            [propget] HRESULT LocalHostName([out] [retval] Windows.Networking.HostName** value);
            [propput] HRESULT LocalHostName([in] Windows.Networking.HostName* value);
            [propget] HRESULT LocalServiceName([out] [retval] HSTRING* value);
            [propput] HRESULT LocalServiceName([in] HSTRING value);
            [propget] HRESULT RemoteHostName([out] [retval] Windows.Networking.HostName** value);
            [propput] HRESULT RemoteHostName([in] Windows.Networking.HostName* value);
            [propget] HRESULT RemoteServiceName([out] [retval] HSTRING* value);
            [propput] HRESULT RemoteServiceName([in] HSTRING value);
        }

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [exclusiveto(Windows.Networking.EndpointPair)]
        [uuid(B609D971-64E0-442B-AA6F-CC8C8F181F78)]
        interface IEndpointPairFactory : IInspectable
        {
            HRESULT CreateEndpointPair([in] Windows.Networking.HostName* localHostName, [in] HSTRING localServiceName, [in] Windows.Networking.HostName* remoteHostName, [in] HSTRING remoteServiceName, [out] [retval] Windows.Networking.EndpointPair** value);
        }

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [exclusiveto(Windows.Networking.HostName)]
        [uuid(BF8ECAAD-ED96-49A7-9084-D416CAE88DCB)]
        interface IHostName : IInspectable
        {
            [propget] HRESULT IPInformation([out] [retval] Windows.Networking.Connectivity.IPInformation** value);
            [propget] HRESULT RawName([out] [retval] HSTRING* value);
            [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
            [propget] HRESULT CanonicalName([out] [retval] HSTRING* value);
            [propget] HRESULT Type([out] [retval] Windows.Networking.HostNameType* value);
            HRESULT IsEqual([in] Windows.Networking.HostName* hostName, [out] [retval] boolean* isEqual);
        }

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [exclusiveto(Windows.Networking.HostName)]
        [uuid(458C23ED-712F-4576-ADF1-C20B2C643558)]
        interface IHostNameFactory : IInspectable
        {
            HRESULT CreateHostName([in] HSTRING hostName, [out] [retval] Windows.Networking.HostName** value);
        }

        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [exclusiveto(Windows.Networking.HostName)]
        [uuid(F68CD4BF-A388-4E8B-91EA-54DD6DD901C0)]
        interface IHostNameStatics : IInspectable
        {
            HRESULT Compare([in] HSTRING value1, [in] HSTRING value2, [out] [retval] INT32* result);
        }

        [activatable(Windows.Networking.IEndpointPairFactory, Windows.Foundation.UniversalApiContract, 1.0)]
        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [marshaling_behavior(agile)]
        [threading(both)]
        runtimeclass EndpointPair
        {
            [default] interface Windows.Networking.IEndpointPair;
        }

        [activatable(Windows.Networking.IHostNameFactory, Windows.Foundation.UniversalApiContract, 1.0)]
        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        [marshaling_behavior(agile)]
        [static(Windows.Networking.IHostNameStatics, Windows.Foundation.UniversalApiContract, 1.0)]
        [threading(both)]
        runtimeclass HostName
        {
            [default] interface Windows.Networking.IHostName;
            [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Foundation.IStringable;
        }
    }
}
