This topic describes
the formats you can use to pass message data to IXCMSGOX in multiple
buffers. Illustrations of the formats are shown in the figures at topics Figure 1 through Figure 4.
Use the ELEMFORM parameter to indicate how the message is maintained
in multiple data buffers. Create either a queue (ELEMFORM=QUEUE)
or a table (ELEMFORM=TABLE) of message data elements, each representing
a buffer containing message data.
- Specifying the Message Data Elements
Message data elements
contain:
- Either:
- A buffer containing message data
- A pointer to a buffer containing message data.
- The length of the buffer (optional)
- The ALET to qualify the address of the buffer if message data
elements contain pointers to the buffers (optional).
Buffer lengths and ALETs can be passed separately as
described below instead of including them in each message data element.
- Specifying the Location of Each Buffer
Specify the
location of the buffer or buffer pointer within each message data
element using one of the following parameters:
- If the message data elements contain the buffers, use the PARTOFF
parameter to specify the offset of the buffer area from the start
of each message data element.
- If the message data elements contain pointers to the buffers,
use the PARTPTROFF parameter to specify the offset of the buffer address
from the start of each message data element.
- Specifying the Location of Each ALET
Specify the ALETs
to qualify the buffer addresses using one of the following parameters:
- The PARTALET parameter to specify a single ALET to qualify each
buffer address.
- The PARTALETOFF parameter to identify a location in each message
data element that contains the ALET to qualify the associated buffer
address.
- The PARTALETTBL parameter to specify a separate table of ALETs.
- Specifying the Size of Each Buffer
Specify the lengths
of the buffers using one of the following parameters:
- The PARTLEN parameter to specify a single length for all buffers.
- The PARTLENOFF parameter to identify a location in each message
data element that contains the length of the associated buffer.
- The PARTLENTBL parameter to specify a separate table of buffer
lengths.
- Specifying the Location of the Next Message Data Element
If
you have a table of message data elements, use the NEXTOFF parameter
to specify, in each element, the location of the next element. NEXTOFF
contains the length in bytes of each entry in the table.
If
you have a queue of message data elements, use the NEXTPTROFF parameter
to specify, in each element, the pointer to the next element.
IXCMSGOX
processes message data elements in consecutive order, copying message
data from each buffer until either the number of bytes copied matches
the specified buffer length or the entire message has been copied.
Processing
of message data continues until one of the following occurs:
- All message data has been copied, as determined by the value specified
by the MSGLEN parameter.
- IXCMSGOX has processed the number of buffers specified by the
#MSGPARTS parameter.
- IXCMSGOX has reached the end of the queue of message data elements
as specified by the ENDOFQUEUE parameter or its default.
- IXCMSGOX finds more than 65536 consecutive buffers of length 0
and does not know how many message parts to search because you did
not specify the #MSGPARTS parameter. IXCMSGOX assumes an error has
occurred. The message is not sent and you receive a return code and
reason code indicating the error.
Note that if the receiver is going to receive the message into
multiple buffers and requires that the sender provide the length of
each message part, the sending and receiving member must devise a
protocol for transmitting this information. For instance, the length
of each message part could be sent in the message data itself or as
part of the message control data.