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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Enetworking_h__)")
cpp_quote("#include <Windows.Networking.h>")
cpp_quote("#endif // !defined(__windows2Enetworking_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        runtimeclass Uri;
    }
}
namespace Windows
{
    namespace Networking
    {
        runtimeclass EndpointPair;

        runtimeclass HostName;

        typedef enum HostNameSortOptions HostNameSortOptions;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Connectivity
        {
            typedef enum NetworkCostType NetworkCostType;

            typedef enum NetworkConnectivityLevel NetworkConnectivityLevel;

            typedef enum NetworkTypes NetworkTypes;

            typedef enum RoamingStates RoamingStates;

            typedef enum NetworkAuthenticationType NetworkAuthenticationType;

            typedef enum NetworkEncryptionType NetworkEncryptionType;

            delegate NetworkStatusChangedEventHandler;

            interface IDataUsage;

            interface IDataPlanUsage;

            interface IDataPlanStatus;

            interface IConnectionCost;

            interface INetworkSecuritySettings;

            interface IConnectionProfile;

            interface ILanIdentifierData;

            interface ILanIdentifier;

            interface INetworkInformationStatics;

            interface INetworkItem;

            interface INetworkAdapter;

            interface IIPInformation;

            interface IProxyConfiguration;

            runtimeclass IPInformation;

            runtimeclass DataPlanUsage;

            runtimeclass ConnectionCost;

            runtimeclass DataPlanStatus;

            runtimeclass NetworkAdapter;

            runtimeclass DataUsage;

            runtimeclass NetworkSecuritySettings;

            runtimeclass LanIdentifierData;

            runtimeclass ConnectionProfile;

            runtimeclass LanIdentifier;

            runtimeclass ProxyConfiguration;

            runtimeclass NetworkItem;

            runtimeclass NetworkInformation;
        }
    }
}

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

                interface Windows.Foundation.Collections.IIterable<Windows.Networking.Connectivity.LanIdentifier*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Networking.Connectivity.ConnectionProfile*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Networking.Connectivity.LanIdentifier*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectionProfile*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.LanIdentifier*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ConnectionProfile*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ProxyConfiguration*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Networking
    {
        namespace Connectivity
        {
            [version(0x06020000)]
            enum NetworkCostType
            {
                Unknown      = 0,
                Unrestricted = 1,
                Fixed        = 2,
                Variable     = 3
            };

            [version(0x06020000)]
            enum NetworkConnectivityLevel
            {
                None                      = 0,
                LocalAccess               = 1,
                ConstrainedInternetAccess = 2,
                InternetAccess            = 3
            };

            [flags]
            [version(0x06020000)]
            enum NetworkTypes
            {
                None           = 0x0,
                Internet       = 0x1,
                PrivateNetwork = 0x2
            };

            [version(0x06020000)]
            [flags]
            enum RoamingStates
            {
                None       = 0x0,
                NotRoaming = 0x1,
                Roaming    = 0x2
            };

            [version(0x06020000)]
            enum NetworkAuthenticationType
            {
                None           = 0,
                Unknown        = 1,
                Open80211      = 2,
                SharedKey80211 = 3,
                Wpa            = 4,
                WpaPsk         = 5,
                WpaNone        = 6,
                Rsna           = 7,
                RsnaPsk        = 8,
                Ihv            = 9
            };

            [version(0x06020000)]
            enum NetworkEncryptionType
            {
                None        = 0,
                Unknown     = 1,
                Wep         = 2,
                Wep40       = 3,
                Wep104      = 4,
                Tkip        = 5,
                Ccmp        = 6,
                WpaUseGroup = 7,
                RsnUseGroup = 8,
                Ihv         = 9
            };

            [uuid(71BA143F-598E-49D0-84EB-8FEBAEDCC195)]
            [version(0x06020000)]
            delegate
                HRESULT NetworkStatusChangedEventHandler([in] IInspectable* sender);

            [uuid(C1431DD3-B146-4D39-B959-0C69B096C512)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.DataUsage)]
            interface IDataUsage : IInspectable
            {
                [propget] HRESULT BytesSent([out] [retval] UINT64* value);
                [propget] HRESULT BytesReceived([out] [retval] UINT64* value);
            }

            [uuid(B921492D-3B44-47FF-B361-BE59E69ED1B0)]
            [exclusiveto(Windows.Networking.Connectivity.DataPlanUsage)]
            [version(0x06020000)]
            interface IDataPlanUsage : IInspectable
            {
                [propget] HRESULT MegabytesUsed([out] [retval] UINT32* value);
                [propget] HRESULT LastSyncTime([out] [retval] Windows.Foundation.DateTime* value);
            }

            [uuid(977A8B8C-3885-40F3-8851-42CD2BD568BB)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.DataPlanStatus)]
            interface IDataPlanStatus : IInspectable
            {
                [propget] HRESULT DataPlanUsage([out] [retval] Windows.Networking.Connectivity.DataPlanUsage** value);
                [propget] HRESULT DataLimitInMegabytes([out] [retval] Windows.Foundation.IReference<UINT32>** value);
                [propget] HRESULT InboundBitsPerSecond([out] [retval] Windows.Foundation.IReference<UINT64>** value);
                [propget] HRESULT OutboundBitsPerSecond([out] [retval] Windows.Foundation.IReference<UINT64>** value);
                [propget] HRESULT NextBillingCycle([out] [retval] Windows.Foundation.IReference<Windows.Foundation.DateTime>** value);
                [propget] HRESULT MaxTransferSizeInMegabytes([out] [retval] Windows.Foundation.IReference<UINT32>** value);
            }

            [uuid(BAD7D829-3416-4B10-A202-BAC0B075BDAE)]
            [exclusiveto(Windows.Networking.Connectivity.ConnectionCost)]
            [version(0x06020000)]
            interface IConnectionCost : IInspectable
            {
                [propget] HRESULT NetworkCostType([out] [retval] Windows.Networking.Connectivity.NetworkCostType* value);
                [propget] HRESULT Roaming([out] [retval] boolean* value);
                [propget] HRESULT OverDataLimit([out] [retval] boolean* value);
                [propget] HRESULT ApproachingDataLimit([out] [retval] boolean* value);
            }

            [uuid(7CA07E8D-917B-4B5F-B84D-28F7A5AC5402)]
            [exclusiveto(Windows.Networking.Connectivity.NetworkSecuritySettings)]
            [version(0x06020000)]
            interface INetworkSecuritySettings : IInspectable
            {
                [propget] HRESULT NetworkAuthenticationType([out] [retval] Windows.Networking.Connectivity.NetworkAuthenticationType* value);
                [propget] HRESULT NetworkEncryptionType([out] [retval] Windows.Networking.Connectivity.NetworkEncryptionType* value);
            }

            [uuid(71BA143C-598E-49D0-84EB-8FEBAEDCC195)]
            [exclusiveto(Windows.Networking.Connectivity.ConnectionProfile)]
            [version(0x06020000)]
            interface IConnectionProfile : IInspectable
            {
                [propget] HRESULT ProfileName([out] [retval] HSTRING* value);
                HRESULT GetNetworkConnectivityLevel([out] [retval] Windows.Networking.Connectivity.NetworkConnectivityLevel* value);
                HRESULT GetNetworkNames([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                HRESULT GetConnectionCost([out] [retval] Windows.Networking.Connectivity.ConnectionCost** value);
                HRESULT GetDataPlanStatus([out] [retval] Windows.Networking.Connectivity.DataPlanStatus** value);
                [propget] HRESULT NetworkAdapter([out] [retval] Windows.Networking.Connectivity.NetworkAdapter** value);
                [overload("GetLocalUsage")] HRESULT GetLocalUsage([in] Windows.Foundation.DateTime StartTime, [in] Windows.Foundation.DateTime EndTime, [out] [retval] Windows.Networking.Connectivity.DataUsage** value);
                [overload("GetLocalUsage")] HRESULT GetLocalUsagePerRoamingStates([in] Windows.Foundation.DateTime StartTime, [in] Windows.Foundation.DateTime EndTime, [in] Windows.Networking.Connectivity.RoamingStates States, [out] [retval] Windows.Networking.Connectivity.DataUsage** value);
                [propget] HRESULT NetworkSecuritySettings([out] [retval] Windows.Networking.Connectivity.NetworkSecuritySettings** value);
            }

            [uuid(A74E83C3-D639-45BE-A36A-C4E4AEAF6D9B)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.LanIdentifierData)]
            interface ILanIdentifierData : IInspectable
            {
                [propget] HRESULT Type([out] [retval] UINT32* value);
                [propget] HRESULT Value([out] [retval] Windows.Foundation.Collections.IVectorView<BYTE>** value);
            }

            [uuid(48AA53AA-1108-4546-A6CB-9A74DA4B7BA0)]
            [exclusiveto(Windows.Networking.Connectivity.LanIdentifier)]
            [version(0x06020000)]
            interface ILanIdentifier : IInspectable
            {
                [propget] HRESULT InfrastructureId([out] [retval] Windows.Networking.Connectivity.LanIdentifierData** value);
                [propget] HRESULT PortId([out] [retval] Windows.Networking.Connectivity.LanIdentifierData** value);
                [propget] HRESULT NetworkAdapterId([out] [retval] GUID* value);
            }

            [uuid(5074F851-950D-4165-9C15-365619481EEA)]
            [exclusiveto(Windows.Networking.Connectivity.NetworkInformation)]
            [version(0x06020000)]
            interface INetworkInformationStatics : IInspectable
            {
                HRESULT GetConnectionProfiles([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectionProfile*>** value);
                HRESULT GetInternetConnectionProfile([out] [retval] Windows.Networking.Connectivity.ConnectionProfile** value);
                HRESULT GetLanIdentifiers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.LanIdentifier*>** value);
                HRESULT GetHostNames([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Networking.HostName*>** value);
                HRESULT GetProxyConfigurationAsync([in] Windows.Foundation.Uri* uri, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ProxyConfiguration*>** value);
                HRESULT GetSortedEndpointPairs([in] Windows.Foundation.Collections.IIterable<Windows.Networking.EndpointPair*>* destinationList, [in] Windows.Networking.HostNameSortOptions sortOptions, [out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair*>** value);
                [eventadd] HRESULT NetworkStatusChanged([in] Windows.Networking.Connectivity.NetworkStatusChangedEventHandler* networkStatusHandler, [out] [retval] EventRegistrationToken* eventCookie);
                [eventremove] HRESULT NetworkStatusChanged([in] EventRegistrationToken eventCookie);
            }

            [uuid(01BC4D39-F5E0-4567-A28C-42080C831B2B)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.NetworkItem)]
            interface INetworkItem : IInspectable
            {
                [propget] HRESULT NetworkId([out] [retval] GUID* value);
                HRESULT GetNetworkTypes([out] [retval] Windows.Networking.Connectivity.NetworkTypes* value);
            }

            [uuid(3B542E03-5388-496C-A8A3-AFFD39AEC2E6)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.NetworkAdapter)]
            interface INetworkAdapter : IInspectable
            {
                [propget] HRESULT OutboundMaxBitsPerSecond([out] [retval] UINT64* value);
                [propget] HRESULT InboundMaxBitsPerSecond([out] [retval] UINT64* value);
                [propget] HRESULT IanaInterfaceType([out] [retval] UINT32* value);
                [propget] HRESULT NetworkItem([out] [retval] Windows.Networking.Connectivity.NetworkItem** value);
                [propget] HRESULT NetworkAdapterId([out] [retval] GUID* value);
                HRESULT GetConnectedProfileAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ConnectionProfile*>** value);
            }

            [uuid(D85145E0-138F-47D7-9B3A-36BB488CEF33)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.Connectivity.IPInformation)]
            interface IIPInformation : IInspectable
            {
                [propget] HRESULT NetworkAdapter([out] [retval] Windows.Networking.Connectivity.NetworkAdapter** value);
                [propget] HRESULT PrefixLength([out] [retval] Windows.Foundation.IReference<BYTE>** value);
            }

            [uuid(EF3A60B4-9004-4DD6-B7D8-B3E502F4AAD0)]
            [exclusiveto(Windows.Networking.Connectivity.ProxyConfiguration)]
            [version(0x06020000)]
            interface IProxyConfiguration : IInspectable
            {
                [propget] HRESULT ProxyUris([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Foundation.Uri*>** value);
                [propget] HRESULT CanConnectDirectly([out] [retval] boolean* value);
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass IPInformation
            {
                [default] interface Windows.Networking.Connectivity.IIPInformation;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DataPlanUsage
            {
                [default] interface Windows.Networking.Connectivity.IDataPlanUsage;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass ConnectionCost
            {
                [default] interface Windows.Networking.Connectivity.IConnectionCost;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DataPlanStatus
            {
                [default] interface Windows.Networking.Connectivity.IDataPlanStatus;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass NetworkAdapter
            {
                [default] interface Windows.Networking.Connectivity.INetworkAdapter;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DataUsage
            {
                [default] interface Windows.Networking.Connectivity.IDataUsage;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass NetworkSecuritySettings
            {
                [default] interface Windows.Networking.Connectivity.INetworkSecuritySettings;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass LanIdentifierData
            {
                [default] interface Windows.Networking.Connectivity.ILanIdentifierData;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass ConnectionProfile
            {
                [default] interface Windows.Networking.Connectivity.IConnectionProfile;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass LanIdentifier
            {
                [default] interface Windows.Networking.Connectivity.ILanIdentifier;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass ProxyConfiguration
            {
                [default] interface Windows.Networking.Connectivity.IProxyConfiguration;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass NetworkItem
            {
                [default] interface Windows.Networking.Connectivity.INetworkItem;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [static(Windows.Networking.Connectivity.INetworkInformationStatics, 0x06020000)]
            runtimeclass NetworkInformation
            {
            }
        }
    }
}
