168 lines
5.2 KiB
C
168 lines
5.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
channel.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Definitions for H.323 TAPI Service Provider channel objects.
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode - Win32
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _INC_CHANNEL
|
||
|
#define _INC_CHANNEL
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Header files //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "h323pdu.h"
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Type definitions //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
typedef enum _H323_CHANNELSTATE {
|
||
|
|
||
|
H323_CHANNELSTATE_ALLOCATED = 0,
|
||
|
H323_CHANNELSTATE_CLOSED,
|
||
|
H323_CHANNELSTATE_OPENING,
|
||
|
H323_CHANNELSTATE_OPENED
|
||
|
|
||
|
} H323_CHANNELSTATE, *PH323_CHANNELSTATE;
|
||
|
|
||
|
typedef struct _H323_CHANNEL {
|
||
|
|
||
|
H323_CHANNELSTATE nState; // state of channel
|
||
|
STREAMSETTINGS Settings; // stream settings
|
||
|
HANDLE hmChannel; // msp channel handle
|
||
|
CC_HCHANNEL hccChannel; // intelcc channel handle
|
||
|
CC_ADDR ccLocalRTPAddr; // local rtp address
|
||
|
CC_ADDR ccLocalRTCPAddr; // local rtcp address
|
||
|
CC_ADDR ccRemoteRTPAddr; // remote rtp address
|
||
|
CC_ADDR ccRemoteRTCPAddr; // remote rtcp address
|
||
|
CC_TERMCAP ccTermCaps; // channel capabilities
|
||
|
BYTE bPayloadType; // rtp payload type
|
||
|
BYTE bSessionID; // rtp session id
|
||
|
BOOL fInbound; // inbound channel
|
||
|
struct _H323_CALL * pCall; // containing call object
|
||
|
|
||
|
} H323_CHANNEL, *PH323_CHANNEL;
|
||
|
|
||
|
typedef struct _H323_CHANNEL_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_CHANNEL pChannels[ANYSIZE]; // array of object pointers
|
||
|
|
||
|
} H323_CHANNEL_TABLE, *PH323_CHANNEL_TABLE;
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Macros //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#define H323IsChannelAllocated(_pChannel_) \
|
||
|
((_pChannel_) != NULL)
|
||
|
|
||
|
#define H323IsChannelInUse(_pChannel_) \
|
||
|
(H323IsChannelAllocated(_pChannel_) && \
|
||
|
((_pChannel_)->nState > H323_CHANNELSTATE_ALLOCATED))
|
||
|
|
||
|
#define H323IsChannelOpen(_pChannel_) \
|
||
|
(H323IsChannelAllocated(_pChannel_) && \
|
||
|
((_pChannel_)->nState == H323_CHANNELSTATE_OPENED))
|
||
|
|
||
|
#define H323IsChannelEqual(_pChannel_,_hccChannel_) \
|
||
|
(H323IsChannelInUse(_pChannel_) && \
|
||
|
((_hccChannel_) == ((_pChannel_)->hccChannel)))
|
||
|
|
||
|
#define H323IsSessionIDEqual(_pChannel_,_bSessionID_) \
|
||
|
(H323IsChannelInUse(_pChannel_) && \
|
||
|
((_bSessionID_) == ((_pChannel_)->bSessionID)))
|
||
|
|
||
|
#define H323IsChannelInbound(_pChannel_) \
|
||
|
((_pChannel_)->fInbound == TRUE)
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Public prototypes //
|
||
|
// //
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
BOOL
|
||
|
H323OpenChannel(
|
||
|
PH323_CHANNEL pChannel
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323CloseChannel(
|
||
|
PH323_CHANNEL pChannel
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323AllocChannelTable(
|
||
|
PH323_CHANNEL_TABLE * ppChannelTable
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323FreeChannelTable(
|
||
|
PH323_CHANNEL_TABLE pChannelTable
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323CloseChannelTable(
|
||
|
PH323_CHANNEL_TABLE pChannelTable
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323AllocChannelFromTable(
|
||
|
PH323_CHANNEL * ppChannel,
|
||
|
PH323_CHANNEL_TABLE * ppChannelTable,
|
||
|
struct _H323_CALL * pCall
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323FreeChannelFromTable(
|
||
|
PH323_CHANNEL pChannel,
|
||
|
PH323_CHANNEL_TABLE pChannelTable
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323LookupChannelByHandle(
|
||
|
PH323_CHANNEL * ppChannel,
|
||
|
PH323_CHANNEL_TABLE pChannelTable,
|
||
|
CC_HCHANNEL hccChannel
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323LookupChannelBySessionID(
|
||
|
PH323_CHANNEL * ppChannel,
|
||
|
PH323_CHANNEL_TABLE pChannelTable,
|
||
|
BYTE bSessionID
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
H323AreThereOutgoingChannels(
|
||
|
PH323_CHANNEL_TABLE pChannelTable,
|
||
|
BOOL fIgnoreOpenChannels
|
||
|
);
|
||
|
|
||
|
#endif // _INC_CHANNEL
|