cs_byte_local_size(3rpc)Calculates the necessary buffer size for code set conversion from a network code set to a local code set prior to unmarshalling; used by client and server stubs but not directly by applications Synopsis #include <dce/codesets_stub.h> void cs_byte_local_size( rpc_binding_handle_t binding, unsigned32 network_code_set_value, unsigned32 network_buffer_size, idl_cs_convert_t *conversion_type, unsigned32 *local_buffer_size, error_status_t *status); Parameters Input
binding
network_code_set_value
network_buffer_size Output
conversion_type
idl_cs_no_convert
idl_cs_in_place_convert
idl_cs_new_buffer_convert
local_buffer_size
status
Description The cs_byte_local_size( ) routine is one of the four DCE RPC buffer sizing routines that RPC stubs use before they marshall or unmarshall data to determine whether or not the buffers allocated for code set conversion need to be enlarged to hold the converted data. The buffer sizing routines determine the type of conversion required and calculate the size of the necessary buffer (if a conformant or conformant varying array is to be marshalled or unmarshalled); the RPC stub then allocates a buffer of that size before it calls one of the code set conversion routines. Client and server stubs call the cs_byte_*_size routines when the cs_byte type (which is internally equivalent to idl_byte) has been specified as the local data type using the cs_char attribute in the attribute configuration file for the application. The cs_byte_local_size( ) routine is used to evaluate buffer size requirements prior to unmarshalling data received over the network. Applications do not call cs_byte_local_size( ) routine directly. Client and server stubs call the routine before they unmarshall any data. The stubs pass the routine a binding handle and a code set value that identifies the code set that was used to transfer international character data over the network. The stubs also specify the network storage size of the data, in units of idl_byte, if a conformant or conformant varying array is to be unmarshalled, or they specify NULL if a fixed or varying array is to be marshalled. When called from a client stub, the cs_byte_local_size( ) routine determines the value of conversion_type from the client and server's code set tag information stored in the binding handle by a code set's evaluation routine or a tag-setting routine. If the conversion type specified in the handle is idl_cs_new_buffer_convert, the routine sets the conversion_type parameter to this value and, if a conformant or conformant varying array is to be unmarshalled, calculates a new buffer size by multiplying the value of local_buffer_size by the maximum number of bytes required to represent the code set specified in network_code_set_value. The routine returns the new buffer size in the local_buffer_size parameter. The size is specified in units of cs_byte, which is the local representation used for international character data (and is equivalent to the idl_byte data type). For fixed and varying arrays, the routine assumes that network_buffer_size is sufficient to store the converted data. If the handle information specifies idl_cs_convert_in_place or idl_cs_no_convert, the routine assumes that network_buffer_size can store the converted data (or that no conversion is necessary) and returns idl_cs_convert_in_place (or idl_cs_no_convert) in the conversion_type parameter. If a conformant or conformant varying array is to be unmarshalled, the routine also returns the value of network_buffer_size in local_buffer_size. In cases in which the binding handle does not contain the results of character and code sets evaluation, or in which the cs_byte_local_size( ) routine is being called from the server stub, it determines the value of conversion_type itself using the local code set value and the code set value passed in the network_code_set_value parameter and returns the appropriate conversion_type value. If a conformant or conformant varying array is to be unmarshalled, and the routine finds that a new buffer is required to hold the converted data, it also calculates the size of this new buffer (by multiplying the value of network_buffer_size by the maximum number of bytes required to represent the code set specified in network_code_set_value) and returns the results, in units of cs_byte, in local_buffer_size.
Permissions Required
Return Values Errors The following describes a partial list of errors that might be returned. Refer to the OSF DCE Problem Determination Guide for complete descriptions of all error messages.
rpc_s_ok
rpc_s_ss_incompatible codesets When invoked from the server stub, this routine calls the routines dce_cs_loc_to_rgy( ) and rpc_rgy_get_max_bytes( ). If either of these routines returns an error, the cs_byte_local_size( ) routine raises an exception to the client application.
Related Information
|