Context Management Functions
Classes | |
struct | OSRTErrLocn |
struct | OSRTErrInfo |
struct | OSRTErrInfoList |
struct | OSRTBuffer |
struct | OSRTBufSave |
struct | OSBufferIndex |
struct | OSCTXT |
Defines | |
#define | OSRTERRSTKSIZ 8 |
#define | OSRTMAXERRPRM 5 |
#define | OSDIAG 0x80000000 |
#define | OSTRACE 0x40000000 |
#define | OSDISSTRM 0x20000000 |
#define | OSNOSTRMBACKOFF 0x08000000 |
#define | OS3GMOBORIG 0x04000000 |
#define | OSCONTCLOSED 0x02000000 |
#define | OSCDECL |
#define | OSRT_GET_FIRST_ERROR_INFO(pctxt) |
#define | OSRT_GET_LAST_ERROR_INFO(pctxt) |
#define | rtxCtxtGetMsgPtr(pctxt) (pctxt)->buffer.data |
#define | rtxCtxtGetMsgLen(pctxt) (pctxt)->buffer.byteIndex |
#define | rtxCtxtTestFlag(pctxt, mask) (((pctxt)->flags & mask) != 0) |
#define | rtxCtxtPeekElemName(pctxt) |
#define | rtxByteAlign(pctxt) |
#define | rtxCtxtSetProtocolVersion(pctxt, value) (pctxt)->version = value |
#define | rtxMarkBitPos(pctxt, ppos, pbitoff) (*(pbitoff) = (OSUINT8) (pctxt)->buffer.bitOffset, rtxMarkPos (pctxt, ppos)) |
#define | rtxResetToBitPos(pctxt, pos, bitoff) ((pctxt)->buffer.bitOffset = (OSUINT8) bitoff, rtxResetToPos (pctxt, pos)) |
#define | RTXCTXTPUSHARRAYELEMNAME(pctxt, name, idx) rtxCtxtPushArrayElemName(pctxt,OSUTF8(name),idx) |
#define | RTXCTXTPOPARRAYELEMNAME(pctxt) rtxCtxtPopArrayElemName(pctxt) |
#define | RTXCTXTPUSHELEMNAME(pctxt, name) rtxCtxtPushElemName(pctxt,OSUTF8(name)) |
#define | RTXCTXTPOPELEMNAME(pctxt) rtxCtxtPopElemName(pctxt) |
#define | RTXCTXTPUSHTYPENAME(pctxt, name) rtxCtxtPushTypeName(pctxt,OSUTF8(name)) |
#define | RTXCTXTPOPTYPENAME(pctxt) rtxCtxtPopTypeName(pctxt) |
Typedefs | |
typedef OSUINT32 | OSRTFLAGS |
typedef int(* | OSFreeCtxtAppInfoPtr )(struct OSCTXT *pctxt) |
typedef int(* | OSResetCtxtAppInfoPtr )(struct OSCTXT *pctxt) |
typedef void(* | OSFreeCtxtGlobalPtr )(struct OSCTXT *pctxt) |
typedef struct OSCTXT | OSCTXT |
Functions | |
int | rtxInitContext (OSCTXT *pctxt) |
int | rtxInitContextExt (OSCTXT *pctxt, OSMallocFunc malloc_func, OSReallocFunc realloc_func, OSFreeFunc free_func) |
int | rtxInitThreadContext (OSCTXT *pctxt, const OSCTXT *pSrcCtxt) |
int | rtxInitContextBuffer (OSCTXT *pctxt, OSOCTET *bufaddr, OSSIZE bufsiz) |
int | rtxCtxtSetBufPtr (OSCTXT *pctxt, OSOCTET *bufaddr, OSSIZE bufsiz) |
OSSIZE | rtxCtxtGetBitOffset (OSCTXT *pctxt) |
int | rtxCtxtSetBitOffset (OSCTXT *pctxt, OSSIZE offset) |
OSSIZE | rtxCtxtGetIOByteCount (OSCTXT *pctxt) |
int | rtxCheckContext (OSCTXT *pctxt) |
void | rtxFreeContext (OSCTXT *pctxt) |
void | rtxCopyContext (OSCTXT *pdest, OSCTXT *psrc) |
void | rtxCtxtSetFlag (OSCTXT *pctxt, OSUINT32 mask) |
void | rtxCtxtClearFlag (OSCTXT *pctxt, OSUINT32 mask) |
int | rtxCtxtPushArrayElemName (OSCTXT *pctxt, const OSUTF8CHAR *elemName, OSSIZE idx) |
int | rtxCtxtPushElemName (OSCTXT *pctxt, const OSUTF8CHAR *elemName) |
int | rtxCtxtPushTypeName (OSCTXT *pctxt, const OSUTF8CHAR *typeName) |
OSBOOL | rtxCtxtPopArrayElemName (OSCTXT *pctxt) |
const OSUTF8CHAR * | rtxCtxtPopElemName (OSCTXT *pctxt) |
const OSUTF8CHAR * | rtxCtxtPopTypeName (OSCTXT *pctxt) |
OSSIZE | rtxCtxtGetContainerRemBits (OSCTXT *pctxt) |
int | rtxCtxtPushContainerBytes (OSCTXT *pctxt, OSSIZE bytes) |
int | rtxCtxtPushContainerBits (OSCTXT *pctxt, OSSIZE bits) |
void | rtxCtxtPopContainer (OSCTXT *pctxt) |
void | rtxCtxtPopAllContainers (OSCTXT *pctxt) |
int | rtxPreInitContext (OSCTXT *pctxt) |
void | rtxMemHeapSetFlags (OSCTXT *pctxt, OSUINT32 flags) |
void | rtxMemHeapClearFlags (OSCTXT *pctxt, OSUINT32 flags) |
int | rtxMarkPos (OSCTXT *pctxt, OSSIZE *ppos) |
int | rtxResetToPos (OSCTXT *pctxt, OSSIZE pos) |
Detailed Description
Context initialization functions handle the allocation, initialization, and destruction of context variables (variables of type OSCTXT). These variables hold all of the working data used during the process of encoding or decoding a message. The context provides thread safe operation by isolating what would otherwise be global variables within this structure. The context variable is passed from function to function as a message is encoded or decoded and maintains state information on the encoding or decoding process.
Define Documentation
#define OSRT_GET_FIRST_ERROR_INFO | ( | pctxt | ) |
(((pctxt)->errInfo.list.head == 0) ? (OSRTErrInfo*)0 : \ (OSRTErrInfo*)((pctxt)->errInfo.list.head->data))
#define OSRT_GET_LAST_ERROR_INFO | ( | pctxt | ) |
(((pctxt)->errInfo.list.tail == 0) ? (OSRTErrInfo*)0 : \ (OSRTErrInfo*)((pctxt)->errInfo.list.tail->data))
#define rtxByteAlign | ( | pctxt | ) |
if ((pctxt)->buffer.bitOffset != 8) { \
(pctxt)->buffer.byteIndex++; (pctxt)->buffer.bitOffset = 8; }
This macro will byte-align the context buffer.
#define rtxCtxtGetMsgLen | ( | pctxt | ) | (pctxt)->buffer.byteIndex |
This macro returns the length of an encoded message. It will only work for in-memory encoding, not for encode to stream.
Note that this macro will not work with ASN.1 BER in-memory encoding. In this case, the BER-specific version of the function must be used.
- Parameters:
-
pctxt Pointer to a context structure.
#define rtxCtxtGetMsgPtr | ( | pctxt | ) | (pctxt)->buffer.data |
This macro returns the start address of an encoded message. If a static buffer was used, this is simply the start address of the buffer. If dynamic encoding was done, this will return the start address of the dynamic buffer allocated by the encoder.
Note that this macro will not work with ASN.1 BER in-memory encoding. In this case, the BER-specific version of the function must be used.
- Parameters:
-
pctxt Pointer to a context structure.
#define rtxCtxtPeekElemName | ( | pctxt | ) |
(((pctxt)->elemNameStack.count > 0) ? \ (const OSUTF8CHAR*)(pctxt)->elemNameStack.tail->data : (const OSUTF8CHAR*)0)
This macro returns the last element name from the context stack.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- Element name from top of stack or NULL if stack is empty.
#define rtxCtxtSetProtocolVersion | ( | pctxt, | |||
value | ) | (pctxt)->version = value |
This macro sets the protocol version in the context. This version number may be used in application code to do version specific operations. It is used in generated ASN.1 code with the extension addition version numbers to determine if an addition should be decoded.
For example, if this value is set to 8 and an extension addition group exists with version number 9 ([[ 9: ... ]]), its contents will not be decoded.
- Parameters:
-
pctxt Pointer to a context structure. value The version number value.
#define rtxCtxtTestFlag | ( | pctxt, | |||
mask | ) | (((pctxt)->flags & mask) != 0) |
This macro tests if the given bit flag is set in the context.
- Parameters:
-
pctxt - A pointer to a context structure. mask - Bit flag to be tested
Typedef Documentation
typedef int(* OSFreeCtxtAppInfoPtr)(struct OSCTXT *pctxt) |
OSRTFreeCtxtAppInfoPtr is a pointer to pctxt->pAppInfo free function, The pctxt->pAppInfo (pXMLInfo and pASN1Info) should contain the pointer to a structure and its first member should be a pointer to an appInfo free function.
typedef void(* OSFreeCtxtGlobalPtr)(struct OSCTXT *pctxt) |
OSRTFreeCtxtGlobalPtr is a pointer to a memory free function. This type describes the custom global memory free function generated by the compiler to free global nmemory. A pointer to a function of this type may be stored in the context gblFreeFunc field in order to free global data (pGlobalData) when rtxFreeContext is called.
typedef int(* OSResetCtxtAppInfoPtr)(struct OSCTXT *pctxt) |
OSRTResetCtxtAppInfoPtr is a pointer to pctxt->pAppInfo reset function, The pctxt->pAppInfo (pXMLInfo and pASN1Info) should contain the pointer to a structure and its second member should be a pointer to appInfo reset function.
Function Documentation
int rtxCheckContext | ( | OSCTXT * | pctxt | ) |
This function verifies that the given context structure is initialized and ready for use.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- Completion status of operation:
- 0 = success,
- RTERR_NOTINIT status code if not initialized
This function creates a copy of a context structure. The copy is a "shallow copy" (i.e. new copies of dynamic memory blocks held within the context are not made, only the pointers are transferred to the new context structure). This function is mainly for use from within compiler-generated code.
- Parameters:
-
pdest - Context structure to which data is to be copied. psrc - Context structure from which data is to be copied.
void rtxCtxtClearFlag | ( | OSCTXT * | pctxt, | |
OSUINT32 | mask | |||
) |
This function is used to clear a processing flag within the context structure.
- Parameters:
-
pctxt - A pointer to a context structure. mask - Mask containing bit(s) to be cleared.
OSSIZE rtxCtxtGetBitOffset | ( | OSCTXT * | pctxt | ) |
This function returns the total bit offset to the current element in the context buffer.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- Bit offset.
OSSIZE rtxCtxtGetContainerRemBits | ( | OSCTXT * | pctxt | ) |
Return the number of bits remaining to be decoded in the current length-constrained container, which is possibly the outer PDU.
See also rtxCtxtPushContainer(Bits|Bytes)/rtxCtxtPopContainer
- Parameters:
-
pctxt Pointer to context structure.
OSSIZE rtxCtxtGetIOByteCount | ( | OSCTXT * | pctxt | ) |
This function returns the count of bytes either written to a stream or memory buffer.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- I/O byte count.
void rtxCtxtPopAllContainers | ( | OSCTXT * | pctxt | ) |
Pop all containers from the container stack. This is useful for clearing the stack when an error has occured. It is invoked automatically by rtxErrReset.
- Parameters:
-
pctxt Pointer to context structure.
OSBOOL rtxCtxtPopArrayElemName | ( | OSCTXT * | pctxt | ) |
This function pops the last element name from the context stack. This name is assumed to be an array element name pushed by the rtxCtxtPushArrayElemName function. The name is therefore dynamic and memory is freed for it using the rtxMemFreePtr function.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- True if name popped from stack or false if stack is empty.
void rtxCtxtPopContainer | ( | OSCTXT * | pctxt | ) |
Notify the runtime layer of the end of decoding of a length-constrained container of the given length. This method should be called when the final bit to be decoded has been decoded.
This pops an entry off of pctxt->containerEndIndex
- Parameters:
-
pctxt Pointer to context structure.
const OSUTF8CHAR* rtxCtxtPopElemName | ( | OSCTXT * | pctxt | ) |
This function pops the last element name from the context stack.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- Element name popped from stack or NULL if stack is empty.
const OSUTF8CHAR* rtxCtxtPopTypeName | ( | OSCTXT * | pctxt | ) |
This function pops the type name from the context stack. The name is only popped if the item count is one.
- Parameters:
-
pctxt Pointer to a context structure.
- Returns:
- Type name popped from stack or NULL if stack count not equal to one.
int rtxCtxtPushArrayElemName | ( | OSCTXT * | pctxt, | |
const OSUTF8CHAR * | elemName, | |||
OSSIZE | idx | |||
) |
This function is used to push an array element name onto the context element name stack. The name is formed by combining the given element name with the index to create a name of format name[index]. Dynamic memory is allocated for the resulting name using the rtxMemAlloc function.
- Parameters:
-
pctxt Pointer to a context structure. elemName Name of element to be pushed on stack. idx Index or the array element.
- Returns:
- Completion status of operation:
- 0 = success,
- RTERR_NOMEM if mem alloc for name fails.
int rtxCtxtPushContainerBits | ( | OSCTXT * | pctxt, | |
OSSIZE | bits | |||
) |
Notify the runtime layer of the start of decoding of a length-constrained container of a given length. This method should be called when the next bit to be decoded is the first bit of the length-constrained content.
This pushes an entry onto pctxt->containerEndIndex.
- Parameters:
-
pctxt Pointer to context structure. bits Number of bits in the length-constrained container.
- Returns:
- Completion status of operation:
- zero (0) = success,
- negative return value is error.
int rtxCtxtPushContainerBytes | ( | OSCTXT * | pctxt, | |
OSSIZE | bytes | |||
) |
Notify the runtime layer of the start of decoding of a length-constrained container of a given length. This method should be called when the next bit to be decoded is the first bit of the length-constrained content.
This pushes an entry onto pctxt->containerEndIndex.
- Parameters:
-
pctxt Pointer to context structure. bytes Number of bytes of the length-constrained container.
- Returns:
- Completion status of operation:
- zero (0) = success,
- negative return value is error.
int rtxCtxtPushElemName | ( | OSCTXT * | pctxt, | |
const OSUTF8CHAR * | elemName | |||
) |
This function is used to push an element name onto the context element name stack.
- Parameters:
-
pctxt Pointer to a context structure. elemName Name of element to be pushed on stack. Note that a copy of the name is not made, the pointer to the name that is passed is stored.
- Returns:
- Completion status of operation:
- 0 = success,
- RTERR_NOMEM if mem alloc for name fails.
int rtxCtxtPushTypeName | ( | OSCTXT * | pctxt, | |
const OSUTF8CHAR * | typeName | |||
) |
This function is used to push a type name onto the context element name stack. The name is only added for the top-level type. This is determined by testing to ensure that there are no existing names on the stack.
- Parameters:
-
pctxt Pointer to a context structure. typeName Name of type to be pushed on stack. Note that a copy of the name is not made, the pointer to the name that is passed is stored.
- Returns:
- Completion status of operation:
- 0 = success,
- RTERR_NOMEM if mem alloc for name fails.
int rtxCtxtSetBitOffset | ( | OSCTXT * | pctxt, | |
OSSIZE | offset | |||
) |
This function sets the bit offset in the context to the given value.
- Parameters:
-
pctxt Pointer to a context structure. offset Bit offset.
- Returns:
- Completion status of operation:
- 0 = success,
- Negative status code if error
int rtxCtxtSetBufPtr | ( | OSCTXT * | pctxt, | |
OSOCTET * | bufaddr, | |||
OSSIZE | bufsiz | |||
) |
This function is used to set the internal buffer pointer for in-memory encoding or decoding. It must be called after the context variable is initialized before any other compiler generated or run-time library encode function.
- Parameters:
-
pctxt Pointer to a context structure. This provides a storage area for the function to store all working variables that must be maintained between function calls. bufaddr A pointer to a memory buffer to use to encode a message or that holds a message to be decoded. The buffer should be declared as an array of unsigned characters (OCTETs). This parameter can be set to NULL to specify dynamic encoding (i.e., the encode functions will dynamically allocate a buffer to hold the encoded message). bufsiz The length of the memory buffer in bytes. Should be set to zero if NULL was specified for bufaddr (i.e. dynamic encoding was selected).
void rtxCtxtSetFlag | ( | OSCTXT * | pctxt, | |
OSUINT32 | mask | |||
) |
This function is used to set a processing flag within the context structure.
- Parameters:
-
pctxt - A pointer to a context structure. mask - Mask containing bit(s) to be set.
void rtxFreeContext | ( | OSCTXT * | pctxt | ) |
This function frees all dynamic memory associated with a context. This includes all memory allocated using the rtxMem functions using the given context parameter.
- Parameters:
-
pctxt Pointer to a context structure.
int rtxInitContext | ( | OSCTXT * | pctxt | ) |
This function initializes an OSCTXT block. It sets all key working parameters to their correct initial state values. It is required that this function be invoked before using a context variable.
- Parameters:
-
pctxt Pointer to the context structure variable to be initialized.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.
int rtxInitContextBuffer | ( | OSCTXT * | pctxt, | |
OSOCTET * | bufaddr, | |||
OSSIZE | bufsiz | |||
) |
This function assigns a message buffer to a context block. The block should have been previously initialized by rtxInitContext.
- Parameters:
-
pctxt The pointer to the context structure variable to be initialized. bufaddr For encoding, the address of a memory buffer to receive the encoded message. If this address is NULL (0), encoding to a dynamic buffer will be done. For decoding, the address of a buffer that contains the message data to be decoded. bufsiz The size of the memory buffer. For encoding, this argument may be set to zero to indicate a dynamic memory buffer should be used.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.
int rtxInitContextExt | ( | OSCTXT * | pctxt, | |
OSMallocFunc | malloc_func, | |||
OSReallocFunc | realloc_func, | |||
OSFreeFunc | free_func | |||
) |
This function initializes an OSCTXT block. It sets all key working parameters to their correct initial state values. It is required that this function be invoked before using a context variable.
- Parameters:
-
pctxt Pointer to the context structure variable to be initialized. malloc_func Pointer to the memory allocation function. realloc_func Pointer to the memory reallocation function. free_func Pointer to the memory deallocation function.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.
This function initializes a context for use in a thread. It is the same as rtxInitContext except that it copies the pointer to constant data from the given source context into the newly initialized thread context. It is assumed that the source context has been initialized and the custom generated global initialization function has been called. The main purpose of this function is to prevent multiple copies of global static data from being created within different threads.
- Parameters:
-
pctxt Pointer to the context structure variable to be initialized. pSrcCtxt Pointer to source context which has been fully initialized including a pointer to global constant data initialized via a call to a generated 'Init_<project>_Global' function.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.
int rtxMarkPos | ( | OSCTXT * | pctxt, | |
OSSIZE * | ppos | |||
) |
This function saves the current position in a message buffer or stream.
- Parameters:
-
pctxt Pointer to a context block. ppos Pointer to saved position.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.
void rtxMemHeapClearFlags | ( | OSCTXT * | pctxt, | |
OSUINT32 | flags | |||
) |
This function clears memory heap flags.
- Parameters:
-
pctxt Pointer to a memory block structure that contains the list of dynamic memory block maintained by these functions. flags The flags
void rtxMemHeapSetFlags | ( | OSCTXT * | pctxt, | |
OSUINT32 | flags | |||
) |
This function sets flags to a heap. May be used to control the heap's behavior.
- Parameters:
-
pctxt Pointer to a memory block structure that contains the list of dynamic memory block maintained by these functions. flags The flags.
int rtxResetToPos | ( | OSCTXT * | pctxt, | |
OSSIZE | pos | |||
) |
This function resets a message buffer or stream back to the given position.
- Parameters:
-
pctxt Pointer to a context block. pos Context position.
- Returns:
- Completion status of operation:
- 0 = success,
- negative return value is error.