/*
 * Copyright (C) 2021 Alistair Leslie-Hughes
 * Copyright (C) 2023 Mohamad Al-Jaf
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifdef __WIDL__
#pragma winrt ns_prefix
#endif

import "inspectable.idl";
import "asyncinfo.idl";
import "eventtoken.idl";
import "windowscontracts.idl";
import "windows.foundation.idl";
import "windows.networking.idl";
import "windows.storage.streams.idl";

namespace Windows.Foundation
{
    interface IClosable;

    runtimeclass Uri;
}

namespace Windows.Networking
{
    typedef enum DomainNameType DomainNameType;
    typedef enum HostNameSortOptions HostNameSortOptions;

    runtimeclass EndpointPair;
    runtimeclass HostName;
}

namespace Windows.Networking.Connectivity
{
    runtimeclass ConnectionCost;
    runtimeclass ConnectionProfile;
    runtimeclass DataPlanStatus;
    runtimeclass DataPlanUsage;
    runtimeclass DataUsage;
    runtimeclass IPInformation;
    runtimeclass LanIdentifier;
    runtimeclass LanIdentifierData;
    runtimeclass NetworkAdapter;
    runtimeclass NetworkInformation;
    runtimeclass NetworkItem;
    runtimeclass NetworkSecuritySettings;
    runtimeclass ProxyConfiguration;
    runtimeclass WwanConnectionProfileDetails;
    runtimeclass WlanConnectionProfileDetails;
    runtimeclass NetworkUsage;
    runtimeclass ConnectivityInterval;

    typedef enum NetworkAuthenticationType NetworkAuthenticationType;
    typedef enum NetworkConnectivityLevel NetworkConnectivityLevel;
    typedef enum NetworkCostType NetworkCostType;
    typedef enum NetworkEncryptionType NetworkEncryptionType;
    typedef enum NetworkTypes NetworkTypes;
    typedef enum RoamingStates RoamingStates;
    typedef enum DomainConnectivityLevel DomainConnectivityLevel;
    typedef enum DataUsageGranularity DataUsageGranularity;
    typedef enum TriStates TriStates;
    typedef enum WwanNetworkRegistrationState WwanNetworkRegistrationState;
    typedef enum WwanDataClass WwanDataClass;

    typedef struct NetworkUsageStates NetworkUsageStates;

    declare
    {
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Networking.Connectivity.ConnectionProfile *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Networking.Connectivity.ProxyConfiguration *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ConnectionProfile *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Networking.Connectivity.ProxyConfiguration *>;
        interface Windows.Foundation.Collections.IIterable<Windows.Networking.EndpointPair *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectionProfile *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.LanIdentifier *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.HostName *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>;
        interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>;
        interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*>;
    }

    [
        contractversion(2.0),
    ]
    apicontract WwanContract
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum NetworkAuthenticationType
    {
        None            = 0,
        Unknown         = 1,
        Open80211       = 2,
        SharedKey80211  = 3,
        Wpa             = 4,
        WpaPsk          = 5,
        WpaNone         = 6,
        Rsna            = 7,
        RsnaPsk         = 8,
        Ihv             = 9,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum NetworkConnectivityLevel
    {
        None                        = 0,
        LocalAccess                 = 1,
        ConstrainedInternetAccess   = 2,
        InternetAccess              = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum NetworkCostType
    {
        Unknown         = 0,
        Unrestricted    = 1,
        Fixed           = 2,
        Variable        = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum NetworkEncryptionType
    {
        None        = 0,
        Unknown     = 1,
        Wep         = 2,
        Wep40       = 3,
        Wep104      = 4,
        Tkip        = 5,
        Ccmp        = 6,
        WpaUseGroup = 7,
        RsnUseGroup = 8,
        Ihv         = 9,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        flags,
    ]
    enum NetworkTypes
    {
        None            = 0x0,
        Internet        = 0x1,
        PrivateNetwork  = 0x2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        flags,
    ]
    enum RoamingStates
    {
        None        = 0x0,
        NotRoaming  = 0x1,
        Roaming     = 0x2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum DomainConnectivityLevel
    {
        None            = 0,
        Unauthenticated = 1,
        Authenticated   = 2
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum DataUsageGranularity
    {
        PerMinute = 0,
        PerHour   = 1,
        PerDay    = 2,
        Total     = 3
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    enum TriStates
    {
        DoNotCare = 0,
        No        = 1,
        Yes       = 2
    };

    [
        contract(Windows.Networking.Connectivity.WwanContract, 1.0),
    ]
    enum WwanNetworkRegistrationState
    {
        None         = 0,
        Deregistered = 1,
        Searching    = 2,
        Home         = 3,
        Roaming      = 4,
        Partner      = 5,
        Denied       = 6
    };

    [
        contract(Windows.Networking.Connectivity.WwanContract, 1.0),
        flags,
    ]
    enum WwanDataClass
    {
        None           = 0x0,
        Gprs           = 0x1,
        Edge           = 0x2,
        Umts           = 0x4,
        Hsdpa          = 0x8,
        Hsupa          = 0x10,
        LteAdvanced    = 0x20,
        Cdma1xRtt      = 0x10000,
        Cdma1xEvdo     = 0x20000,
        Cdma1xEvdoRevA = 0x40000,
        Cdma1xEvdv     = 0x80000,
        Cdma3xRtt      = 0x100000,
        Cdma1xEvdoRevB = 0x200000,
        CdmaUmb        = 0x400000,
        Custom         = 0x80000000
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
    ]
    struct NetworkUsageStates
    {
        Windows.Networking.Connectivity.TriStates Roaming;
        Windows.Networking.Connectivity.TriStates Shared;
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(71ba143f-598e-49d0-84eb-8febaedcc195),
    ]
    delegate HRESULT NetworkStatusChangedEventHandler([in] IInspectable *sender);

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.ConnectionCost),
        uuid(bad7d829-3416-4b10-a202-bac0b075bdae),
    ]
    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);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.ConnectionProfile),
        uuid(71ba143c-598e-49d0-84eb-8febaedcc195),
    ]
    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);
        HRESULT GetLocalUsage([in] Windows.Foundation.DateTime start, [in] Windows.Foundation.DateTime end,
                [out, retval] Windows.Networking.Connectivity.DataUsage **value);
        HRESULT GetLocalUsagePerRoamingStates([in] Windows.Foundation.DateTime start,
                [in] Windows.Foundation.DateTime end, [in] Windows.Networking.Connectivity.RoamingStates states,
                [out, retval] Windows.Networking.Connectivity.DataUsage **value);
        [propget] HRESULT NetworkSecuritySettings([out, retval] Windows.Networking.Connectivity.NetworkSecuritySettings **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.ConnectionProfile),
        uuid(e2045145-4c9f-400c-9150-7ec7d6e2888a),
    ]
    interface IConnectionProfile2 : IInspectable
    {
        [propget] HRESULT IsWwanConnectionProfile([out, retval] boolean *value);
        [propget] HRESULT IsWlanConnectionProfile([out, retval] boolean *value);
        [propget] HRESULT WwanConnectionProfileDetails([out, retval] Windows.Networking.Connectivity.WwanConnectionProfileDetails **value);
        [propget] HRESULT WlanConnectionProfileDetails([out, retval] Windows.Networking.Connectivity.WlanConnectionProfileDetails **value);
        [propget] HRESULT ServiceProviderGuid([out, retval] Windows.Foundation.IReference<GUID> **value);
        HRESULT GetSignalBars([out, retval] Windows.Foundation.IReference<BYTE> **value);
        HRESULT GetDomainConnectivityLevel([out, retval] Windows.Networking.Connectivity.DomainConnectivityLevel *value);
        HRESULT GetNetworkUsageAsync([in] Windows.Foundation.DateTime time_start, [in] Windows.Foundation.DateTime time_end,
                [in] Windows.Networking.Connectivity.DataUsageGranularity granularity, [in] Windows.Networking.Connectivity.NetworkUsageStates states,
                [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*> **value);
        HRESULT GetConnectivityIntervalsAsync([in] Windows.Foundation.DateTime time_start, [in] Windows.Foundation.DateTime time_end,
                [in] Windows.Networking.Connectivity.NetworkUsageStates states,
                [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*> **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.DataPlanStatus),
        uuid(977a8b8c-3885-40f3-8851-42cd2bd568bb),
    ]
    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);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.DataPlanUsage),
        uuid(b921492d-3b44-47ff-b361-be59e69ed1b0),
    ]
    interface IDataPlanUsage : IInspectable
    {
        [propget] HRESULT MegabytesUsed([out, retval] UINT32 *value);
        [propget] HRESULT LastSyncTime([out, retval] Windows.Foundation.DateTime *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.DataUsage),
        uuid(c1431dd3-b146-4d39-b959-0c69b096c512),
    ]
    interface IDataUsage : IInspectable
    {
        [propget] HRESULT BytesSent([out, retval] UINT64 *value);
        [propget] HRESULT BytesReceived([out, retval] UINT64 *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.IPInformation),
        uuid(d85145e0-138f-47d7-9b3a-36bb488cef33),
    ]
    interface IIPInformation : IInspectable
    {
        [propget] HRESULT NetworkAdapter([out, retval] Windows.Networking.Connectivity.NetworkAdapter **value);
        [propget] HRESULT PrefixLength([out, retval] Windows.Foundation.IReference<BYTE> **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.LanIdentifier),
        uuid(48aa53aa-1108-4546-a6cb-9a74da4b7ba0),
    ]
    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);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.LanIdentifierData),
        uuid(a74e83c3-d639-45be-a36a-c4e4aeaf6d9b),
    ]
    interface ILanIdentifierData : IInspectable
    {
        [propget] HRESULT Type([out, retval] UINT32 *value);
        [propget] HRESULT Value([out,retval] Windows.Foundation.Collections.IVectorView<BYTE> **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.NetworkAdapter),
        uuid(3b542e03-5388-496c-a8a3-affd39aec2e6),
    ]
    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);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.NetworkInformation),
        uuid(5074f851-950d-4165-9c15-365619481eea),
    ]
    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 *> *endpoint,
                [in] Windows.Networking.HostNameSortOptions options,
                [out, retval] Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair *> **value);
        [eventadd] HRESULT NetworkStatusChanged([in] Windows.Networking.Connectivity.NetworkStatusChangedEventHandler *handler,
                        [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT NetworkStatusChanged([in] EventRegistrationToken cookie);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.NetworkItem),
        uuid(01bc4d39-f5e0-4567-a28c-42080c831b2b),
    ]
    interface INetworkItem : IInspectable
    {
        [propget] HRESULT NetworkId([out, retval] GUID *value);
        HRESULT GetNetworkTypes([out, retval] NetworkTypes *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.NetworkSecuritySettings),
        uuid(7ca07e8d-917b-4b5f-b84d-28f7a5ac5402),
    ]
    interface INetworkSecuritySettings : IInspectable
    {
        [propget] HRESULT NetworkAuthenticationType([out, retval] Windows.Networking.Connectivity.NetworkAuthenticationType *value);
        [propget] HRESULT NetworkEncryptionType([out, retval] Windows.Networking.Connectivity.NetworkEncryptionType *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.ProxyConfiguration),
        uuid(ef3a60b4-9004-4dd6-b7d8-b3e502f4aad0),
    ]
    interface IProxyConfiguration : IInspectable
    {
        [propget] HRESULT ProxyUris([out, retval] Windows.Foundation.Collections.IVectorView<Windows.Foundation.Uri *> **value);
        [propget] HRESULT CanConnectDirectly([out, retval] boolean *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.NetworkUsage),
        uuid(49da8fce-9985-4927-bf5b-072b5c65f8d9),
    ]
    interface INetworkUsage : IInspectable
    {
        [propget] HRESULT BytesSent([out, retval] UINT64 *value);
        [propget] HRESULT BytesReceived([out, retval] UINT64 *value);
        [propget] HRESULT ConnectionDuration([out, retval] Windows.Foundation.TimeSpan *duration);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.ConnectivityInterval),
        uuid(4faa3fff-6746-4824-a964-eed8e87f8709),
    ]
    interface IConnectivityInterval : IInspectable
    {
        [propget] HRESULT StartTime([out, retval] Windows.Foundation.DateTime *time_start);
        [propget] HRESULT ConnectionDuration([out, retval] Windows.Foundation.TimeSpan *duration);
    }

    [
        contract(Windows.Networking.Connectivity.WwanContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.WwanConnectionProfileDetails),
        uuid(0e4da8fe-835f-4df3-82fd-df556ebc09ef),
    ]
    interface IWwanConnectionProfileDetails : IInspectable
    {
        [propget] HRESULT HomeProviderId([out, retval] HSTRING *value);
        [propget] HRESULT AccessPointName([out, retval] HSTRING *value);
        HRESULT GetNetworkRegistrationState([out, retval] Windows.Networking.Connectivity.WwanNetworkRegistrationState *value);
        HRESULT GetCurrentDataClass([out, retval] Windows.Networking.Connectivity.WwanDataClass *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Networking.Connectivity.WlanConnectionProfileDetails),
        uuid(562098cb-b35a-4bf1-a884-b7557e88ff86),
    ]
    interface IWlanConnectionProfileDetails : IInspectable
    {
        HRESULT GetConnectedSsid([out] [retval] HSTRING *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass ConnectionCost
    {
        [default] interface Windows.Networking.Connectivity.IConnectionCost;
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Networking.Connectivity.IConnectionCost2; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass ConnectionProfile
    {
        [default] interface Windows.Networking.Connectivity.IConnectionProfile;
        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Networking.Connectivity.IConnectionProfile2;
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Networking.Connectivity.IConnectionProfile3; */
        /* [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.Networking.Connectivity.IConnectionProfile4; */
        /* [contract(Windows.Foundation.UniversalApiContract, 7.0)] interface Windows.Networking.Connectivity.IConnectionProfile5; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass DataPlanStatus
    {
        [default] interface Windows.Networking.Connectivity.IDataPlanStatus;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass DataPlanUsage
    {
        [default] interface Windows.Networking.Connectivity.IDataPlanUsage;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass DataUsage
    {
        [default] interface Windows.Networking.Connectivity.IDataUsage;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass IPInformation
    {
        [default] interface Windows.Networking.Connectivity.IIPInformation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass LanIdentifier
    {
        [default] interface Windows.Networking.Connectivity.ILanIdentifier;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass LanIdentifierData
    {
        [default] interface Windows.Networking.Connectivity.ILanIdentifierData;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass NetworkAdapter
    {
        [default] interface Windows.Networking.Connectivity.INetworkAdapter;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
        static(Windows.Networking.Connectivity.INetworkInformationStatics, Windows.Foundation.UniversalApiContract, 1.0),
    ]
    runtimeclass NetworkInformation
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass NetworkItem
    {
        [default] interface Windows.Networking.Connectivity.INetworkItem;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass NetworkSecuritySettings
    {
        [default] interface Windows.Networking.Connectivity.INetworkSecuritySettings;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass ProxyConfiguration
    {
        [default] interface Windows.Networking.Connectivity.IProxyConfiguration;
    }

    [
        contract(Windows.Networking.Connectivity.WwanContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass WwanConnectionProfileDetails
    {
        [default] interface Windows.Networking.Connectivity.IWwanConnectionProfileDetails;
        /* [contract(Windows.Networking.Connectivity.WwanContract, 2.0)] interface Windows.Networking.Connectivity.IWwanConnectionProfileDetails2; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass WlanConnectionProfileDetails
    {
        [default] interface Windows.Networking.Connectivity.IWlanConnectionProfileDetails;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass NetworkUsage
    {
        [default] interface Windows.Networking.Connectivity.INetworkUsage;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
    ]
    runtimeclass ConnectivityInterval
    {
        [default] interface Windows.Networking.Connectivity.IConnectivityInterval;
    }
}
