windows-nt/Source/XPSP1/NT/termsrv/remdsk/rds/t120/h/pktcoder.h
2020-09-26 16:20:57 +08:00

193 lines
4.7 KiB
C++

/*
* pktcoder.h
*
* Copyright (c) 1993 - 1995 by DataBeam Corporation, Lexington, KY
*
* Abstract:
* This is the interface file for the PacketCoder class. This
* is an abstract base class which cannot be directly instantiated, but
* rather, exists to be inherited from. It defines a set of virtual
* member functions which will be shared by all classes that inherit from
* this one. This class defines the behaviors necessary to encode,
* decode, and manipulate Protocol Data Unit (PDU) structures.
*
* Caveats:
* None.
*
* Author:
* John B. O'Nan
*/
#ifndef _PACKETCODER_
#define _PACKETCODER_
/*
* Macros.
*/
#define BASIC_ENCODING_RULES 0
#define PACKED_ENCODING_RULES 1
/*
* This enumeration defines the various errors that can be returned during
* the use of a PacketCoder object.
*/
typedef enum
{
PACKET_CODER_NO_ERROR,
PACKET_CODER_BAD_REVERSE_ATTEMPT,
PACKET_CODER_INCOMPATIBLE_PROTOCOL
} PacketCoderError;
typedef PacketCoderError * PPacketCoderError;
/*
* This is the class definition for class PacketCoder
*/
class PacketCoder
{
public:
virtual ~PacketCoder ();
virtual BOOL Encode (LPVOID pdu_structure,
int pdu_type,
UINT rules_type,
LPBYTE *encoding_buffer,
UINT *encoding_buffer_length) = 0;
virtual BOOL Decode (LPBYTE encoded_buffer,
UINT encoded_buffer_length,
int pdu_type,
UINT rules_type,
LPVOID *pdecoding_buffer,
UINT *pdecoding_buffer_length) = 0;
virtual DBBoolean IsMCSDataPacket ( LPBYTE encoded_buffer,
UINT rules_type) = 0;
virtual void FreeEncoded (LPBYTE encoded_buffer) = 0;
virtual void FreeDecoded (int pdu_type, LPVOID decoded_buffer) = 0;
};
typedef PacketCoder * PPacketCoder;
/*
* ~PacketCoder ()
*
* Functional Description:
* This is a virtual destructor. It does not actually do anything in this
* class.
*
* Formal Parameters:
* None.
*
* Return Value:
* None.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* void Encode ( LPVOID pdu_structure,
* int pdu_type,
* LPBYTE *encoding_buffer,
* UINT *encoding_buffer_length)
*
* Functional Description:
* This function encodes Protocol data units (PDU's) into ASN.1 compliant
* byte streams.
* The coder allocates the buffer space for the encoded data.
*
* Formal Parameters:
* pdu_structure (i) Pointer to structure holding PDU data.
* pdu_type (i) Define indicating type of PDU.
* encoding_buffer (o) Pointer to buffer to hold encoded data.
* encoding_buffer_length (o) Pointer to length of buffer for encoded data.
*
* Return Value:
* None.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* void Decode ( LPBYTE encoded_buffer,
* UINT encoded_buffer_length,
* int pdu_type,
* LPVOID decoding_buffer,
* UINT decoding_buffer_length,
* UINT *pulDataOffset)
*
* Functional Description:
* This function decodes ASN.1 compliant byte streams into the
* appropriate PDU structures.
*
* Formal Parameters:
* encoded_buffer (i) Pointer to buffer holding data to decode.
* encoded_buffer_length (i) Length of buffer holding data to decode.
* pdu_type (o) Returns type of PDU.
* decoding_buffer (o) Pointer to buffer to hold the decoded data.
* decoding_buffer_length (i) Length of buffer to hold the decoded data.
* pulDataOffset (o) Pointer to a value that stores the offset of the data in an encoded MCS data packet.
*
* Return Value:
* None.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* void CopyDecodedData ( LPVOID pdu_source_structure,
* LPVOID pdu_destination_structure,
* int pdu_type)
*
* Functional Description:
* This function makes a copy of the non-encoded PDU structure. It returns
* the length of the structure it has created. Normally, this will just
* be the length of the source structure but the length is returned for
* added flexibility later.
*
* Formal Parameters:
* pdu_source_structure(i) Pointer to structure holding PDU data.
* pdu_destination_structure(o) Pointer to structure to hold copy of
* PDU data.
* pdu_type (i) The type of PDU to copy.
*
* Return Value:
* Size of the destination PDU structure.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* DBBoolean IsMCSDataPacket ()
*
* Functional Description:
* This function determines whether the encoded packet is an MCS Data packet
* or not.
*
* Formal Parameters:
* encoded_buffer (i) Pointer to buffer holding the encoded PDU.
* rules_type (i) The used encoding rules.
*
* Return value:
* TRUE, if the packet is an MCS Data packet. FALSE, otherwise.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
#endif