723 lines
20 KiB
C
723 lines
20 KiB
C
/****************************************************************************
|
|
*
|
|
* $Archive: S:/STURGEON/SRC/INCLUDE/VCS/q931pdu.h_v $
|
|
*
|
|
* INTEL Corporation Prorietary 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) 1996 Intel Corporation.
|
|
*
|
|
* $Revision: 1.11 $
|
|
* $Date: 22 Jan 1997 17:21:04 $
|
|
* $Author: MANDREWS $
|
|
*
|
|
* Abstract: Parser routines for Q931 PDUs
|
|
*
|
|
***************************************************************************/
|
|
#ifndef Q931PAR_H
|
|
#define Q931PAR_H
|
|
|
|
#include <winerror.h>
|
|
#include "av_asn1.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct S_BUFFERDESCR
|
|
{
|
|
DWORD Length;
|
|
BYTE *BufferPtr;
|
|
};
|
|
|
|
typedef struct S_BUFFERDESCR BUFFERDESCR;
|
|
typedef struct S_BUFFERDESCR *PBUFFERDESCR;
|
|
|
|
// Mask to extract a message type from a byte
|
|
#define MESSAGETYPEMASK 0x7f
|
|
|
|
typedef BYTE MESSAGEIDTYPE;
|
|
|
|
// Q931 defined message types
|
|
#define ALERTINGMESSAGETYPE 0x01
|
|
#define PROCEEDINGMESSAGETYPE 0x02
|
|
#define CONNECTMESSAGETYPE 0x07
|
|
#define CONNECTACKMESSAGETYPE 0x0F
|
|
#define PROGRESSMESSAGETYPE 0x03
|
|
#define SETUPMESSAGETYPE 0x05
|
|
#define SETUPACKMESSAGETYPE 0x0D
|
|
|
|
#define RESUMEMESSAGETYPE 0x26
|
|
#define RESUMEACKMESSAGETYPE 0x2E
|
|
#define RESUMEREJMESSAGETYPE 0x22
|
|
#define SUSPENDMESSAGETYPE 0x25
|
|
#define SUSPENDACKMESSAGETYPE 0x2D
|
|
#define SUSPENDREJMESSAGETYPE 0x21
|
|
#define USERINFOMESSAGETYPE 0x20
|
|
|
|
#define DISCONNECTMESSAGETYPE 0x45
|
|
#define RELEASEMESSAGETYPE 0x4D
|
|
#define RELEASECOMPLMESSAGETYPE 0x5A
|
|
#define RESTARTMESSAGETYPE 0x46
|
|
#define RESTARTACKMESSAGETYPE 0x4E
|
|
|
|
#define SEGMENTMESSAGETYPE 0x60
|
|
#define CONGCTRLMESSAGETYPE 0x79
|
|
#define INFORMATIONMESSAGETYPE 0x7B
|
|
#define NOTIFYMESSAGETYPE 0x6E
|
|
#define STATUSMESSAGETYPE 0x7D
|
|
#define STATUSENQUIRYMESSAGETYPE 0x75
|
|
|
|
|
|
// Mask to remove only the field identifier from a type 1 single octet field
|
|
#define TYPE1IDENTMASK 0xf0
|
|
|
|
// Mask to remove only the value from a type 1 single octet field
|
|
#define TYPE1VALUEMASK 0x0f
|
|
|
|
// Type of the field identitifiers
|
|
typedef BYTE FIELDIDENTTYPE;
|
|
|
|
// Field identifiers
|
|
// Single octet values
|
|
#define IDENT_RESERVED 0x80
|
|
#define IDENT_SHIFT 0x90
|
|
#define IDENT_MORE 0xA0
|
|
#define IDENT_SENDINGCOMPLETE 0xA1
|
|
#define IDENT_CONGESTION 0xB0
|
|
#define IDENT_REPEAT 0xD0
|
|
|
|
// Variable length octet values
|
|
#define IDENT_SEGMENTED 0x00
|
|
#define IDENT_BEARERCAP 0x04
|
|
#define IDENT_CAUSE 0x08
|
|
#define IDENT_CALLIDENT 0x10
|
|
#define IDENT_CALLSTATE 0x14
|
|
#define IDENT_CHANNELIDENT 0x18
|
|
#define IDENT_PROGRESS 0x1E
|
|
#define IDENT_PROGRESS2 0x1F
|
|
#define IDENT_NETWORKSPEC 0x20
|
|
#define IDENT_NOTIFICATION 0x27
|
|
#define IDENT_DISPLAY 0x28
|
|
#define IDENT_DATE 0x29
|
|
#define IDENT_KEYPAD 0x2C
|
|
#define IDENT_SIGNAL 0x34
|
|
#define IDENT_INFORMATIONRATE 0x40
|
|
#define IDENT_ENDTOENDDELAY 0x42
|
|
#define IDENT_TRANSITDELAY 0x43
|
|
#define IDENT_PLBINARYPARAMS 0x44
|
|
#define IDENT_PLWINDOWSIZE 0x45
|
|
#define IDENT_PACKETSIZE 0x46
|
|
#define IDENT_CLOSEDUG 0x47
|
|
#define IDENT_REVCHARGE 0x4A
|
|
#define IDENT_CALLINGNUMBER 0x6C
|
|
#define IDENT_CALLINGSUBADDR 0x6D
|
|
#define IDENT_CALLEDNUMBER 0x70
|
|
#define IDENT_CALLEDSUBADDR 0x71
|
|
#define IDENT_REDIRECTING 0x74
|
|
#define IDENT_TRANSITNET 0x78
|
|
#define IDENT_RESTART 0x79
|
|
#define IDENT_LLCOMPATIBILITY 0x7C
|
|
#define IDENT_HLCOMPATIBILITY 0x7D
|
|
#define IDENT_USERUSER 0x7E
|
|
|
|
//-------------------------------------------------------------------
|
|
// Structures for messages and information elements
|
|
//-------------------------------------------------------------------
|
|
|
|
typedef BYTE PDTYPE;
|
|
#define Q931PDVALUE ((PDTYPE)0x08)
|
|
|
|
typedef WORD CRTYPE;
|
|
|
|
// Since right now we don't need to separate out the individual
|
|
// parts of the fields of the structures these are the base
|
|
// types from which the fields are made.
|
|
// Single octet element type 1 (contains a value)
|
|
struct S_SINGLESTRUCT1
|
|
{
|
|
BOOLEAN Present;
|
|
BYTE Value;
|
|
};
|
|
|
|
// Single octet element type 2 (does not contain a value)
|
|
struct S_SINGLESTRUCT2
|
|
{
|
|
BOOLEAN Present;
|
|
};
|
|
|
|
// Variable length element
|
|
// Maximum element size
|
|
#define MAXVARFIELDLEN 131
|
|
|
|
struct S_VARSTRUCT
|
|
{
|
|
BOOLEAN Present;
|
|
BYTE Length;
|
|
BYTE Contents[MAXVARFIELDLEN];
|
|
};
|
|
|
|
// Right now all of the fields are bound to the simplest
|
|
// structures above. No parsing other than just
|
|
// single octet/variable octet is done. When the values
|
|
// in some of the subfields are important, change the
|
|
// structures here and change the appropriate parsing
|
|
// routine to generate the right structure
|
|
|
|
// The shift element is a single type 1
|
|
typedef struct S_SINGLESTRUCT1 SHIFTIE;
|
|
typedef struct S_SINGLESTRUCT1 *PSHIFTIE;
|
|
|
|
// The more data element is a single type 2
|
|
typedef struct S_SINGLESTRUCT2 MOREDATAIE;
|
|
typedef struct S_SINGLESTRUCT2 *PMOREDATAIE;
|
|
|
|
// The sending complete element is a single type 2
|
|
typedef struct S_SINGLESTRUCT2 SENDCOMPLIE;
|
|
typedef struct S_SINGLESTRUCT2 *PSENDCOMPLIE;
|
|
|
|
// The congestion level element is a single type 1
|
|
typedef struct S_SINGLESTRUCT1 CONGESTIONIE;
|
|
typedef struct S_SINGLESTRUCT1 *PCONGESTIONIE;
|
|
|
|
// The repeat indicator element is a single type 1
|
|
typedef struct S_SINGLESTRUCT1 REPEATIE;
|
|
typedef struct S_SINGLESTRUCT1 *PREPEATIE;
|
|
|
|
// The segmented element is a variable
|
|
typedef struct S_VARSTRUCT SEGMENTEDIE;
|
|
typedef struct S_VARSTRUCT *PSEGMENTEDIE;
|
|
|
|
// The bearer capability element is a variable
|
|
typedef struct S_VARSTRUCT BEARERCAPIE;
|
|
typedef struct S_VARSTRUCT *PBEARERCAPIE;
|
|
|
|
// The cause element is a variable
|
|
typedef struct S_VARSTRUCT CAUSEIE;
|
|
typedef struct S_VARSTRUCT *PCAUSEIE;
|
|
|
|
// The call identity element is a variable
|
|
typedef struct S_VARSTRUCT CALLIDENTIE;
|
|
typedef struct S_VARSTRUCT *PCALLIDENTIE;
|
|
|
|
// The call state element is a variable
|
|
typedef struct S_VARSTRUCT CALLSTATEIE;
|
|
typedef struct S_VARSTRUCT *PCALLSTATEIE;
|
|
|
|
// The channel identifier element is a variable
|
|
typedef struct S_VARSTRUCT CHANIDENTIE;
|
|
typedef struct S_VARSTRUCT *PCHANIDENTIE;
|
|
|
|
// The progress indicator element is a variable
|
|
typedef struct S_VARSTRUCT PROGRESSIE;
|
|
typedef struct S_VARSTRUCT *PPROGRESSIE;
|
|
|
|
// The network specific element is a variable
|
|
typedef struct S_VARSTRUCT NETWORKIE;
|
|
typedef struct S_VARSTRUCT *PNETWORKIE;
|
|
|
|
// The notification indicator element is a variable
|
|
typedef struct S_VARSTRUCT NOTIFICATIONINDIE;
|
|
typedef struct S_VARSTRUCT *PNOTIFICATIONINDIE;
|
|
|
|
// The display element is a variable
|
|
typedef struct S_VARSTRUCT DISPLAYIE;
|
|
typedef struct S_VARSTRUCT *PDISPLAYIE;
|
|
|
|
// The date element is a variable
|
|
typedef struct S_VARSTRUCT DATEIE;
|
|
typedef struct S_VARSTRUCT *PDATEIE;
|
|
|
|
// The keypad element is a variable
|
|
typedef struct S_VARSTRUCT KEYPADIE;
|
|
typedef struct S_VARSTRUCT *PKEYPADIE;
|
|
|
|
// The signal element is a variable
|
|
typedef struct S_VARSTRUCT SIGNALIE;
|
|
typedef struct S_VARSTRUCT *PSIGNALIE;
|
|
|
|
// The information rate element is a variable
|
|
typedef struct S_VARSTRUCT INFORATEIE;
|
|
typedef struct S_VARSTRUCT *PINFORATEIE;
|
|
|
|
// The end to end transit delay element is a variable
|
|
typedef struct S_VARSTRUCT ENDTOENDDELAYIE;
|
|
typedef struct S_VARSTRUCT *PENDTOENDDELAYIE;
|
|
|
|
// The transit delay element is a variable
|
|
typedef struct S_VARSTRUCT TRANSITDELAYIE;
|
|
typedef struct S_VARSTRUCT *PTRANSITDELAYIE;
|
|
|
|
// The packet layer binary parameters element is a variable
|
|
typedef struct S_VARSTRUCT PLBINARYPARAMSIE;
|
|
typedef struct S_VARSTRUCT *PPLBINARYPARAMSIE;
|
|
|
|
// The packet layer window size element is a variable
|
|
typedef struct S_VARSTRUCT PLWINDOWSIZEIE;
|
|
typedef struct S_VARSTRUCT *PPLWINDOWSIZEIE;
|
|
|
|
// The packet size element is a variable
|
|
typedef struct S_VARSTRUCT PACKETSIZEIE;
|
|
typedef struct S_VARSTRUCT *PPACKETSIZEIE;
|
|
|
|
// The closed user group element is a variable
|
|
typedef struct S_VARSTRUCT CLOSEDUGIE;
|
|
typedef struct S_VARSTRUCT *PCLOSEDUGIE;
|
|
|
|
// The reverse charge indication element is a variable
|
|
typedef struct S_VARSTRUCT REVERSECHARGEIE;
|
|
typedef struct S_VARSTRUCT *PREVERSECHARGEIE;
|
|
|
|
// The calling party number element is a variable
|
|
typedef struct S_VARSTRUCT CALLINGNUMBERIE;
|
|
typedef struct S_VARSTRUCT *PCALLINGNUMBERIE;
|
|
|
|
// The calling party subaddress element is a variable
|
|
typedef struct S_VARSTRUCT CALLINGSUBADDRIE;
|
|
typedef struct S_VARSTRUCT *PCALLINGSUBADDRIE;
|
|
|
|
// The called party subaddress element is a variable
|
|
typedef struct S_VARSTRUCT CALLEDSUBADDRIE;
|
|
typedef struct S_VARSTRUCT *PCALLEDSUBADDRIE;
|
|
|
|
// The redirecting number element is a variable
|
|
typedef struct S_VARSTRUCT REDIRECTINGIE;
|
|
typedef struct S_VARSTRUCT *PREDIRECTINGIE;
|
|
|
|
// The transit network selection element is a variable
|
|
typedef struct S_VARSTRUCT TRANSITNETIE;
|
|
typedef struct S_VARSTRUCT *PTRANSITNETIE;
|
|
|
|
// The restart indicator element is a variable
|
|
typedef struct S_VARSTRUCT RESTARTIE;
|
|
typedef struct S_VARSTRUCT *PRESTARTIE;
|
|
|
|
// The low layer compatibility element is a variable
|
|
typedef struct S_VARSTRUCT LLCOMPATIBILITYIE;
|
|
typedef struct S_VARSTRUCT *PLLCOMPATIBILITYIE;
|
|
|
|
// The higher layer compatibility element is a variable
|
|
typedef struct S_VARSTRUCT HLCOMPATIBILITYIE;
|
|
typedef struct S_VARSTRUCT *PHLCOMPATIBILITYIE;
|
|
|
|
#define Q931_PROTOCOL_X209 ((PDTYPE)0x05)
|
|
|
|
struct S_VARSTRUCT_UU
|
|
{
|
|
BOOLEAN Present;
|
|
BYTE ProtocolDiscriminator;
|
|
WORD UserInformationLength;
|
|
BYTE UserInformation[0x1000]; // 4k bytes should be good for now...
|
|
};
|
|
|
|
// The user to user element is a variable
|
|
typedef struct S_VARSTRUCT_UU USERUSERIE;
|
|
typedef struct S_VARSTRUCT_UU *PUSERUSERIE;
|
|
|
|
struct S_PARTY_NUMBER
|
|
{
|
|
BOOLEAN Present;
|
|
BYTE NumberType;
|
|
BYTE NumberingPlan;
|
|
BYTE PartyNumberLength;
|
|
BYTE PartyNumbers[MAXVARFIELDLEN];
|
|
};
|
|
|
|
// The called party number element is a variable
|
|
typedef struct S_PARTY_NUMBER CALLEDNUMBERIE;
|
|
typedef struct S_PARTY_NUMBER *PCALLEDNUMBERIE;
|
|
|
|
// Q932 defined message types
|
|
#define FACILITYMESSAGETYPE 0x62
|
|
#define IDENT_FACILITY 0x1C
|
|
typedef struct S_VARSTRUCT FACILITYIE;
|
|
typedef struct S_VARSTRUCT *PFACILITYIE;
|
|
|
|
|
|
// Generic structure for a Q.931 message
|
|
struct S_MESSAGE
|
|
{
|
|
PDTYPE ProtocolDiscriminator;
|
|
CRTYPE CallReference;
|
|
MESSAGEIDTYPE MessageType;
|
|
SHIFTIE Shift;
|
|
MOREDATAIE MoreData;
|
|
SENDCOMPLIE SendingComplete;
|
|
CONGESTIONIE CongestionLevel;
|
|
REPEATIE RepeatIndicator;
|
|
SEGMENTEDIE SegmentedMessage;
|
|
BEARERCAPIE BearerCapability;
|
|
CAUSEIE Cause;
|
|
CALLIDENTIE CallIdentity;
|
|
CALLSTATEIE CallState;
|
|
CHANIDENTIE ChannelIdentification;
|
|
PROGRESSIE ProgressIndicator;
|
|
NETWORKIE NetworkFacilities;
|
|
NOTIFICATIONINDIE NotificationIndicator;
|
|
DISPLAYIE Display;
|
|
DATEIE Date;
|
|
KEYPADIE Keypad;
|
|
SIGNALIE Signal;
|
|
INFORATEIE InformationRate;
|
|
ENDTOENDDELAYIE EndToEndTransitDelay;
|
|
TRANSITDELAYIE TransitDelay;
|
|
PLBINARYPARAMSIE PacketLayerBinaryParams;
|
|
PLWINDOWSIZEIE PacketLayerWindowSize;
|
|
PACKETSIZEIE PacketSize;
|
|
CLOSEDUGIE ClosedUserGroup;
|
|
REVERSECHARGEIE ReverseChargeIndication;
|
|
CALLINGNUMBERIE CallingPartyNumber;
|
|
CALLINGSUBADDRIE CallingPartySubaddress;
|
|
CALLEDNUMBERIE CalledPartyNumber;
|
|
CALLEDSUBADDRIE CalledPartySubaddress;
|
|
REDIRECTINGIE RedirectingNumber;
|
|
TRANSITNETIE TransitNetworkSelection;
|
|
RESTARTIE RestartIndicator;
|
|
LLCOMPATIBILITYIE LowLayerCompatibility;
|
|
HLCOMPATIBILITYIE HighLayerCompatibility;
|
|
FACILITYIE Facility;
|
|
USERUSERIE UserToUser;
|
|
};
|
|
|
|
typedef struct S_MESSAGE Q931MESSAGE;
|
|
typedef struct S_MESSAGE *PQ931MESSAGE;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Single routine for parsing Q931 messages
|
|
//-------------------------------------------------------------------
|
|
HRESULT
|
|
Q931ParseMessage(
|
|
BYTE *CodedBufferPtr,
|
|
DWORD CodedBufferLength,
|
|
PQ931MESSAGE Message);
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//==========================================================
|
|
// CAUSE FIELD DEFINITIONS
|
|
//==========================================================
|
|
#define CAUSE_EXT_BIT 0x80
|
|
#define CAUSE_CODING_CCITT 0x00
|
|
#define CAUSE_LOCATION_USER 0x00
|
|
#define CAUSE_RECOMMENDATION_Q931 0x00
|
|
|
|
#define CAUSE_VALUE_NORMAL_CLEAR 0x10
|
|
#define CAUSE_VALUE_USER_BUSY 0x11
|
|
#define CAUSE_VALUE_SECURITY_DENIED 0x12
|
|
#define CAUSE_VALUE_NO_ANSWER 0x13 // Callee does not answer
|
|
#define CAUSE_VALUE_REJECTED 0x15
|
|
#define CAUSE_VALUE_ENQUIRY_RESPONSE 0x1E
|
|
#define CAUSE_VALUE_NOT_IMPLEMENTED 0x4F
|
|
#define CAUSE_VALUE_INVALID_CRV 0x51
|
|
#define CAUSE_VALUE_INVALID_MSG 0x5F
|
|
#define CAUSE_VALUE_IE_MISSING 0x60
|
|
#define CAUSE_VALUE_IE_CONTENTS 0x64
|
|
#define CAUSE_VALUE_TIMER_EXPIRED 0x66
|
|
|
|
typedef struct _ERROR_MAP
|
|
{
|
|
int nErrorCode;
|
|
#ifdef UNICODE_TRACE
|
|
LPWSTR pszErrorText;
|
|
#else
|
|
LPSTR pszErrorText;
|
|
#endif
|
|
} ERROR_MAP;
|
|
|
|
typedef struct _BINARY_STRING
|
|
{
|
|
WORD length;
|
|
BYTE *ptr;
|
|
} BINARY_STRING;
|
|
|
|
typedef struct _Q931_SETUP_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
PCC_ALIASNAMES pCallerAliasList;
|
|
PCC_ALIASNAMES pCalleeAliasList;
|
|
PCC_ALIASNAMES pExtraAliasList;
|
|
PCC_ALIASITEM pExtensionAliasItem;
|
|
BOOL SourceAddrPresent;
|
|
BOOL CallerAddrPresent;
|
|
BOOL CalleeAddrPresent;
|
|
BOOL CalleeDestAddrPresent;
|
|
CC_ADDR SourceAddr; // originating addr
|
|
CC_ADDR CallerAddr; // gk addr
|
|
CC_ADDR CalleeAddr; // local addr
|
|
CC_ADDR CalleeDestAddr; // target destination addr
|
|
WORD wGoal;
|
|
WORD wCallType;
|
|
BOOL bCallerIsMC;
|
|
CC_CONFERENCEID ConferenceID;
|
|
|
|
CC_ENDPOINTTYPE EndpointType;
|
|
CC_VENDORINFO VendorInfo;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
BYTE bufProductValue[CC_MAX_PRODUCT_LENGTH];
|
|
BYTE bufVersionValue[CC_MAX_VERSION_LENGTH];
|
|
|
|
} Q931_SETUP_ASN;
|
|
|
|
typedef struct _Q931_RELEASE_COMPLETE_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
BYTE bReason;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
|
|
} Q931_RELEASE_COMPLETE_ASN;
|
|
|
|
typedef struct _Q931_CONNECT_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
BOOL h245AddrPresent;
|
|
CC_ADDR h245Addr;
|
|
CC_CONFERENCEID ConferenceID;
|
|
|
|
CC_ENDPOINTTYPE EndpointType;
|
|
CC_VENDORINFO VendorInfo;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
|
|
BYTE bufProductValue[CC_MAX_PRODUCT_LENGTH];
|
|
BYTE bufVersionValue[CC_MAX_VERSION_LENGTH];
|
|
|
|
} Q931_CONNECT_ASN;
|
|
|
|
typedef struct _Q931_ALERTING_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
CC_ADDR h245Addr;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
|
|
} Q931_ALERTING_ASN;
|
|
|
|
typedef struct _Q931_CALL_PROCEEDING_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
CC_ADDR h245Addr;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
|
|
} Q931_CALL_PROCEEDING_ASN;
|
|
|
|
typedef struct _Q931_FACILITY_ASN
|
|
{
|
|
BOOL NonStandardDataPresent;
|
|
CC_NONSTANDARDDATA NonStandardData;
|
|
CC_ADDR AlternativeAddr;
|
|
PCC_ALIASNAMES pAlternativeAliasList;
|
|
CC_CONFERENCEID ConferenceID;
|
|
BOOL ConferenceIDPresent;
|
|
BYTE bReason;
|
|
GUID CallIdentifier; // H.225 CallIdentifier
|
|
|
|
} Q931_FACILITY_ASN;
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Parsing Routines
|
|
//-------------------------------------------------------------------
|
|
|
|
HRESULT
|
|
Q931MakeEncodedMessage(
|
|
PQ931MESSAGE Message,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931SetupParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_SETUP_ASN *pParsedData);
|
|
|
|
HRESULT
|
|
Q931ReleaseCompleteParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_RELEASE_COMPLETE_ASN *pParsedData);
|
|
|
|
HRESULT
|
|
Q931ConnectParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_CONNECT_ASN *pParsedData);
|
|
|
|
HRESULT
|
|
Q931AlertingParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_ALERTING_ASN *pParsedData);
|
|
|
|
HRESULT
|
|
Q931ProceedingParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_CALL_PROCEEDING_ASN *pParsedData);
|
|
|
|
HRESULT
|
|
Q931FacilityParseASN(
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE *pEncodedBuf,
|
|
DWORD dwEncodedLength,
|
|
Q931_FACILITY_ASN *pParsedData);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Encoding Routines
|
|
//-------------------------------------------------------------------
|
|
|
|
// routines for the Setup Message:
|
|
HRESULT
|
|
Q931SetupEncodePDU(
|
|
WORD wCallReference,
|
|
char *pszDisplay,
|
|
char *pszCalledPartyNumber,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931SetupEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_ADDR *pCallerAddr,
|
|
CC_ADDR *pCalleeAddr,
|
|
WORD wGoal,
|
|
WORD wCallType,
|
|
BOOL bCallerIsMC,
|
|
CC_CONFERENCEID *pConferenceID,
|
|
PCC_ALIASNAMES pCallerAliasList,
|
|
PCC_ALIASNAMES pCalleeAliasList,
|
|
PCC_ALIASNAMES pExtraAliasList,
|
|
PCC_ALIASITEM pExtensionAliasItem,
|
|
PCC_VENDORINFO pVendorInfo,
|
|
BOOL bIsTerminal,
|
|
BOOL bIsGateway,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
// routines for the Release Complete Message:
|
|
HRESULT
|
|
Q931ReleaseCompleteEncodePDU(
|
|
WORD wCallReference,
|
|
BYTE *pbCause,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931ReleaseCompleteEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_CONFERENCEID *pConferenceID, // must be able to support 16 byte conf id's!
|
|
BYTE *pbReason,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
// routines for the Connect Message:
|
|
HRESULT
|
|
Q931ConnectEncodePDU(
|
|
WORD wCallReference,
|
|
char *pszDisplay,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931ConnectEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_CONFERENCEID *pConferenceID, // must be able to support 16 byte conf id's!
|
|
CC_ADDR *h245Addr,
|
|
PCC_ENDPOINTTYPE pEndpointType,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
// routines for the Alerting Message:
|
|
HRESULT
|
|
Q931AlertingEncodePDU(
|
|
WORD wCallReference,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931AlertingEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_ADDR *h245Addr,
|
|
PCC_ENDPOINTTYPE pEndpointType,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
// routines for the Proceeding Message:
|
|
HRESULT
|
|
Q931ProceedingEncodePDU(
|
|
WORD wCallReference,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931ProceedingEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_ADDR *h245Addr,
|
|
PCC_ENDPOINTTYPE pEndpointType,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
HRESULT
|
|
Q931FacilityEncodePDU(
|
|
WORD wCallReference,
|
|
BINARY_STRING *pUserUserData,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
HRESULT
|
|
Q931FacilityEncodeASN(
|
|
PCC_NONSTANDARDDATA pNonStandardData,
|
|
CC_ADDR *AlternativeAddr,
|
|
BYTE bReason,
|
|
CC_CONFERENCEID *pConferenceID,
|
|
PCC_ALIASNAMES pAlternativeAliasList,
|
|
ASN1_CODER_INFO *pWorld,
|
|
BYTE **ppEncodedBuf,
|
|
DWORD *pdwEncodedLength,
|
|
LPGUID pCallIdentifier);
|
|
|
|
HRESULT
|
|
Q931StatusEncodePDU(
|
|
WORD wCallReference,
|
|
char *pszDisplay,
|
|
BYTE bCause,
|
|
BYTE bCallState,
|
|
BYTE **CodedBufferPtr,
|
|
DWORD *CodedBufferLength);
|
|
|
|
void
|
|
Q931FreeEncodedBuffer(ASN1_CODER_INFO *pWorld, BYTE *pEncodedBuf);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif Q931PAR_H
|