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__
|