#ifndef __h323ics_h323asn1_h #define __h323ics_h323asn1_h #include "q931msg.h" DWORD H225EncodePdu ( IN DWORD PduType, IN PVOID PduStructure, OUT PUCHAR * ReturnBuffer, OUT PDWORD ReturnBufferLength); DWORD H225DecodePdu ( IN PUCHAR Buffer, IN DWORD BufferLength, IN DWORD PduType, OUT PVOID * ReturnPduStructure); DWORD H225FreePdu ( IN DWORD PduType, IN PVOID PduStructure); DWORD H225FreeBuffer ( IN PUCHAR Buffer); DWORD H245EncodePdu ( IN DWORD PduType, IN PVOID PduStructure, OUT PUCHAR * ReturnBuffer, OUT PDWORD ReturnBufferLength); DWORD H245DecodePdu ( IN PUCHAR Buffer, IN DWORD BufferLength, IN DWORD PduType, OUT PVOID * ReturnPduStructure); DWORD H245FreePdu ( IN DWORD PduType, IN PVOID PduStructure); DWORD H245FreeBuffer ( IN PUCHAR Buffer); // These macros define declarations for inline functions. // This provides type safety when encoding and decoding certain PDUs. #define DECLARE_CODER_FUNCS(MODULE,STRUCTURE) \ /* static */ __inline DWORD MODULE ## EncodePdu_ ## STRUCTURE \ (STRUCTURE * PduStructure, OUT PUCHAR * ReturnBuffer, OUT PDWORD ReturnBufferLength) \ { return MODULE ## EncodePdu (STRUCTURE ## _PDU, PduStructure, ReturnBuffer, ReturnBufferLength); } \ /* static */ __inline DWORD MODULE ## DecodePdu_ ## STRUCTURE \ (IN PUCHAR Buffer, IN DWORD BufferLength, OUT STRUCTURE ** ReturnPduStructure) \ { return MODULE ## DecodePdu (Buffer, BufferLength, STRUCTURE ## _PDU, (PVOID *) ReturnPduStructure); } \ /* static */ __inline DWORD MODULE ## FreePdu_ ## STRUCTURE \ (IN STRUCTURE * PduStructure) \ { return MODULE ## FreePdu (STRUCTURE ## _PDU, PduStructure); } DECLARE_CODER_FUNCS (H225, RasMessage) DECLARE_CODER_FUNCS (H225, H323_UserInformation) DECLARE_CODER_FUNCS (H245, MultimediaSystemControlMessage) void H323ASN1Initialize (void); void H323ASN1Shutdown (void); HRESULT EncodeQ931PDU( IN Q931_MESSAGE *pQ931msg, IN H323_UserInformation *pUserInformation, OUT BYTE **ppReturnEncodedData, OUT DWORD *pReturnEncodedDataLength ); HRESULT EncodeH245PDU( IN MultimediaSystemControlMessage &rH245pdu, OUT BYTE **ppReturnEncodedData, OUT DWORD *pReturnEncodedDataLength); HRESULT DecodeQ931PDU( IN BYTE *pbData, IN DWORD dwDataLen, OUT Q931_MESSAGE **ppReturnQ931msg, OUT H323_UserInformation **ppReturnH323UserInfo); HRESULT DecodeH245PDU( IN LPBYTE Data, IN DWORD DataLength, OUT MultimediaSystemControlMessage **ppReturnH245pdu); HRESULT Q931EncodeCallProceedingMessage( IN WORD CallRefVal, IN OUT Q931_MESSAGE *pReturnQ931msg, IN OUT H323_UserInformation *pReturnH323UserInfo); HRESULT Q931EncodeReleaseCompleteMessage( IN WORD CallRefVal, IN OUT Q931_MESSAGE *pReturnQ931msg, IN OUT H323_UserInformation *pReturnH323UserInfo); // These functions should only be used for PDU structures generated // using the decode functions. // If you allocate the PDU structures yourself (for eg. CallProceeding PDU) // then you need to free it yourself depending on how you allocated the // structure. void FreeQ931PDU( IN Q931_MESSAGE *pQ931msg, IN H323_UserInformation *pH323UserInformation); void FreeH245PDU( MultimediaSystemControlMessage *pH245pdu); #endif // __h323ics_h323asn1_h