//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992-1999.
//
//  File: netshell.idl
//
//----------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1992-1999.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

cpp_quote("#if ( _MSC_VER >= 800 )")
cpp_quote("#pragma warning(disable:4201)")
cpp_quote("#endif")

#ifndef DO_NO_IMPORTS
import "shlobj.idl";
import "oleidl.idl";
import "docobj.idl";
import "netcfgx.idl";
import "oaidl.idl";
#endif

// We want to be a proxy/stub DLL for all of the interfaces in
// the following IDL files.  Therefore we #include them instead of importing
// them.
//
#include "netcon.idl"
#define DO_NO_IMPORTS
#include "netcfgp.idl"
#include "netconp.idl"

// Reserved GUIDS for our use
//
// 1355C840-9F50-11D1-A927-00805FC1270E     <available>
// 1355C841-9F50-11D1-A927-00805FC1270E     IID_INetConnectionStatisticsNotifySink
// 1355C842-9F50-11D1-A927-00805FC1270E     IID_INetStatisticsEngine
// 1355C843-9F50-11D1-A927-00805FC1270E
// 1355C844-9F50-11D1-A927-00805FC1270E
// 1355C845-9F50-11D1-A927-00805FC1270E
// ...
// 1355C8FD-9F50-11D1-A927-00805FC1270E
// 1355C8FE-9F50-11D1-A927-00805FC1270E
// 1355C8FF-9F50-11D1-A927-00805FC1270E

interface INetConnectionStatisticsNotifySink;
interface INetStatisticsEngine;


//+---------------------------------------------------------------------------
// Connection Statistics Notify Sink
//
[
    local,
    object,
    uuid(1355C841-9F50-11D1-A927-00805FC1270E),
    pointer_default(unique)
]
interface INetConnectionStatisticsNotifySink : IUnknown
{
    typedef enum tagSTATMON_DATACHANGEDFLAGS
    {
        SMDCF_NULL          = 0x00000000,
        SMDCF_TRANSMITTING  = 0x40000000,
        SMDCF_RECEIVING     = 0x80000000,
    } STATMON_DATACHANGEDFLAGS;

    HRESULT OnStatisticsChanged(
        [in] DWORD dwChangeFlags);
};

//+---------------------------------------------------------------------------
// Network Statistics Engine
//
[
    local,
    object,
    uuid(1355C842-9F50-11D1-A927-00805FC1270E),
    pointer_default(unique)
]
interface INetStatisticsEngine : IUnknown
{

    typedef enum _DHCP_ADDRESS_TYPE 
    {
        UNKNOWN_ADDR,
        NORMAL_ADDR,
        AUTONET_ADDR,
        ALTERNATE_ADDR,
        STATIC_ADDR
    } DHCP_ADDRESS_TYPE;

    typedef enum _INFRASTRUCTURE_MODE 
    {
        IM_NOT_SUPPORTED,
        IM_NDIS802_11IBSS,
        IM_NDIS802_11INFRASTRUCTURE,
        IM_NDIS802_11AUTOUNKNOWN,
    } INFRASTRUCTURE_MODE;

    typedef struct tagSTATMON_ENGINEDATA
    {
        UINT    SMED_CONNECTIONSTATUS;
        UINT    SMED_DURATION;
        UINT    SMED_SPEEDTRANSMITTING;
        UINT    SMED_SPEEDRECEIVING;
        UINT64  SMED_BYTESTRANSMITTING;
        UINT64  SMED_BYTESRECEIVING;
        UINT    SMED_COMPRESSIONTRANSMITTING;
        UINT    SMED_COMPRESSIONRECEIVING;
        UINT    SMED_ERRORSTRANSMITTING;
        UINT    SMED_ERRORSRECEIVING;
        UINT64  SMED_PACKETSTRANSMITTING;
        UINT64  SMED_PACKETSRECEIVING;

        UINT64  SMED_SALOCAL_BYTESTRANSMITTING;
        UINT64  SMED_SALOCAL_BYTESRECEIVING;
        UINT64  SMED_SALOCAL_PACKETSTRANSMITTING;
        UINT64  SMED_SALOCAL_PACKETSRECEIVING;

        DHCP_ADDRESS_TYPE SMED_DHCP_ADDRESS_TYPE;
        INFRASTRUCTURE_MODE SMED_INFRASTRUCTURE_MODE;

        UINT    SMED_802_11_ENCRYPTION_ENABLED;
        INT     SMED_802_11_SIGNAL_STRENGTH;
        WCHAR   SMED_802_11_SSID[33];

    } STATMON_ENGINEDATA;


    HRESULT StartStatistics();
    HRESULT StopStatistics();
    HRESULT ShowStatusMonitor();
    HRESULT CloseStatusMonitor();

    HRESULT UpdateStatistics (
        [out] BOOL* pfNoLongerConnected);

    HRESULT UpdateTitle (
        [in] LPCWSTR pszwNewName);

    HRESULT UpdateRasLinkList ();

    HRESULT GetGuidId(
        [out] GUID* pguidId);

    HRESULT GetStatistics (
        [out] STATMON_ENGINEDATA** ppseAllData);
};