266 lines
7.3 KiB
Plaintext
266 lines
7.3 KiB
Plaintext
//
|
||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
||
cpp_quote("/* Copyright (c) Microsoft Corporation. All rights reserved.*/")
|
||
|
||
///////////////////////////////////////////////////////////////////////////
|
||
// msp.idl : IDL source for Media Service Provider interface
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
#ifndef __MEDIA_STREAM_PROVIDER_IDL__
|
||
#define __MEDIA_STREAM_PROVIDER_IDL__
|
||
|
||
import "tapi3if.idl";
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Forward declarations
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Type definitions
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
typedef long * MSP_HANDLE;
|
||
|
||
typedef enum
|
||
{
|
||
ADDRESS_TERMINAL_AVAILABLE, // new terminal arrived via PNP
|
||
// ITTerminal *
|
||
|
||
ADDRESS_TERMINAL_UNAVAILABLE, // terminal gone via PNP
|
||
// ITTerminal *
|
||
|
||
} MSP_ADDRESS_EVENT;
|
||
|
||
typedef enum
|
||
{
|
||
// In each case the MSP fills in as much as much info as it can. Terminals
|
||
// or error codes may not be available, in which case the MSP fills in zero.
|
||
// The bare-bones info needed is indicated here.
|
||
|
||
CALL_NEW_STREAM, // - a new stream is created by the call. The app can
|
||
// choose to select a terminal or delete the stream from the call.
|
||
// ITStream *
|
||
|
||
CALL_STREAM_FAIL, // - setup of the stream failed or the stream fails to start.
|
||
// ITStream *
|
||
// Error code
|
||
|
||
CALL_TERMINAL_FAIL, // - The terminal failed to connect.
|
||
// ITTerminal *
|
||
// Error code
|
||
|
||
CALL_STREAM_NOT_USED, // - The stream is not used in the call (the remote
|
||
// party rejected it).
|
||
// ITStream *
|
||
|
||
CALL_STREAM_ACTIVE, // - The app needs this event to decide when a
|
||
// stream can be used to send and receive data.
|
||
// It is fired when the streams enter running state
|
||
// (the timing of which is determined by the TSP).
|
||
// ITStream *
|
||
|
||
CALL_STREAM_INACTIVE // - No more data can be sent to or received from
|
||
// this stream. This happens when a send stream
|
||
// has sent all its data, or when a receive stream
|
||
// stops receiving data.
|
||
// ITStream *
|
||
|
||
} MSP_CALL_EVENT;
|
||
|
||
typedef enum
|
||
{
|
||
CALL_CAUSE_UNKNOWN,
|
||
|
||
CALL_CAUSE_BAD_DEVICE,
|
||
// a bad device caused failure, for either STREAM_FAIL or TERMINAL_FAIL.
|
||
|
||
CALL_CAUSE_CONNECT_FAIL,
|
||
// either connecting the stream failed or connecting the terminal failed.
|
||
// Note, if a terminal can not be connected to a stream, the app will get
|
||
// a TERMINAL_FAIL event with CMC_CONNECT_FAIL. If this stream failed
|
||
// because the terminal is the only one to use, the app will also get a
|
||
// STREAM_FAIL event with CMC_CONNECT_FAIL.
|
||
|
||
CALL_CAUSE_LOCAL_REQUEST,
|
||
// the event is the result of the app<70>s calling a method on the stream.
|
||
|
||
CALL_CAUSE_REMOTE_REQUEST,
|
||
// the event is the result of the remote endpoint<6E>s request.
|
||
|
||
CALL_CAUSE_MEDIA_TIMEOUT,
|
||
// the media that carries the stream is temporarily not available.
|
||
|
||
CALL_CAUSE_MEDIA_RECOVERED,
|
||
// the media goes back to normal from a temporary deny of service.
|
||
|
||
CALL_CAUSE_QUALITY_OF_SERVICE
|
||
// the event is because qos does/doesn't allow the media to send.
|
||
|
||
} MSP_CALL_EVENT_CAUSE;
|
||
|
||
typedef enum
|
||
{
|
||
ME_ADDRESS_EVENT,
|
||
ME_CALL_EVENT,
|
||
ME_TSP_DATA,
|
||
ME_PRIVATE_EVENT,
|
||
ME_ASR_TERMINAL_EVENT,
|
||
ME_TTS_TERMINAL_EVENT,
|
||
ME_FILE_TERMINAL_EVENT,
|
||
ME_TONE_TERMINAL_EVENT
|
||
} MSP_EVENT;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
DWORD dwSize; // total size
|
||
MSP_EVENT Event; // event type
|
||
MSP_HANDLE hCall; // may be NULL
|
||
|
||
[switch_type(MSP_EVENT), switch_is((MSP_EVENT)Event)]
|
||
union
|
||
{
|
||
[case(ME_ADDRESS_EVENT)]
|
||
struct
|
||
{
|
||
MSP_ADDRESS_EVENT Type;
|
||
ITTerminal * pTerminal;
|
||
|
||
} MSP_ADDRESS_EVENT_INFO;
|
||
|
||
[case(ME_CALL_EVENT)]
|
||
struct
|
||
{
|
||
MSP_CALL_EVENT Type;
|
||
MSP_CALL_EVENT_CAUSE Cause;
|
||
ITStream * pStream;
|
||
ITTerminal * pTerminal;
|
||
HRESULT hrError;
|
||
|
||
} MSP_CALL_EVENT_INFO;
|
||
|
||
[case(ME_TSP_DATA)]
|
||
struct
|
||
{
|
||
DWORD dwBufferSize;
|
||
BYTE pBuffer[1];
|
||
|
||
} MSP_TSP_DATA;
|
||
|
||
[case(ME_PRIVATE_EVENT)]
|
||
struct
|
||
{
|
||
IDispatch * pEvent;
|
||
long lEventCode;
|
||
|
||
} MSP_PRIVATE_EVENT_INFO;
|
||
|
||
[case(ME_FILE_TERMINAL_EVENT)]
|
||
struct
|
||
{
|
||
ITTerminal * pParentFileTerminal;
|
||
ITFileTrack * pFileTrack;
|
||
TERMINAL_MEDIA_STATE TerminalMediaState;
|
||
FT_STATE_EVENT_CAUSE ftecEventCause;
|
||
HRESULT hrErrorCode;
|
||
} MSP_FILE_TERMINAL_EVENT_INFO;
|
||
|
||
[case(ME_ASR_TERMINAL_EVENT)]
|
||
struct
|
||
{
|
||
ITTerminal * pASRTerminal;
|
||
HRESULT hrErrorCode;
|
||
} MSP_ASR_TERMINAL_EVENT_INFO;
|
||
|
||
[case(ME_TTS_TERMINAL_EVENT)]
|
||
struct
|
||
{
|
||
ITTerminal * pTTSTerminal;
|
||
HRESULT hrErrorCode;
|
||
} MSP_TTS_TERMINAL_EVENT_INFO;
|
||
|
||
[case(ME_TONE_TERMINAL_EVENT)]
|
||
struct
|
||
{
|
||
ITTerminal * pToneTerminal;
|
||
HRESULT hrErrorCode;
|
||
} MSP_TONE_TERMINAL_EVENT_INFO;
|
||
};
|
||
|
||
} MSP_EVENT_INFO;
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Interface definitions
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
[
|
||
uuid(6E0887BE-BA1A-492e-BD10-4020EC5E33E0),
|
||
helpstring("ITPluggableTerminalEventSink"),
|
||
pointer_default(unique)
|
||
]
|
||
interface ITPluggableTerminalEventSink : IUnknown
|
||
{
|
||
HRESULT FireEvent(
|
||
[in] const MSP_EVENT_INFO *pMspEventInfo
|
||
);
|
||
}
|
||
|
||
[
|
||
uuid(F7115709-A216-4957-A759-060AB32A90D1),
|
||
helpstring("ITPluggableTerminalEventSinkRegistration"),
|
||
pointer_default(unique)
|
||
]
|
||
interface ITPluggableTerminalEventSinkRegistration : IUnknown
|
||
{
|
||
HRESULT RegisterSink(
|
||
[in] ITPluggableTerminalEventSink* pEventSink
|
||
);
|
||
|
||
HRESULT UnregisterSink(
|
||
);
|
||
}
|
||
|
||
[
|
||
uuid(EE3BD600-3868-11D2-A045-00C04FB6809F),
|
||
helpstring("ITMSPAddress Interface"),
|
||
pointer_default(unique)
|
||
]
|
||
interface ITMSPAddress : IUnknown
|
||
{
|
||
HRESULT Initialize(
|
||
[in] MSP_HANDLE hEvent
|
||
);
|
||
|
||
HRESULT Shutdown();
|
||
|
||
HRESULT CreateMSPCall(
|
||
[in] MSP_HANDLE hCall,
|
||
[in] DWORD dwReserved,
|
||
[in] DWORD dwMediaType,
|
||
[in] IUnknown * pOuterUnknown,
|
||
[out] IUnknown ** ppStreamControl
|
||
);
|
||
|
||
HRESULT ShutdownMSPCall(
|
||
[in] IUnknown * pStreamControl
|
||
);
|
||
|
||
HRESULT ReceiveTSPData(
|
||
[in] IUnknown * pMSPCall,
|
||
[in, size_is(dwSize)] BYTE * pBuffer,
|
||
[in] DWORD dwSize
|
||
);
|
||
|
||
HRESULT GetEvent(
|
||
[in,out] DWORD * pdwSize,
|
||
[in, out, size_is(*pdwSize)] byte * pEventBuffer
|
||
);
|
||
|
||
}
|
||
|
||
|
||
|
||
#endif // __MEDIA_STREAM_PROVIDER_IDL__
|