|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
call.h
Abstract:
Definitions for H.323 TAPI Service Provider call objects.
Environment:
User Mode - Win32
Revision History:
--*/
#ifndef _INC_CALL
#define _INC_CALL
///////////////////////////////////////////////////////////////////////////////
// //
// Header files //
// //
///////////////////////////////////////////////////////////////////////////////
#include "channel.h"
///////////////////////////////////////////////////////////////////////////////
// //
// Type definitions //
// //
///////////////////////////////////////////////////////////////////////////////
typedef enum _H323_CALLSTATE {
H323_CALLSTATE_ALLOCATED = 0, H323_CALLSTATE_IN_USE
} H323_CALLSTATE, *PH323_CALLSTATE;
typedef struct _H323_U2ULE {
LIST_ENTRY Link; DWORD dwU2USize; PBYTE pU2U;
} H323_U2ULE, *PH323_U2ULE;
typedef struct _H323_CALL { HDRVCALL hdCall; // tspi call handle
HTAPICALL htCall; // tapi call handle
CC_HCALL hccCall; // intelcc call handle
CC_HCONFERENCE hccConf; // intelcc conf handle
H323_CALLSTATE nState; // state of call object
DWORD dwCallState; // tspi call state
DWORD dwCallStateMode; // tspi call state mode
DWORD dwOrigin; // inbound or outbound
DWORD dwAddressType; // type of dst address
DWORD dwIncomingModes; // available media modes
DWORD dwOutgoingModes; // available media modes
DWORD dwRequestedModes; // requested media modes
DWORD dwAppSpecific;
BOOL fMonitoringDigits; // listening for dtmf flag
DWORD dwLinkSpeed; // speed of network connection
LIST_ENTRY IncomingU2U; // incoming user user messages
LIST_ENTRY OutgoingU2U; // outgoing user user messages
CC_ADDR ccCalleeAddr; // intelcc src address
CC_ADDR ccCallerAddr; // intelcc dst address
CC_ALIASITEM ccCalleeAlias; // intelcc src alias
CC_ALIASITEM ccCallerAlias; // intelcc dst alias
CC_TERMCAP ccRemoteAudioCaps; // remote party audio
CC_TERMCAP ccRemoteVideoCaps; // remote party video
PH323_CHANNEL_TABLE pChannelTable; // table of logical channels
struct _H323_LINE * pLine; // pointer to containing line
} H323_CALL, *PH323_CALL;
typedef struct _H323_CALL_TABLE {
DWORD dwNumSlots; // number of entries
DWORD dwNumInUse; // number of entries in use
DWORD dwNumAllocated; // number of entries allocated
DWORD dwNextAvailable; // next available table index
PH323_CALL pCalls[ANYSIZE]; // array of object pointers
} H323_CALL_TABLE, *PH323_CALL_TABLE;
///////////////////////////////////////////////////////////////////////////////
// //
// Public prototypes //
// //
///////////////////////////////////////////////////////////////////////////////
BOOL H323BindCall( PH323_CALL pCall, PCC_CONFERENCEID pConferenceID ); BOOL H323UnbindCall( PH323_CALL pCall ); BOOL H323PlaceCall( PH323_CALL pCall );
BOOL H323HangupCall( PH323_CALL pCall ); BOOL H323CloseCall( PH323_CALL pCall ); BOOL H323DropCall( PH323_CALL pCall, DWORD dwDisconnectMode );
BOOL H323GetCallAndLock( PH323_CALL * ppCall, HDRVCALL hdCall );
BOOL H323GetCallByHCall( PH323_CALL * ppCall, struct _H323_LINE * pLine, CC_HCALL hccCall );
BOOL H323ChangeCallState( PH323_CALL pCall, DWORD dwCallState, DWORD dwCallStateMode ); BOOL H323ChangeCallStateToIdle( PH323_CALL pCall, DWORD dwDisconnectMode );
BOOL H323AllocCallTable( PH323_CALL_TABLE * ppCallTable ); BOOL H323FreeCallTable( PH323_CALL_TABLE pCallTable ); BOOL H323CloseCallTable( PH323_CALL_TABLE pCallTable ); BOOL H323AllocCallFromTable( PH323_CALL * ppCall, PH323_CALL_TABLE * ppCallTable, struct _H323_LINE * pLine );
BOOL H323FreeCallFromTable( PH323_CALL pCall, PH323_CALL_TABLE pCallTable );
BOOL H323UpdateMediaModes( PH323_CALL pCall );
BOOL H323AcceptCall( PH323_CALL pCall );
BOOL H323AddU2U( PLIST_ENTRY pListHead, DWORD dwDataSize, PBYTE pData );
BOOL H323RemoveU2U( PLIST_ENTRY pListHead, PH323_U2ULE * ppU2ULE );
DWORD H323DetermineLinkSpeed( DWORD dwHostAddr );
BOOL H323GetTermCapList( PH323_CALL pCall, PCC_TERMCAPLIST pTermCapList, PCC_TERMCAPDESCRIPTORS pTermCapDescriptors );
///////////////////////////////////////////////////////////////////////////////
// //
// Call capabilites //
// //
///////////////////////////////////////////////////////////////////////////////
#define H323_CALL_INBOUNDSTATES (LINECALLSTATE_ACCEPTED | \
LINECALLSTATE_CONNECTED | \ LINECALLSTATE_DISCONNECTED | \ LINECALLSTATE_IDLE | \ LINECALLSTATE_OFFERING) #define H323_CALL_OUTBOUNDSTATES (LINECALLSTATE_CONNECTED | \
LINECALLSTATE_DIALING | \ LINECALLSTATE_DISCONNECTED | \ LINECALLSTATE_IDLE | \ LINECALLSTATE_RINGBACK)
///////////////////////////////////////////////////////////////////////////////
// //
// Macros //
// //
///////////////////////////////////////////////////////////////////////////////
#define H323IsCallAllocated(_pCall_) \
((_pCall_) != NULL)
#define H323IsCallInUse(_pCall_) \
(H323IsCallAllocated(_pCall_) && \ ((_pCall_)->nState > H323_CALLSTATE_ALLOCATED))
#define H323IsCallEqual(_pCall_,_hdCall_) \
(H323IsCallInUse(_pCall_) && \ ((_pCall_)->hdCall == (_hdCall_)))
#define H323IsCallActive(_pCall_) \
(((_pCall_)->dwCallState != LINECALLSTATE_IDLE) && \ ((_pCall_)->dwCallState != LINECALLSTATE_DISCONNECTED))
#define H323IsCallIdle(_pCall_) \
((_pCall_)->dwCallState == LINECALLSTATE_IDLE)
#define H323IsCallDisconnected(_pCall_) \
((_pCall_)->dwCallState == LINECALLSTATE_DISCONNECTED)
#define H323IsCallConnected(_pCall_) \
((_pCall_)->dwCallState == LINECALLSTATE_CONNECTED)
#define H323IsCallProceeding(_pCall_) \
(((_pCall_)->dwCallState == LINECALLSTATE_DIALING) || \ ((_pCall_)->dwCallState == LINECALLSTATE_RINGBACK))
#define H323IsCallOffering(_pCall_) \
((_pCall_)->dwCallState == LINECALLSTATE_OFFERING)
#define H323IsCallInbound(_pCall_) \
((_pCall_)->dwOrigin == LINECALLORIGIN_INBOUND)
#define H323GetCallFeatures(_pCall_) \
(((_pCall_)->dwCallState != LINECALLSTATE_IDLE) \ ? LINECALLFEATURE_DROP \ : 0)
#define H323GetLineHandle(_hdCall_) \
((HDRVLINE)(DWORD)HIWORD((DWORD)(_hdCall_)))
#define H323GetCallTableIndex(_hdCall_) \
((DWORD)LOWORD((DWORD)(_hdCall_)))
#define H323CreateCallHandle(_hdLine_,_i_) \
((HDRVCALL)MAKELONG(LOWORD((DWORD)(_i_)),LOWORD((DWORD)(_hdLine_))))
#define H323IsVideoRequested(_pCall_) \
((_pCall_)->dwRequestedModes & LINEMEDIAMODE_VIDEO)
#define H323IsAutomatedVoiceRequested(_pCall_) \
((_pCall_)->dwRequestedModes & LINEMEDIAMODE_AUTOMATEDVOICE)
#define H323IsInteractiveVoiceRequested(_pCall_) \
((_pCall_)->dwRequestedModes & LINEMEDIAMODE_INTERACTIVEVOICE)
#define H323IsMediaUnresolved(_pCall_) \
((_pCall_)->dwOutgoingModes & LINEMEDIAMODE_UNKNOWN)
#define H323IsAudioRequested(_pCall_) \
(H323IsAutomatedVoiceRequested(_pCall_) || \ H323IsInteractiveVoiceRequested(_pCall_))
#endif // _INC_CALL
|