dect
/
asterisk
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asterisk/addons/ooh323c/src/ooq931.h

767 lines
25 KiB
C

/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooq931.h
* This file contains functions to support call signalling.
*/
#ifndef _OOQ931HDR_H_
#define _OOQ931HDR_H_
#include "ooasn1.h"
#include "ootypes.h"
#include "H323-MESSAGES.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef EXTERN
#ifdef MAKE_DLL
#define EXTERN __declspec(dllexport)
#else
#define EXTERN
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
* @defgroup q931 Q.931/H.2250 Message Handling
* @{
*/
/* Maximum length of the Calling/Called party number number */
#define OO_MAX_NUMBER_LENGTH 50
/* Maximum value for a call token identifier */
#define OO_MAX_CALL_TOKEN 9999
/* Q.931 packet must be at least 5 bytes long */
#define Q931_E_TOOSHORT (-1001)
/* callReference field must be 2 bytes long */
#define Q931_E_INVCALLREF (-1002)
/* invalid length of message */
#define Q931_E_INVLENGTH (-1003)
enum Q931MsgTypes {
Q931NationalEscapeMsg = 0x00,
Q931AlertingMsg = 0x01,
Q931CallProceedingMsg = 0x02,
Q931ConnectMsg = 0x07,
Q931ConnectAckMsg = 0x0f,
Q931ProgressMsg = 0x03,
Q931SetupMsg = 0x05,
Q931SetupAckMsg = 0x0d,
Q931ResumeMsg = 0x26,
Q931ResumeAckMsg = 0x2e,
Q931ResumeRejectMsg = 0x22,
Q931SuspendMsg = 0x25,
Q931SuspendAckMsg = 0x2d,
Q931SuspendRejectMsg = 0x21,
Q931UserInformationMsg = 0x20,
Q931DisconnectMsg = 0x45,
Q931ReleaseMsg = 0x4d,
Q931ReleaseCompleteMsg = 0x5a,
Q931RestartMsg = 0x46,
Q931RestartAckMsg = 0x4e,
Q931SegmentMsg = 0x60,
Q931CongestionCtrlMsg = 0x79,
Q931InformationMsg = 0x7b,
Q931NotifyMsg = 0x6e,
Q931StatusMsg = 0x7d,
Q931StatusEnquiryMsg = 0x75,
Q931FacilityMsg = 0x62
};
enum Q931IECodes {
Q931BearerCapabilityIE = 0x04,
Q931CauseIE = 0x08,
Q931FacilityIE = 0x1c,
Q931ProgressIndicatorIE = 0x1e,
Q931CallStateIE = 0x14,
Q931DisplayIE = 0x28,
Q931SignalIE = 0x34,
Q931CallingPartyNumberIE = 0x6c,
Q931CalledPartyNumberIE = 0x70,
Q931RedirectingNumberIE = 0x74,
Q931UserUserIE = 0x7e,
Q931KeypadIE = 0x2c
};
enum Q931InformationTransferCapability {
Q931TransferSpeech,
Q931TransferUnrestrictedDigital = 8,
Q931TransferRestrictedDigital = 9,
Q931Transfer3_1kHzAudio = 16,
Q931TrasnferUnrestrictedDigitalWithTones = 17,
Q931TransferVideo = 24
};
enum Q931CauseValues {
Q931UnallocatedNumber = 0x01,
Q931NoRouteToNetwork = 0x02,
Q931NoRouteToDestination = 0x03,
Q931ChannelUnacceptable = 0x06,
Q931NormalCallClearing = 0x10,
Q931UserBusy = 0x11,
Q931NoResponse = 0x12,
Q931NoAnswer = 0x13,
Q931SubscriberAbsent = 0x14,
Q931CallRejected = 0x15,
Q931NumberChanged = 0x16,
Q931Redirection = 0x17,
Q931DestinationOutOfOrder = 0x1b,
Q931InvalidNumberFormat = 0x1c,
Q931NormalUnspecified = 0x1f,
Q931StatusEnquiryResponse = 0x1e,
Q931NoCircuitChannelAvailable = 0x22,
Q931NetworkOutOfOrder = 0x26,
Q931TemporaryFailure = 0x29,
Q931Congestion = 0x2a,
Q931RequestedCircuitUnAvailable = 0x2c,
Q931ResourcesUnavailable = 0x2f,
Q931IncompatibleDestination = 0x58,
Q931ProtocolErrorUnspecified = 0x6f,
Q931RecoveryOnTimerExpiry = 0x66,
Q931InvalidCallReference = 0x51,
Q931ErrorInCauseIE = 0
};
enum Q931SignalInfo {
Q931SignalDialToneOn,
Q931SignalRingBackToneOn,
Q931SignalInterceptToneOn,
Q931SignalNetworkCongestionToneOn,
Q931SignalBusyToneOn,
Q931SignalConfirmToneOn,
Q931SignalAnswerToneOn,
Q931SignalCallWaitingTone,
Q931SignalOffhookWarningTone,
Q931SignalPreemptionToneOn,
Q931SignalTonesOff = 0x3f,
Q931SignalAlertingPattern0 = 0x40,
Q931SignalAlertingPattern1,
Q931SignalAlertingPattern2,
Q931SignalAlertingPattern3,
Q931SignalAlertingPattern4,
Q931SignalAlertingPattern5,
Q931SignalAlertingPattern6,
Q931SignalAlertingPattern7,
Q931SignalAlretingOff = 0x4f,
Q931SignalErrorInIE = 0x100
};
enum Q931NumberingPlanCodes {
Q931UnknownPlan = 0x00,
Q931ISDNPlan = 0x01,
Q931DataPlan = 0x03,
Q931TelexPlan = 0x04,
Q931NationalStandardPlan = 0x08,
Q931PrivatePlan = 0x09,
Q931ReservedPlan = 0x0f
};
enum Q931TypeOfNumberCodes {
Q931UnknownType = 0x00,
Q931InternationalType = 0x01,
Q931NationalType = 0x02,
Q931NetworkSpecificType = 0x03,
Q931SubscriberType = 0x04,
Q931AbbreviatedType = 0x06,
Q931ReservedType = 0x07
};
enum Q931CodingStandard{
Q931CCITTStd = 0,
Q931ReservedInternationalStd,
Q931NationalStd,
Q931NetworkStd
};
enum Q931TransferMode {
Q931TransferCircuitMode = 0, /* 00 */
Q931TransferPacketMode = 2 /* 10 */
};
enum Q931TransferRate{
Q931TransferRatePacketMode = 0x00, /* 00000 */
Q931TransferRate64Kbps = 0x10, /* 10000 */
Q931TransferRate128kbps = 0x11, /* 10001 */
Q931TransferRate384kbps = 0x13, /* 10011 */
Q931TransferRate1536kbps = 0x15, /* 10101 */
Q931TransferRate1920kbps = 0x17 /* 10111 */
};
enum Q931UserInfoLayer1Protocol{
Q931UserInfoLayer1CCITTStdRate = 1,
Q931UserInfoLayer1G711ULaw,
Q931UserInfoLayer1G711ALaw,
Q931UserInfoLayer1G721ADPCM,
Q931UserInfoLayer1G722G725,
Q931UserInfoLayer1H261,
Q931UserInfoLayer1NonCCITTStdRate,
Q931UserInfoLayer1CCITTStdRateV120,
Q931UserInfoLayer1X31
};
/*
Structure to build store outgoing encoded UUIE
The different fields in the structure have octet lengths
as specified in the spec.
*/
typedef struct Q931InformationElement {
int discriminator;
int offset;
int length;
ASN1OCTET data[1];
} Q931InformationElement;
/**
* Q.931 message structure. Contains context for memory allocation,
* protocol discriminator, call reference, meesage type and list of
* user-user information elements (IEs).
*/
typedef struct Q931Message {
ASN1UINT protocolDiscriminator;
ASN1UINT callReference;
ASN1BOOL fromDestination;
ASN1UINT messageType; /* Q931MsgTypes */
ASN1UINT tunneledMsgType; /* The H245 message this message is tunneling*/
ASN1INT logicalChannelNo; /* channel number associated with tunneled */
/* message, 0 if no channel */
DList ies;
Q931InformationElement *bearerCapabilityIE;
Q931InformationElement *callingPartyNumberIE;
Q931InformationElement *calledPartyNumberIE;
Q931InformationElement *causeIE;
Q931InformationElement *keypadIE;
H225H323_UserInformation *userInfo;
} Q931Message;
/**
* This structure is used to hold an H.323 alias address.
*/
typedef struct OOAliases {
int type; /*!< H.225 AliasAddress choice option (t value) */
char *value; /*!< H.225 AliasAddress value */
OOBOOL registered;
struct OOAliases *next;
} OOAliases;
#define ooAliases OOAliases
struct OOH323CallData;
/*
* These are message callbacks which can be used by user applications
* to perform application specific things on receiving a particular
* message or before sending a particular message. For ex. user application
* can change values of some parameters of setup message before it is actually
* sent out.
*/
/**
* This callback is triggered when an H.225 SETUP message is received by
* the application.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
* @return OO_OK if message processing successful or OO_FAILED if not.
*/
typedef int (*cb_OnReceivedSetup)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered when an H.225 CONNECT message is received by
* the application.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
* @return OO_OK if message processing successful or OO_FAILED if not.
*/
typedef int (*cb_OnReceivedConnect)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered after an H.225 SETUP message has been
* constructed and is ready to be sent out. It provides the application
* with an opportunity to add additional non-standard information.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
* @return OO_OK if message processing successful or OO_FAILED if not.
*/
typedef int (*cb_OnBuiltSetup)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered after an H.225 CONNECT message has been
* constructed and is ready to be sent out. It provides the application
* with an opportunity to add additional non-standard information.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
* @return OO_OK if message processing successful or OO_FAILED if not.
*/
typedef int (*cb_OnBuiltConnect)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This structure holds the various callback functions that are
* triggered when H.225 messages are received or constructed.
* @see ooH323EpSetH225MsgCallbacks
*/
typedef struct OOH225MsgCallbacks {
cb_OnReceivedSetup onReceivedSetup;
cb_OnReceivedConnect onReceivedConnect;
cb_OnBuiltSetup onBuiltSetup;
cb_OnBuiltConnect onBuiltConnect;
} OOH225MsgCallbacks;
/**
* This function is invoked to decode a Q931 message.
*
* @param call Handle to call which owns the message.
* @param msg Pointer to the Q931 message
* @param length Length of the encoded data
* @param data Pointer to the data to be decoded
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooQ931Decode
(struct OOH323CallData *call, Q931Message* msg, int length, ASN1OCTET *data);
/**
* This function is used to decode the UUIE of the message from the list of
* ies. It decodes the User-User ie and populates the userInfo field of the
* message.
* @param q931Msg Pointer to the message whose User-User ie has to be
* decoded.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooDecodeUUIE(Q931Message *q931Msg);
/**
* This function is used to encode the UUIE field of the Q931 message.
* It encodes UUIE and adds the encoded data to the list of ies.
* @param q931msg Pointer to the Q931 message whose UUIE field has to be
* encoded.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooEncodeUUIE(Q931Message *q931msg);
/**
* This function is invoked to retrieve an IE element from a Q931 message.
*
* @param q931msg Pointer to the Q931 message
* @param ieCode IE code for the IE element to be retrieved
*
* @return Pointer to a Q931InformationElement contating
* the IE element.
*/
EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg,
int ieCode);
/**
* This function is invoked to print a Q931 message.
*
* @param q931msg Pointer to the Q931 message
*
* @return - none
*/
EXTERN void ooQ931Print (const Q931Message* q931msg);
/**
* This function is invoked to create an outgoing Q931 message.
*
* @param msg Reference to the pointer of type Q931 message.
* @param msgType Type of Q931 message to be created
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooCreateQ931Message(Q931Message **msg, int msgType);
/**
* This function is invoked to generate a unique call reference number.
*
* @return - call reference number
*/
EXTERN ASN1USINT ooGenerateCallReference(void);
/**
* This function is used to generate a unique call identifier for the call.
* @param callid Pointer to the callid structure, which will be populated
* with the generated callid.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
/**
* This function is invoked to release the memory used up by a Q931 message
*
* @param q931Msg Pointer to a Q931 message which has to be freed.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooFreeQ931Message(Q931Message *q931Msg);
/**
* This function is invoked to retrive the outgoing message buffer for
* Q931 message
*
* @param call Pointer to call for which outgoing Q931 message has to be
* retrieved.
* @param msgbuf Pointer to a buffer in which retrieved message will
* be returned.
* @param len Pointer to int in which length of the buffer will
* be returned.
* @param msgType Pointer to integer in which message type of the ougoing
* message is returned.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooGetOutgoingQ931Msgbuf
(struct OOH323CallData *call, ASN1OCTET * msgbuf, int* len, int *msgType);
/**
* This function is invoked to send a ReleaseComplete message for
* the currently active call.
*
* @param call Pointer to the call for which ReleaseComplete message have
* to be sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendReleaseComplete(struct OOH323CallData *call);
/**
* This function is invoked to send a call proceeding message in response to
* received setup message.
*
* @param call Pointer to the call for which CallProceeding message have to
* be sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendCallProceeding(struct OOH323CallData *call);
/**
* This function is invoked to send alerting message in response to received
* setup message.
*
* @param call Pointer to the call for which Alerting message have to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendAlerting(struct OOH323CallData *call);
/**
* This function is invoked to send Facility message.
*
* @param call Pointer to the call for which Facility message have to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendFacility(struct OOH323CallData *call);
/**
* This function is used to send dtmf data as Q931 keypad information element
* as part of information message.
* @param call Pointer to the call for dtmf data has to be sent.
* @param data Dtmf data to be sent.
*
* @return OO_OK, on success; OO_FAILED, on failure.
*/
EXTERN int ooQ931SendDTMFAsKeyPadIE
(struct OOH323CallData *call, const char* data);
/**
* This function is invoked to send a Connect message in response to received
* setup message.
*
* @param call Pointer to the call for which connect message has to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendConnect(struct OOH323CallData *call);
/**
* This function is used to send a SETUP message for outgoing call. It first
* creates an H.225 TCP connection with the remote end point and then sends
* SETUP message over this connection.
* @param dest Destination - IP:Port/alias.
* @param callToken Unique token for the new call.
* @param opts Call specific options. If passed a non-null value, these
* options will override global endpoint settings.
*
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooH323MakeCall(char *dest, char *callToken, ooCallOptions *opts);
/**
* Helper function used to make a call once it is approved by the Gk.
* In case of no gk, this function is directly called to make a call.
* @param call Handle to the new call.
*
* @return OO_OK, on success. OO_FAILED, on failure
*/
int ooH323CallAdmitted( struct OOH323CallData *call);
/**
* This function is used to handle a call forward request sent to local
* endpoint by remote endpoint.
* @param call Handle to the call which is being forwarded
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323HandleCallFwdRequest(struct OOH323CallData *call);
/**
* This function is used for forwarding/redirecting a call to third party.
* @param callToken callToken for the call which has to be redirected.
* @param dest Address to which call has to be forwarded. Can be
* IP:Port or alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323ForwardCall(char* callToken, char *dest);
/**
* This function is used to hangup a currently active call. It sets the call
* state to CLEARING and initiates closing of all logical channels.
* @param callToken Unique token of the call to be hanged.
* @param reason Reason for ending call.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323HangCall(char * callToken, OOCallClearReason reason);
/**
* Function to accept a call by sending connect. This function is used
* as a helper function to ooSendConnect.
* @param call Pointer to the call for which connect has to be sent
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooAcceptCall(struct OOH323CallData *call);
/*
* An helper function to ooMakeCall.
* @param call Pointer to the new call.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323MakeCall_helper(struct OOH323CallData *call);
/**
* This function is used to parse the destination
* @param call Handle to related call.
* @param dest Destination string to be parsed.
* @param parsedIP Pointer to buffer in which parsed ip:port will be returned.
* @param len Length of the buffer passed.
* @param aliasList Aliase List in which new aliases will be added.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooParseDestination
(struct OOH323CallData *call, char *dest, char *parsedIP, unsigned len,
OOAliases** aliasList);
/**
* This function is used to generate a new call token
* @param callToken Handle to the buffer in which new call token will be
* returned
* @param size size of the buffer
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooGenerateCallToken (char *callToken, size_t size);
/**
* This function sends an encoded H.245 message buffer as a tunneled
* H.245 Facility message.
* @param call Pointer to the call for which H.245 message has to
* be tunneled.
* @param msgbuf Pointer to the encoded H.245 message to be tunneled.
*
* @param h245Len Length of the encoded H.245 message buffer.
* @param h245MsgType Type of the H245 message
* @param associatedChan The logical channel number with which the tunneled
* message is associated. In case of no channel, this
* value should be 0.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooSendAsTunneledMessage
(struct OOH323CallData *call, ASN1OCTET* msgbuf,
int h245Len, int h245MsgType, int associatedChan);
/**
* This function is used to encode an H.225 message.
* @param call Handle to the call.
* @param pq931Msg Pointer to the message to be encoded.
* @param msgbuf Pointer to the buffer in which encoded message will
* be returned.
* @param size Size of the buffer passed.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg,
char *msgbuf, int size);
/**
* This is a callback function which is called when there is no CONNECT
* response from the remote endpoint after the SETUP has been sent and timeout
* period has passed.
* @param data The callback data registered at the time of timer
* creation.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooCallEstbTimerExpired(void *data);
/**
* This function is used to add a keypad IE to a Q931 message for sending dtmf.
* @param pmsg Q931 message to which keypad ie has to be
* added.
* @param data DTMF data to be sent.
*
* @return OO_OK on success, OO_FAILED, on failure.
*/
EXTERN int ooQ931SetKeypadIE(Q931Message *pmsg, const char* data);
/**
* This function is used to add a bearer capability IE to a Q931 message.
* @param pmsg Q931 message to which bearer capability ie has to be
* added.
* @param codingStandard Coding standard to be used.
* @param capability Information transfer capability
* @param transferMode Information transfer mode.(circuit/packet modes).
* @param transferRate Information transfer rate.
* @param userInfoLayer1 User information layer 1 protocol.
*
* @return OO_OK on success, OO_FAILED, on failure.
*/
EXTERN int ooSetBearerCapabilityIE
(Q931Message *pmsg, enum Q931CodingStandard codingStandard,
enum Q931InformationTransferCapability capability,
enum Q931TransferMode transferMode, enum Q931TransferRate transferRate,
enum Q931UserInfoLayer1Protocol userInfoLayer1);
/**
* This function is used to add a called party number ie to a q931 message.
* @param pmsg Q931 message to which CalledPartyNumber IE has to be
* added.
* @param number Number for called party.
* @param plan Numbering Plan used
* @param type Type of number
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931SetCalledPartyNumberIE
(Q931Message *pmsg, const char *number, unsigned plan, unsigned type);
/**
* This function is used to add a CallingPartyNumber ie to a q931 message.
* @param pmsg Q931 message to which CallingPartyNumber IE has to be
* added.
* @param number Number for calling party.
* @param plan Numbering Plan used
* @param type Type of number
* @param presentation Presentation of the address is allowed or restricted.
* @param screening Whether address was provided by endpoint or screened
* by gatekeeper.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931SetCallingPartyNumberIE
(Q931Message *pmsg, const char *number, unsigned plan, unsigned type,
unsigned presentation, unsigned screening);
/**
* This function is used to set a cause ie for a q931 message.
* @param pmsg Valid Q931 Message
* @param cause Q931 Cause Value
* @param coding coding standard used. 0 for ITU-T standard coding
* @param location location. 0 for user.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931SetCauseIE
(Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
unsigned location);
/**
* This function is used to convert a call clear reason to cause and
* reason code. It is used when local user is endoing the call and
* sending releaseComplete.
* @param clearReason Reason for ending call.
* @param cause Pointer to Q931CauseVaules enum in which cause
* will be returned.
* @param reasonCode Pointer to unsigned int in which reasonCode will
* be returned.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931GetCauseAndReasonCodeFromCallClearReason
(OOCallClearReason clearReason, enum Q931CauseValues *cause,
unsigned *reasonCode);
/**
* This function is used to convert a cause value and reason code received
* in ReleaseComplete message from remote endpoint into a CallClearReason.
* @param cause cause value received.
* @param reasonCode reasonCode received.
*
* @return Returns a CallClearReason.
*/
EXTERN OOCallClearReason ooGetCallClearReasonFromCauseAndReasonCode
(enum Q931CauseValues cause, unsigned reasonCode);
/**
* This function is used to retrieve the description text for a
* message type.
*
* @param msgType Message type.
* @return The text description string.
*/
EXTERN const char* ooGetMsgTypeText (int msgType);
/**
* This function is used to retrieve the text description for a Q931 Cause
* value in Cause IE.
* @param val Q931 Cause value
* @return The text description string
*/
EXTERN const char* ooGetQ931CauseValueText (int val);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __Q931HDR_H */