A #FNF_RPC message has the following, generic, format:
|
Mode Cut-Off |
Routing Flags |
Encoded RPC |
|
1 byte |
1 byte |
variable |
The Mode Cut-Off field contains the mode cut-off value that was supplied to the original \RPCManager\Send()call. The Routing Flags field contains the RPC routing flags.
If the Encoded RPC is longer than the value defined in the configuration variable RPCMaxPacketSize, the RPC will be broken into fragments for transmission, each fragment being no longer than RPCMaxPacketSize.
A fragmented RPC utilizes the two Function Code flags #FNF_FLAG_FIRST and #FNF_FLAG_NEXT. #FNF_FLAG_FIRST is set on the first fragment and #FNF_FLAG_NEXT on all subsequent fragments. The #FNF_RPC messages carry an additional 8 byte header:
|
Block Number |
Total Blocks |
|
4 bytes |
4 bytes |
The Block Number field is set to zero and increments on each fragment until Total Blocks minus 1 is reached. This denotes the last block in sequence. The header is followed by the generic #FNF_RPC message, so an RPC that was fragmented over 3 packets would appear as:
|
Sync/GUID |
Function Code (#FNF_RPC + #FNF_FLAG_FIRST) |
Length |
Sequence (n) |
Block Number (0) |
Total Blocks (3) |
Mode Cut-Off |
Routing Flags |
Encoded RPC |
|
Sync/GUID |
Function Code (#FNF_RPC + #FNF_FLAG_NEXT) |
Length |
Sequence (n) |
Block Number (1) |
Total Blocks (3) |
Encoded RPC | ||
|
Sync/GUID |
Function Code (#FNF_RPC + #FNF_FLAG_NEXT) |
Length |
Sequence (n) |
Block Number (2) |
Total Blocks (3) |
Encoded RPC | ||