183 lines
6.4 KiB
C++
183 lines
6.4 KiB
C++
/***********************************************************************
|
|
* INTEL Corporation Proprietary Information *
|
|
* *
|
|
* This listing is supplied under the terms of a license agreement *
|
|
* with INTEL Corporation and may not be copied nor disclosed except *
|
|
* in accordance with the terms of that agreement. *
|
|
* *
|
|
* Copyright (c) 1997 Intel Corporation. All rights reserved. *
|
|
***********************************************************************
|
|
* *
|
|
* $Archive: S:\sturgeon\src\include\vcs\coder.hpv $
|
|
*
|
|
* $Revision: 1.4 $
|
|
* $Date: 16 Jan 1997 15:25:06 $
|
|
*
|
|
* $Author: BPOLING $
|
|
*
|
|
* $Log: S:\sturgeon\src\include\vcs\coder.hpv $
|
|
//
|
|
// Rev 1.4 16 Jan 1997 15:25:06 BPOLING
|
|
// changed copyrights to 1997
|
|
//
|
|
// Rev 1.3 18 Dec 1996 21:49:58 BPOLING
|
|
// builds with msdev and for windows only
|
|
//
|
|
// Rev 1.2 09 Dec 1996 14:13:54 EHOWARDX
|
|
// Updated copyright notice.
|
|
*
|
|
* Rev 1.1 15 Nov 1996 16:16:14 BPOLING
|
|
* vcs header added.
|
|
* *
|
|
***********************************************************************
|
|
* *
|
|
* coder.hpp *
|
|
* *
|
|
* PURPOSE: Encode/Decode ANS.1 Gatekeeper PDU using the OSS ANS.1 *
|
|
* compiler functions. *
|
|
* *
|
|
* FUNCTIONS: *
|
|
* *
|
|
* COMMENTS: *
|
|
* *
|
|
***********************************************************************/
|
|
|
|
/************************************************************************
|
|
* Include Files *
|
|
***********************************************************************/
|
|
|
|
/************************************************************************
|
|
* Manifest Constants *
|
|
***********************************************************************/
|
|
|
|
/************************************************************************
|
|
* GLOBAL VARIABLES *
|
|
************************************************************************/
|
|
|
|
/************************************************************************
|
|
* Class Definitions *
|
|
***********************************************************************/
|
|
|
|
#ifndef _CODER_HPP
|
|
#define _CODER_HPP
|
|
|
|
// DEBUG OPTIONS
|
|
#define CODER_DEBUG 0x00000001
|
|
#define CODER_SUPER_DEBUG 0x00000002
|
|
|
|
// Coder Error Messages
|
|
|
|
#define CODER_NOERROR 0
|
|
#define CODER_ERROR 1
|
|
|
|
// Protocol version information
|
|
#define ITU_T 0
|
|
#define RECOMMENDATION 0
|
|
#define SERIES 8 // H225.0
|
|
#define RECOMM_NUMBER 2250
|
|
#define VERSION 0
|
|
#define ADDITIONAL 1
|
|
|
|
|
|
typedef struct _percallInfo
|
|
{
|
|
unsigned char bit_mask;
|
|
NonStandardParameter prCllInf_nnStndrdDt; /* optional */
|
|
CallReferenceValue callReferenceValue;
|
|
ConferenceIdentifier conferenceID;
|
|
ossBoolean originator; /* optional */
|
|
struct _seqofP17 {
|
|
struct _seqofP17 *next;
|
|
RTPSession value;
|
|
} *audio; /* optional */
|
|
struct _seqofP18 {
|
|
struct _seqofP18 *next;
|
|
RTPSession value;
|
|
} *video; /* optional */
|
|
struct _seqofP19 {
|
|
struct _seqofP19 *next;
|
|
TransportChannelInfo value;
|
|
} *data; /* optional */
|
|
TransportChannelInfo h245;
|
|
TransportChannelInfo callSignaling;
|
|
CallType callType;
|
|
BandWidth bandWidth;
|
|
CallModel callModel;
|
|
} PERCALLINFO, *PPERCALLINFO;
|
|
|
|
typedef struct _seqpercallInfo{
|
|
struct _seqpercallInfo *next;
|
|
struct _percallInfo value;
|
|
} SEQPERCALLINFO, *PSEQPERCALLINFO;
|
|
|
|
typedef struct _seqtransadds{
|
|
struct _seqtransadds *next;
|
|
TransportAddress value;
|
|
} SEQTRANSADDS, *PSEQTRANSADDS;
|
|
|
|
typedef struct _seqaliasadds {
|
|
struct _seqaliasadds *next;
|
|
AliasAddress value;
|
|
} SEQALIASADDS, *PSEQALIASADDS;
|
|
|
|
class Coder{
|
|
|
|
private:
|
|
OssGlobal m_World;
|
|
CRITICAL_SECTION m_critSec;
|
|
|
|
public:
|
|
struct ObjectID_ m_protocolIdentifier1,m_protocolIdentifier2,m_protocolIdentifier3,
|
|
m_protocolIdentifier4,m_protocolIdentifier5,m_protocolIdentifier6;
|
|
|
|
public:
|
|
Coder();
|
|
~Coder();
|
|
|
|
#ifdef _CONSOLE
|
|
// Print a H323 structure
|
|
int Print(RasMessage *pData);
|
|
// Print an encoded H323 structure
|
|
void Print(OssBuf *pOssBuf);
|
|
#else
|
|
int InitCoder();
|
|
#endif
|
|
// Creates an OssBuf
|
|
int Encode(RasMessage *pInputData, OssBuf *pOutputOssBuf);
|
|
// Create memory to hold decoded OssBuf
|
|
// For H323 this is a rasStruct
|
|
int Decode(OssBuf *pInputOssBuf, RasMessage **pOutputData);
|
|
// Used to free buffer created by decode
|
|
int Free(RasMessage *pData);
|
|
// Used to free buffer created by encode
|
|
void Free(OssBuf ossBuf);
|
|
int Copy(RasMessage **pDestination,RasMessage *pSource);
|
|
// Compare rasStruct
|
|
// return of 1 means structures are not the same
|
|
// return of 0 means structures are the same
|
|
int Compare(RasMessage *pOriginal, RasMessage *pCopied);
|
|
// Returns the sequence number out of any RasMessage
|
|
// Returns zero on error
|
|
RequestSeqNum GetSequenceNumber(RasMessage *prasStruct);
|
|
RequestSeqNum SetSequenceNumber(RasMessage &rasStruct,RequestSeqNum reqNum);
|
|
// Returns a pointer EndpointIdentifier for any RasMessage
|
|
// NULL for RasMessage that have no EndpointIdentifier
|
|
EndpointIdentifier *GetEndpointID(RasMessage *prasStruct);
|
|
// Returns a pointer to a valid H323 protocolIdentifier linked list
|
|
// when a valid Rasmessage is passed in and sets the protocol Identifier
|
|
// item in RasMessages that have an protocol Identifier
|
|
// If in an RasMessage that doesn't have a protocol identifer is passed in,
|
|
// NULL is returned.
|
|
ProtocolIdentifier SetProtocolIdentifier(RasMessage &rasStruct);
|
|
// Returns TRUE if protocols match, FALSE - otherwise
|
|
BOOL VerifyProtocolIdentifier(RasMessage &rasStruct);
|
|
// finds the requested protocol rasAddress and copies it
|
|
DWORD CopyRasAddress(TransportAddress *pDestAddress, RasMessage *prasStruct, unsigned short choice);
|
|
DWORD CopyRasAddress(TransportAddress *pDestAddress, PSEQTRANSADDS pSrcSeqRasAddress, unsigned short choice);
|
|
// finds the requested protocol callSignalAddress and copies it
|
|
DWORD CopyCallSignal(TransportAddress *pCallSignalAddress, RasMessage *prasStruct, unsigned short choice);
|
|
DWORD CopyCallSignal(TransportAddress *pDestCallSignalAddress, PSEQTRANSADDS pSrcSeqCSAAddress, unsigned short choice);
|
|
};
|
|
|
|
#endif
|