//
// Copyright (c) Microsoft Corporation. All rights reserved.

cpp_quote("/* Copyright (c) Microsoft Corporation. All rights reserved. */")

// sdpblb.idl : IDL source for sdpblb.dll
//

midl_pragma warning( disable: 2039 )

// This file will be processed by the MIDL tool to
// produce the type library (sdpblb.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

// Media and conference blob object Interfaces
const DISPID  IDISPCONFBLOB             = 0x00010000;
const DISPID  IDISPSDP                  = 0x00020000;
const DISPID  IDISPCONNECTION           = 0x00030000;
const DISPID  IDISPATTRLIST             = 0x00040000;
const DISPID  IDISPMEDIA                = 0x00050000;

typedef enum BLOB_CHARACTER_SET
{
    BCS_ASCII   = 1,
    BCS_UTF7    = 2,
    BCS_UTF8    = 3
} BLOB_CHARACTER_SET;


[
    object,
    uuid(C259D7AA-C8AB-11D0-8D58-00C04FD91AC0),
    dual,
    helpstring("ITConferenceBlob Interface"),
    pointer_default(unique)
]
interface ITConferenceBlob : IDispatch
{
    [id(IDISPCONFBLOB | 1), helpstring("method Init")] 
    HRESULT Init(
            [in] BSTR pName, 
            [in] BLOB_CHARACTER_SET CharacterSet, 
            [in] BSTR pBlob);
    
    [propget, id(IDISPCONFBLOB | 2), helpstring("property CharacterSet")] 
    HRESULT CharacterSet([out, retval] BLOB_CHARACTER_SET *pCharacterSet);
    
    [propget, id(IDISPCONFBLOB | 3), helpstring("property ConferenceBlob")] 
    HRESULT ConferenceBlob([out, retval] BSTR *ppBlob);
    
    [id(IDISPCONFBLOB | 4), helpstring("method ConferenceBlob")] 
    HRESULT SetConferenceBlob(
        [in] BLOB_CHARACTER_SET CharacterSet, 
        [in] BSTR pBlob);
};



[
    object,
    uuid(0CC1F053-CAEB-11D0-8D58-00C04FD91AC0),
    dual,
    helpstring("ITMedia Interface"),
    pointer_default(unique)
]
interface ITMedia : IDispatch
{
    [propget, id(IDISPMEDIA | 1), helpstring("property MediaName")] 
    HRESULT MediaName([out, retval] BSTR *ppMediaName);
    
    [propput, id(IDISPMEDIA | 1), helpstring("property MediaName")]
    HRESULT MediaName([in] BSTR pMediaName);

    [propget, id(IDISPMEDIA | 2), helpstring("property StartPort")] 
    HRESULT StartPort([out, retval] LONG *pStartPort);

    [propget, id(IDISPMEDIA | 3), helpstring("property NumPorts")] 
    HRESULT NumPorts([out, retval] LONG *pNumPorts);

    [propget, id(IDISPMEDIA | 4), helpstring("property TransportProtocol")] 
    HRESULT TransportProtocol([out, retval] BSTR *ppProtocol);

    [propput, id(IDISPMEDIA | 4), helpstring("property TransportProtocol")] 
    HRESULT TransportProtocol([in] BSTR pProtocol);

    [propget, id(IDISPMEDIA | 5), helpstring("property FormatCodes")] 
    HRESULT FormatCodes([out, retval] VARIANT /*SAFEARRAY (BSTR)*/ *pVal);

    [propput, id(IDISPMEDIA | 5), helpstring("property FormatCodes")] 
    HRESULT FormatCodes([in] VARIANT /*SAFEARRAY (BSTR)*/ NewVal);

    [propget, id(IDISPMEDIA | 6), helpstring("property MediaTitle")] 
    HRESULT MediaTitle([out, retval] BSTR *ppMediaTitle);

    [propput, id(IDISPMEDIA | 6), helpstring("property MediaTitle")] 
    HRESULT MediaTitle([in] BSTR pMediaTitle);

    [id(IDISPMEDIA | 7), helpstring("method SetPortInfo")] 
    HRESULT SetPortInfo([in] LONG StartPort, [in] LONG NumPorts);
};


[
    object,
    uuid(CA8397BE-2FA4-11D1-9774-00C04FD91AC0),
    helpstring("IEnumMedia interface"),
    pointer_default(unique),
    hidden
]
interface IEnumMedia : IUnknown
{
    HRESULT Next(
            [in]  ULONG celt,
            [out] ITMedia **pVal,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumMedia ** ppEnum
            );
};


[
    object,
    uuid(6A8E16A2-0ABC-11D1-976D-00C04FD91AC0),
    dual,
    helpstring("ITMediaCollection Interface"),
    pointer_default(unique)
]
interface ITMediaCollection : IDispatch
{
    [propget, helpstring("returns number of items in collection")] 
    HRESULT Count(
        [out, retval] LONG *pVal
        );

    [propget, id(DISPID_VALUE), 
        helpstring("Given an index, returns an item in the collection.")] 
    HRESULT Item(
        [in] LONG Index, 
        [out, retval] ITMedia **pVal
        );

    [propget, restricted, id(DISPID_NEWENUM), 
        helpstring("returns an enumerator for the collection.")] 
    HRESULT _NewEnum(
        [out, retval] IUnknown **pVal
        );

    [propget, restricted, id(1), helpstring("returns the IEnumMedia enumeration interface that enumerates ITMedia")] 
    HRESULT EnumerationIf(
        [out, retval] IEnumMedia **pVal
        );

    [id(2), helpstring("method CreateMedia")] 
    HRESULT Create([in] LONG Index, [out, retval] ITMedia **ppMedia);

    [id(3), helpstring("method DeleteMedia")] 
    HRESULT Delete([in] LONG Index);
};


[
    object,
    uuid(2652BB78-1516-11D1-9771-00C04FD91AC0),
    dual,
    helpstring("ITTime Interface"),
    pointer_default(unique)
]
interface ITTime : IDispatch
{
    [propget, id(1), helpstring("property StartTime")] 
    HRESULT StartTime([out, retval] DOUBLE *pTime);

    [propput, id(1), helpstring("property StartTime")] 
    HRESULT StartTime([in] DOUBLE Time);

    [propget, id(2), helpstring("property StopTime")] 
    HRESULT StopTime([out, retval] DOUBLE *pTime);

    [propput, id(2), helpstring("property StopTime")] 
    HRESULT StopTime([in] DOUBLE Time);
};



[
    object,
    uuid(9055322E-2FA8-11D1-9774-00C04FD91AC0),
    helpstring("IEnumTime interface"),
    pointer_default(unique),
    hidden
]
interface IEnumTime : IUnknown
{
    HRESULT Next(
            [in]  ULONG celt,
            [out] ITTime **pVal,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumTime **ppEnum
            );
};


[
    object,
    uuid(0CC1F04F-CAEB-11D0-8D58-00C04FD91AC0),
    dual,
    helpstring("ITTimeCollection Interface"),
    pointer_default(unique)
]
interface ITTimeCollection : IDispatch
{
    [propget, helpstring("returns number of items in collection")] 
    HRESULT Count(
        [out, retval] LONG *pVal
        );

    [propget, id(DISPID_VALUE), 
        helpstring("Given an index, returns an item in the collection.")] 
    HRESULT Item(
        [in] LONG Index, 
        [out, retval] ITTime **pVal
        );

    [propget, restricted, id(DISPID_NEWENUM), 
        helpstring("returns an enumerator for the collection.")] 
    HRESULT _NewEnum(
        [out, retval] IUnknown **pVal
        );

    [propget, restricted, id(1), helpstring("returns the IEnumTime enumeration interface that enumerates ITTime")] 
    HRESULT EnumerationIf(
        [out, retval] IEnumTime **pVal
        );

    [id(2), helpstring("method CreateTime")] 
    HRESULT Create([in] LONG Index, [out, retval] ITTime **ppTime);

    [id(3), helpstring("method DeleteTime")] 
    HRESULT Delete([in] LONG Index);
};


[
    object,
    uuid(9B2719D8-B696-11D0-A489-00C04FD91AC0),
    dual,
    helpstring("ITSdp Interface"),
    pointer_default(unique)
]
interface ITSdp : IDispatch
{
    [propget, id(IDISPSDP | 1), helpstring("property IsValid")] 
    HRESULT IsValid([out, retval] VARIANT_BOOL *pfIsValid);

    [propget, id(IDISPSDP | 2), helpstring("property ProtocolVersion")] 
    HRESULT ProtocolVersion([out, retval] unsigned char *pProtocolVersion);

    [propget, id(IDISPSDP | 3), helpstring("property SessionId")] 
    HRESULT SessionId([out, retval] DOUBLE *pSessionId);

    [propget, id(IDISPSDP | 4), helpstring("property SessionVersion")] 
    HRESULT SessionVersion([out, retval] DOUBLE *pSessionVersion);

    [propput, id(IDISPSDP | 4), helpstring("property SessionVersion")] 
    HRESULT SessionVersion([in] DOUBLE SessionVersion);

    [propget, id(IDISPSDP | 5), helpstring("property MachineAddress")] 
    HRESULT MachineAddress([out, retval] BSTR *ppMachineAddress);

    [propput, id(IDISPSDP | 5), helpstring("property MachineAddress")] 
    HRESULT MachineAddress([in] BSTR pMachineAddress);

    [propget, id(IDISPSDP | 6), helpstring("property Name")] 
    HRESULT Name([out, retval] BSTR *ppName);

    [propput, id(IDISPSDP | 6), helpstring("property Name")] 
    HRESULT Name([in] BSTR pName);

    [propget, id(IDISPSDP | 7), helpstring("property Description")] 
    HRESULT Description([out, retval] BSTR *ppDescription);

    [propput, id(IDISPSDP | 7), helpstring("property Description")] 
    HRESULT Description([in] BSTR pDescription);

    [propget, id(IDISPSDP | 8), helpstring("property Url")] 
    HRESULT Url([out, retval] BSTR *ppUrl);

    [propput, id(IDISPSDP | 8), helpstring("property Url")] 
    HRESULT Url([in] BSTR pUrl);

    [id(IDISPSDP | 9), helpstring("method GetEmailNames")] 
    HRESULT GetEmailNames(
        [out] VARIANT /*SAFEARRAY(BSTR)*/ *pAddresses, 
        [out] VARIANT /*SAFEARRAY(BSTR)*/ *pNames
        );

    [id(IDISPSDP | 10), helpstring("method SetEmailNames")] 
    HRESULT SetEmailNames(
        [in] VARIANT /*SAFEARRAY(BSTR)*/ Addresses, 
        [in] VARIANT /*SAFEARRAY(BSTR)*/ Names
        );

    [id(IDISPSDP | 11), helpstring("method GetPhoneNumbers")] 
    HRESULT GetPhoneNumbers(
        [out] VARIANT /*SAFEARRAY(BSTR)*/ *pNumbers, 
        [out] VARIANT /*SAFEARRAY(BSTR)*/ *pNames
        );

    [id(IDISPSDP | 12), helpstring("method SetPhoneNumbers")] 
    HRESULT SetPhoneNumbers(
        [in] VARIANT /*SAFEARRAY(BSTR)*/ Numbers, 
        [in] /*SAFEARRAY(BSTR)*/ VARIANT Names
        );

    [propget, id(IDISPSDP | 13), helpstring("property Originator")] 
    HRESULT Originator([out, retval] BSTR *ppOriginator);

    [propput, id(IDISPSDP | 13), helpstring("property Originator")] 
    HRESULT Originator([in] BSTR pOriginator);

    [propget, id(IDISPSDP | 14), helpstring("property MediaCollection")] 
    HRESULT MediaCollection([out, retval] ITMediaCollection **ppMediaCollection);

    [propget, id(IDISPSDP | 15), helpstring("property TimeCollection")] 
    HRESULT TimeCollection([out, retval] ITTimeCollection **ppTimeCollection);
};


[
    object,
    uuid(8fa381d4-c8c2-11d0-8d58-00c04fd91ac0),
    dual,
    helpstring("ITConnection Interface"),
    pointer_default(unique)
]
interface ITConnection : IDispatch
{
    [propget, id(IDISPCONNECTION | 1), helpstring("property NetworkType")] 
    HRESULT NetworkType([out, retval] BSTR *ppNetworkType);
    
    [propput, id(IDISPCONNECTION | 1), helpstring("property NetworkType")] 
    HRESULT NetworkType([in] BSTR pNetworkType);
    
    [propget, id(IDISPCONNECTION | 2), helpstring("property AddressType")] 
    HRESULT AddressType([out, retval] BSTR *ppAddressType);
    
    [propput, id(IDISPCONNECTION | 2), helpstring("property AddressType")] 
    HRESULT AddressType([in] BSTR pAddressType);
    
    [propget, id(IDISPCONNECTION | 3), helpstring("property StartAddress")] 
    HRESULT StartAddress([out, retval] BSTR *ppStartAddress);
    
    [propget, id(IDISPCONNECTION | 4), helpstring("property NumAddresses")] 
    HRESULT NumAddresses([out, retval] LONG *pNumAddresses);
    
    [propget, id(IDISPCONNECTION | 5), helpstring("property Ttl")] 
    HRESULT Ttl([out, retval] unsigned char *pTtl);
    
    [propget, id(IDISPCONNECTION | 6), helpstring("property BandwidthModifier")] 
    HRESULT BandwidthModifier([out, retval] BSTR *ppModifier);
    
    [propget, id(IDISPCONNECTION | 7), helpstring("property Bandwidth")] 
    HRESULT Bandwidth([out, retval] DOUBLE *pBandwidth);
    
    [id(IDISPCONNECTION | 8), helpstring("method SetAddressInfo")] 
    HRESULT SetAddressInfo(
        [in] BSTR pStartAddress, 
        [in] LONG NumAddresses, 
        [in] unsigned char Ttl
        );
    
    [id(IDISPCONNECTION | 9), helpstring("method SetBandwidthInfo")] 
    HRESULT SetBandwidthInfo([in] BSTR pModifier, [in] DOUBLE Bandwidth);
    
    [id(IDISPCONNECTION | 10), helpstring("method SetEncryptionKey")] 
    HRESULT SetEncryptionKey([in] BSTR pKeyType, [in] BSTR *ppKeyData);
    
    [id(IDISPCONNECTION | 11), helpstring("method GetEncryptionKey")] 
    HRESULT GetEncryptionKey(
        [out] BSTR *ppKeyType, 
        [out] VARIANT_BOOL *pfValidKeyData, 
        [out] BSTR *ppKeyData
        );
};


[
    object,
    uuid(5037fb82-cae9-11d0-8d58-00c04fd91ac0),
    dual,
    helpstring("ITAttributeList Interface"),
    pointer_default(unique)
]
interface ITAttributeList : IDispatch
{
    [propget, id(IDISPATTRLIST | 1), helpstring("property Count")] 
    HRESULT Count([out, retval] LONG *pVal);

    [propget, id(IDISPATTRLIST | 2), helpstring("property Item")] 
    HRESULT Item([in] LONG Index, [out, retval] BSTR *pVal);

    [id(IDISPATTRLIST | 3), helpstring("method Add")] 
    HRESULT Add([in] LONG Index, [in] BSTR pAttribute);

    [id(IDISPATTRLIST | 4), helpstring("method Delete")] 
    HRESULT Delete([in] LONG Index);

    [propget, id(IDISPATTRLIST | 5), helpstring("property AttributeList")] 
    HRESULT AttributeList([out, retval] VARIANT /*SAFEARRAY(BSTR)*/ *pVal);

    [propput, id(IDISPATTRLIST | 5), helpstring("property AttributeList")] 
    HRESULT AttributeList([in] VARIANT /*SAFEARRAY(BSTR)*/ newVal);
};


[
    uuid(C259D79A-C8AB-11D0-8D58-00C04FD91AC0),
    version(1.0),
    helpstring("Microsoft Sdpblb 1.0 Type Library")
]
library SDPBLBLib
{
    importlib("stdole2.tlb");

    interface ITMedia;
    interface ITTime;
    interface ITConnection;
    interface ITAttributeList;

    [
        uuid(9B2719DD-B696-11D0-A489-00C04FD91AC0),
        helpstring("SdpConferenceBlob Class")
    ]
    coclass SdpConferenceBlob
    {
        [default] interface ITConferenceBlob;
        interface ITSdp;
    };
};
