blob: db9b3c4c911774d8ff436426b2e5169887cf0ecd [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/*
* glu.h
*
* Andrew Schofield, Thursday, the 6th of October 1994
*
* $Id: glu_head.h 1.14 1997/12/18 08:57:26 nagler PACKAGED $
*
* The Graceland Utilities (GLU) are a set of routines to
* facilitate the use of the Graceland Idiom.
*
* The following functions are used to prepare
* an interface description for use by the other
* GLU functions:
*
* - "GLU_INTERFACE_PREPARE"
*
* - "GLU_INTERFACE_PREPARE_LENGTH"
*
* The following functions are used to pack/unpack requests/responses:
*
* - "GLU_HEAD_UNPACK"
*
* - "GLU_REQUEST_PACK"
*
* - "GLU_REQUEST_HEADER_UNPACK_BY_REF"
*
* - "GLU_REQUEST_BODY_UNPACK"
*
* - "GLU_RESPONSE_PACK"
*
* - "GLU_RESPONSE_HEADER_UNPACK"
*
* The following functions are used to copy requests/responses in memory:
*
* - "GLU_REQUEST_COPY"
*
* - "GLU_RESPONSE_COPY"
*
* The following functions are used to pack/unpack encapsulated
* service context data:
*
* - GLU_ENCAPSULATION_PACK
*
* - GLU_ENCAPSULATION_UNPACK
*
* The following functions are used to obtain information
* about a prepared interface (e.g. for use by CEE):
*
* - "GLU_GET_NR_OPERATIONS"
*
* - "GLU_GET_NR_PARAMETERS"
*
* - "GLU_GET_OPERATION_ID"
*
* - "GLU_GET_OPERATION_INDEX"
*
*
* PARAMETER VECTORS ("pv")
*
* GLU uses the concept of a "parameter vector" or, simply, "pv" to pass
* arbitrary object call parameters. Synchronous and asynchronous calls have
* different "pv" formats. The "synch" parameter to the request/response
* un/pack calls defines this format. To aid the explanation the values
* and types for CEE Example #1 TIM::Now operation are used in the diagrams
* below. The order of the parameters is the same as they were defined
* in the IDL.
*
* A synchronous "pv" has the same format in the client and the server as
* follows (C types in parentheses):
*
* Index Description
* +-------------------------------------------------+
* 0 | Pointer to Operation Synopsis or NULL |
* | (IDL_unsigned long *) |
* +-------------------------------------------------+
* 1 | Pointer to pointer to Operation's Exception |
* | (struct **TIM_Now_exc_) |
* +-------------------------------------------------+
* 2 | Pointer to Operation Result or First Parameter |
* | (TimeZoneDef *) |
* +-------------------------------------------------+
* 3 | Pointer to Next Parameter |
* | (IDL_string **) |
* +-------------------------------------------------+
*
* In the above layout, note that the second parameter (IDL_string) is
* passed by reference, hence the extra level of indirection. The
* operation's exception structure is always passed by reference.
*
* The "pv" for asynchronous clients and servers is different, because
* it only contains those parameters which are essential to the particular
* action.
*
* Asynchronous (!synch) "GLU_REQUEST_PACK" and "GLU_REQUEST_BODY_UNPACK"
* parameter vector (pv) layout:
*
* Index Description
* +-------------------------------------------------+
* 0 | Pointer to Operation Synopsis or NULL |
* | (IDL_unsigned long *) |
* +-------------------------------------------------+
* 1 | Pointer to First "in" or "inout" Parameter |
* | (TimeZoneDef *) |
* +-------------------------------------------------+
*
* Asynchronous (!synch) "GLU_RESPONSE_PACK" and "GLU_RESPONSE_BODY_UNPACK"
* parameter vector (pv) layout:
*
* Index Description
* +-------------------------------------------------+
* 0 | Pointer to Operation Synopsis or NULL |
* | (IDL_unsigned long *) |
* +-------------------------------------------------+
* 1 | Pointer to pointer to Operation's Exception |
* | (struct **TIM_Now_exc_) |
* +-------------------------------------------------+
* 2 | Pointer to Operation Result |
* | or First "in" or "inout" Parameter |
* | (TimeZoneDef *) |
* +-------------------------------------------------+
*
* MESSAGE FORMATS
*
* All GLU messages begin with a GLU_header_def as follows:
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 0 | Magic Bytes: "GLU" |
* +-------------------------------------------------+
* 4 | Version Bytes: "002" |
* +-------------------------------------------------+
* 7 | Type Byte: 'Q', 'P', or 'C' |
* +-------------------------------------------------+
* 8 | Total Msg Size: Big Endian ulong |
* +-------------------------------------------------+
* 12 | Request Id: Big Endian ulong |
* +-------------------------------------------------+
* 16
*
* Cancel (type 'C') messages contain nothing but this header.
* Request and Response messages are followed by an "encapsulation".
* An encapsulation is an octet stream which begins with a
* four-byte GLU_data_format_def as follows (offsets continued):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 17 | Integer Format Byte: 1 or 2 |
* +-------------------------------------------------+
* 18 | Char Format Byte: 65 |
* +-------------------------------------------------+
* 19 | Real Format Byte: 33 or 34 |
* +-------------------------------------------------+
* 20 | Pack Format Byte: 97 |
* +-------------------------------------------------+
* 21
*
* The various formats are defined in pcu.h.
*
* A GLU_response_header_def or GLU_request_header_def follows the
* encapsulation data format description. Unlike the GLU_header_def
* which always contains big endian integers, integers contained in the
* encapsulation are in the order defined by the GLU_data_format_def
* that begins the encapsulation. Therefore, in the following layouts
* only the type of the integer is specified.
*
* The data in requests and responses is variable length. The
* following is the layout of the request from CEE Example #1.
* For this example, there service context list is empty.
* Service contexts are discussed later.
*
* The GLU_request_header_def for a "Now" request to the "TIME" object
* is laid out as follows (offsets continued):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 21 | Service Context List Length: ulong (0) |
* +-------------------------------------------------+
* 25 | Object Id Length: ulong (4) |
* +-------------------------------------------------+
* 29 | Object Id Chars: "TIME" |
* +-------------------------------------------------+
* 33 | Operation Synopsis: long (1203756531) |
* +-------------------------------------------------+
* 37 | Operation Name Length: ulong (3) |
* +-------------------------------------------------+
* 41 | Operation Name Chars: "Now" |
* +-------------------------------------------------+
* 44
*
* Immediately following the request come the "in" and "inout" parameters
* in the order they were declared in the IDL file. "TIM::Now" has one
* in parameter, TimeZoneDef, an enum. The parameters are laid out as
* follows (offsets continued):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 21 | TimeZoneDef: GMT (0) or LOCAL (1) |
* +-------------------------------------------------+
* 25
*
* A GLU reply contains a GLU_header_def and an encapsulation. The
* encapsulation begins with a GLU_data_format_def as described above
* and contains a GLU_response_header_def, a GLU_exception_def, and
* the result (if any) followed by the "out" and "inout" parameters.
* In the event of a user exception, the GLU_exception_def is followed
* by the marshalled user exception. A standard exception consists
* solely of the GLU_exception_def.
*
* Again, a response is variable length. In this case, there is
* no service context list and a normal response of "11:11:11" is
* shown. The GLU_response_header_def follows (offsets continued
* from GLU_data_format_def):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 21 | Service Context List Length: ulong (0) |
* +-------------------------------------------------+
* 25 | Response Status Byte: 0 |
* +-------------------------------------------------+
* 26
*
* The GLU_exception_def is laid out as follows (offsets continued):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 26 | exception_nr: long (0) |
* +-------------------------------------------------+
* 30 | exception_detail: long (0) |
* +-------------------------------------------------+
* 34
*
* The result and "out" and "inout" parameters follow. In this case,
* there is no result. There is a single out parameter, an unbounded
* string:
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 26 | timeStr Length: ulong (8) |
* +-------------------------------------------------+
* 30 | timeStr Chars: "11:11:11" |
* +-------------------------------------------------+
* 38
*
* The Service Context is an unbound sequence of "tagged" sequences of octets.
* A single element defines an implicit parameter associated with the request
* or response. A "tagged" sequence of octets is the term the OMG uses for a
* type-specific datum. The "tags" in this case are a "type" and some "flags".
* The flags help the receiving ORB determine what to do with the datum without
* actually having to unpack it. In particular, if the "must use" flag isn't
* set, the ORB is free to ignore the contents. As new service context types
* are added over time, older ORBs may not support (nor recognize) the new
* facilities and therefore the ORB needs to know whether to accept or reject
* the request based solely on the flags. The "IOP" (CORBA/GIOP/IIOP/) flag
* indicates the data is from another name space, managed by the OMG. This
* allows gateways to pass through uninterpretable service context elements.
* The ultimate destination then can make a decision as to whether to accept or
* reject the request.
*
* The layout of a Service Context List follows for the case of one
* element which is 42 bytes long with type 13 and flags 0 (continued from
* GLU_data_format_def):
*
* Absolute
* Offset Description
* +-------------------------------------------------+
* 21 | Service Context List Length: ulong (1) |
* +-------------------------------------------------+
* 25 | Service Context[0] Type: ulong (13) |
* +-------------------------------------------------+
* 29 | Service Context[0] Flags: ulong (0) |
* +-------------------------------------------------+
* 33 | Service Context[0] Data Length: ulong (42) |
* +-------------------------------------------------+
* 37 | Service Context[0] Data Bytes |
* +-------------------------------------------------+
* 79
*
* A service context element (data) is an encapsulation. As with all
* encapsulations, it begins with a GLU_data_format_def. The format of each
* service context element may not necessarily be the same as the format of the
* rest of the request or response header and body. This allows gateways to
* pass through the service context data without unpacking it. The function
* GLU_ENCAPSULATION_UNPACK first unpacks the GLU_data_format_def and
* the encapsulated data.
*/
#ifndef GLU_H
#define GLU_H
#ifdef __cplusplus
extern "C" {
#endif
#include <glu_rs.h>
#include <glu_stdexc.h>
#ifndef GLU_H_
#define GLU_H_
/*
* Translation unit: GLU
* Generated by CNPGEN(TANTAU CNPGEN TANTAU_AG_PC1 19991203.133909) on Mon Nov 20 10:39:05 2000
*/
#include <idltype.h>
#if IDL_TYPE_H_VERSION != 19971225
#error Version mismatch IDL_TYPE_H_VERSION != 19971225
#endif
/****************
* Module 'GLU' *
****************/
#define GLU_INVALID_OPERATION_INDEX ((IDL_unsigned_long) 0)
struct GLU_exception_tag {
IDL_long exception_nr;
IDL_long exception_detail;
};
typedef struct GLU_exception_tag GLU_exception_def;
#define GLU_exception_def_cin_ ((char *) "b2+FF")
#define GLU_exception_def_csz_ ((IDL_unsigned_long) 5)
#define GLU_MAGIC_STRING ((IDL_string) "GLU ")
#define GLU_MAGIC_SIZE ((IDL_unsigned_long) 4)
#define GLU_VERSION_STRING ((IDL_string) "002")
#define GLU_VERSION_SIZE ((IDL_unsigned_long) 3)
struct GLU_header_tag {
IDL_octet magic[4];
IDL_octet version[3];
IDL_octet type;
IDL_unsigned_long size;
IDL_unsigned_long request_id;
};
typedef struct GLU_header_tag GLU_header_def;
#define GLU_header_def_cin_ ((char *) "b5+a1+4+Ha1+3+HHKK")
#define GLU_header_def_csz_ ((IDL_unsigned_long) 18)
#define GLU_HEADER_SIZE ((IDL_unsigned_long) 16)
struct GLU_data_format_tag {
IDL_octet integer;
IDL_octet character;
IDL_octet real;
IDL_octet pack;
};
typedef struct GLU_data_format_tag GLU_data_format_def;
#define GLU_data_format_def_cin_ ((char *) "b4+HHHH")
#define GLU_data_format_def_csz_ ((IDL_unsigned_long) 7)
#define GLU_DATA_FORMAT_SIZE ((IDL_unsigned_long) 4)
struct GLU_service_context_tag {
IDL_unsigned_long type;
IDL_unsigned_long flags;
struct GLU_service_context_tag_data_seq_ {
IDL_unsigned_long _length;
char pad_to_offset_8_[4];
IDL_octet *_buffer;
IDL_PTR_PAD(_buffer, 1)
} data;
};
typedef struct GLU_service_context_tag GLU_service_context_def;
#define GLU_service_context_def_cin_ ((char *) "b3+KKc0+H")
#define GLU_service_context_def_csz_ ((IDL_unsigned_long) 9)
typedef struct GLU_service_context_list_def_seq_ {
IDL_unsigned_long _length;
char pad_to_offset_8_[4];
GLU_service_context_def *_buffer;
IDL_PTR_PAD(_buffer, 1)
} GLU_service_context_list_def;
#define GLU_service_context_list_def_cin_ ((char *) "c0+b3+KKc0+H")
#define GLU_service_context_list_def_csz_ ((IDL_unsigned_long) 12)
#define GLU_SERVICE_CONTEXT_FLAG_MUST_USE ((IDL_unsigned_long) 1)
#define GLU_SERVICE_CONTEXT_FLAG_IOP ((IDL_unsigned_long) 2)
#define GLU_TYPE_REQUEST ((IDL_char) 'Q')
struct GLU_request_header_tag {
GLU_service_context_list_def service_context_list;
struct GLU_request_header_tag_oid_seq_ {
IDL_unsigned_long _length;
char pad_to_offset_8_[4];
IDL_char *_buffer;
IDL_PTR_PAD(_buffer, 1)
} oid;
IDL_unsigned_long op_synopsis;
char pad_to_offset_40_[4];
struct GLU_request_header_tag_op_name_seq_ {
IDL_unsigned_long _length;
char pad_to_offset_8_[4];
IDL_char *_buffer;
IDL_PTR_PAD(_buffer, 1)
} op_name;
};
typedef struct GLU_request_header_tag GLU_request_header_def;
#define GLU_request_header_def_cin_ ((char *) "b4+c0+b3+KKc0+Hc0+CKc0+C")
#define GLU_request_header_def_csz_ ((IDL_unsigned_long) 24)
typedef struct GLU_request_context_def_seq_ {
IDL_unsigned_long _length;
char pad_to_offset_8_[4];
IDL_string *_buffer;
IDL_PTR_PAD(_buffer, 1)
} GLU_request_context_def;
#define GLU_request_context_def_cin_ ((char *) "c0+d0+")
#define GLU_request_context_def_csz_ ((IDL_unsigned_long) 6)
#define GLU_TYPE_RESPONSE ((IDL_char) 'P')
struct GLU_response_header_tag {
GLU_service_context_list_def service_context_list;
IDL_octet status;
char pad_to_size_24_[7];
};
typedef struct GLU_response_header_tag GLU_response_header_def;
#define GLU_response_header_def_cin_ ((char *) "b2+c0+b3+KKc0+HH")
#define GLU_response_header_def_csz_ ((IDL_unsigned_long) 16)
#define GLU_RESPONSE_STATUS_NONE ((IDL_unsigned_long) 0)
#define GLU_TYPE_REQUEST_CANCEL ((IDL_char) 'C')
/* End module: GLU */
/*
* End translation unit: GLU
*/
#endif /* GLU_H_ */
/*
* "GLU_PV_*" lays out a parameter vector.
*/
#define GLU_PV_SYNOPSIS 0
#define GLU_PV_EXCEPTION (GLU_PV_SYNOPSIS + 1)
#define GLU_PV_ASYNCH_REQUEST_PARAM1 (GLU_PV_SYNOPSIS + 1)
#define GLU_PV_ASYNCH_RESPONSE_PARAM1 (GLU_PV_EXCEPTION + 1)
#define GLU_PV_SYNCH_PARAM1 GLU_PV_ASYNCH_RESPONSE_PARAM1
/*
*
* "GLU_INDEX_PARAMETER1" is the index of the first parameter.
*/
#define GLU_INDEX_PARAMETER1 1
/*
*
* "GLU_INDEX_OPERATION1" is the index of the first operation.
*/
#define GLU_INDEX_OPERATION1 1
/*
*
* "GLU_INDEX_EXCEPTION1" is the index of the first exception.
*/
#define GLU_INDEX_EXCEPTION1 1
/*
* "GLU_GET_EXCEPTION_BY_REF" gets a exceptions name, direction, and
* type (prep) given an operation index and except_index
* (GLU_INDEX_EXCEPTION1 is first).
*
* <prep> contains the prepared CIN description as
* returned by "GLU_INTERFACE_PREPARE".
*
* <operation_index> which operation
*
* <except_index> which exception
* (starts with GLU_INDEX_EXCEPTION1)
*
* <except_id> gets address of exception id in "prep"
*
* <except_id_len> length of "*except_id"
*
* <except_pcu_prep> gets the address of the PCU_PREPAREd cin
*
* <except_pcu_prep_len> length of "except_pcu_prep"
*/
extern GLU_status
GLU_GET_EXCEPTION_BY_REF(
/* In */ const void *prep,
/* In */ IDL_unsigned_long operation_index,
/* In */ IDL_unsigned_long except_index,
/* Out */ const char **except_id,
/* Out */ IDL_unsigned_long *except_id_len,
/* Out */ const void **except_pcu_prep,
/* Out */ IDL_unsigned_long *except_pcu_prep_len
);
/*
* "GLU_GET_INTERFACE_ID_BY_REF" is used to obtain the interface's ID.
*
* <prep> contains the prepared CIN description as
* returned by "GLU_INTERFACE_PREPARE".
*
* <interface_id> gets the address of the interface's ID
*
* <interface_id_len> length of "id"
*/
extern GLU_status
GLU_GET_INTERFACE_ID_BY_REF(
/* In */ const void *prep,
/* Out */ const char **interface_id,
/* Out */ IDL_unsigned_long *interface_id_len);
/*
* "GLU_GET_NR_EXCEPTIONS" is used to find out how many exceptions
* an operation has. "GLU_GET_NR_EXCEPTIONS" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* <prep> contains the prepared CIN description as returned by
* "GLU_INTERFACE_PREPARE".
*
* <operation_index> specifies the operation whose exception count
* is required.
* Constants are generated for each operation
* (suffix "_ldx_").
*
* <nr_exceptions> gets the number of exceptions.
*/
extern GLU_status
GLU_GET_NR_EXCEPTIONS(
/* In */ const void *prep,
/* In */ IDL_unsigned_long operation_index,
/* Out */ IDL_unsigned_long *nr_exceptions);
/*
* "GLU_GET_NR_OPERATIONS" is used to find out how many operations
* are contained in an interface. "GLU_GET_NR_OPERATIONS" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* <prep> contains the prepared CIN description as returned by
* "GLU_INTERFACE_PREPARE".
*
* <nr_operations> gets the number of operations in the interface.
*/
extern GLU_status
GLU_GET_NR_OPERATIONS(
/* In */ const void *prep,
/* Out */ IDL_unsigned_long *nr_operations);
/*
* "GLU_GET_NR_PARAMETERS" is used to find out how many parameters
* an operation has. "GLU_get_nr_parameters" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* <prep> contains the prepared CIN description as returned by
* "GLU_INTERFACE_PREPARE".
*
* <operation_index> specifies the operation whose parameter count
* is required.
* Constants are generated for each operation
* (suffix "_ldx_").
*
* <nr_parameters> gets the number of parameters.
*
*
*
*/
extern GLU_status
GLU_GET_NR_PARAMETERS(
/* In */ const void *prep,
/* In */ IDL_unsigned_long operation_index,
/* Out */ IDL_unsigned_long *nr_parameters);
/*
* "GLU_GET_OPERATION_ID_BY_REF" is used to obtain an operation's ID and
* synopsis given its index. "GLU_GET_OPERATION_ID_BY_REF" and
* "GLU_GET_OPERATION_INDEX" can be used to match operations between
* two different interfaces (for intracapsule calls).
* "GLU_GET_OPERATION_ID_BY_REF" returns GLU_SUCCESS or a value indicating
* the reason for the failure.
*
* <prep> contains the prepared CIN description as returned
* by "GLU_INTERFACE_PREPARE".
*
* <operation_index> specifies the operation whose ID is required.
* Constants are generated for each operation
* (suffix "_ldx_").
*
* <operation_id> gets the address of the operation's ID
*
* <operation_id_len> length of operation_id (ignored if NULL)
*
* <operation_synopsis> gets the operation's synopsis.
*/
extern GLU_status
GLU_GET_OPERATION_ID_BY_REF(
/* In */ const void *prep,
/* In */ IDL_unsigned_long operation_index,
/* Out */ const char **operation_id,
/* Out */ IDL_unsigned_long *operation_id_len,
/* Out */ IDL_long *operation_synopsis);
/*
* "GLU_GET_OPERATION_INDEX" gets an operation's index given its
* ID and synopsis."GLU_GET_OPERATION_ID_BY_REF" and
* "GLU_GET_OPERATION_INDEX" can be used to match operations between
* two different interfaces (for intracapsule calls).
* "GLU_GET_OPERATION_INDEX" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* <prep> contains the prepared CIN description as returned by
* "GLU_INTERFACE_PREPARE".
*
* <operation_id> is the ID of the operation whose index is required.
*
* <operation_synopsis> is the synopsis of the operation whose index
* is required.
*
* <operation_index> gets the operations index.
*/
extern GLU_status
GLU_GET_OPERATION_INDEX(
/* In */ const void *prep,
/* In */ const char *operation_id,
/* In */ IDL_long operation_synopsis,
/* Out */ IDL_unsigned_long *operation_index);
/*
* "GLU_GET_PARAMETER_BY_REF" gets a parameters name, direction, and
* type (prep) given an operation index and param_index
* (GLU_INDEX_PARAMETER1 is first).
*
* <prep> contains the prepared CIN description as
* returned by "GLU_INTERFACE_PREPARE".
*
* <operation_index> which operation
*
* <param_index> which parameter
* (starts with GLU_INDEX_PARAMETER1)
*
* <param_name> gets address of parameter name in "prep"
*
* <param_name_len> length of "*param_name"
*
* <param_direction> one of the CIN_direction_* or
* CIN_function_result. If there is a function
* result, it will be GLU_INDEX_PARAMETER1.
*
* <param_pcu_prep> gets the address of the PCU_PREPAREd cin
*
* <param_pcu_prep_len> length of "param_pcu_prep"
*/
extern GLU_status
GLU_GET_PARAMETER_BY_REF(
/* In */ const void *prep,
/* In */ IDL_unsigned_long operation_index,
/* In */ IDL_unsigned_long param_index,
/* Out */ const char **param_name,
/* Out */ IDL_unsigned_long *param_name_len,
/* Out */ char *param_direction,
/* Out */ const void **param_pcu_prep,
/* Out */ IDL_unsigned_long *param_pcu_prep_len
);
/*
* "GLU_HEADER_UNPACK" unmarshals and validates the magic and version
* of a GLU_header_def.
*
* <to_unpack_buf> must pointer to a buffer which contains at least
* GLU_HEADER_SIZE bytes.
*
* <header> all fields are set.
*/
extern GLU_status
GLU_HEADER_UNPACK(
/* In */ const IDL_octet *to_unpack_buf,
/* Out */ GLU_header_def *header);
/* Call this after you've packed the request/response_header and
the body to pack the length, type, request_id, and data_format on
the front of packed_buf. */
extern GLU_status
GLU_HEADER_PACK(
/* In */ IDL_unsigned_long request_id,
/* In */ char type,
/* In */ const GLU_data_format_def *data_format,
/* InOut */ IDL_octet *packed_buf,
/* In */ IDL_unsigned_long packed_len
);
/*
* "GLU_INTERFACE_PREPARE" is used to prepare a CIN description
* of an interface (generated by CNPGEN) for efficient use by
* the other GLU routines.
* "GLU_INTERFACE_PREPARE" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* NOTE: Unlike PCU_PREPARE, "prep" may not be copied as it contains
* internal pointers. To make a copy, call this routine again.
*
* <cinbuf> is the generated CIN description of the interface.
*
* <cinlen> is the size of CIN description contained in
* "cinbuf".
*
* <max_prep_len> is the maximum number of bytes that can be
* accommodated in "prep". The correct size can
* be obtained by calling "GLU_INTERFACE_PREPARE_length".
*
* <prep> is the buffer to receive the prepared CIN.
*
* <prep_len> gets the size of prepared CIN that will be
* produced by "GLU_INTERFACE_PREPARE".
*/
extern GLU_status
GLU_INTERFACE_PREPARE(
/* In */ const char *cinbuf,
/* In */ IDL_unsigned_long cinlen,
/* In */ IDL_unsigned_long max_prep_len,
/* Out */ void *prep,
/* Out */ IDL_unsigned_long *prep_len);
/*
* "GLU_INTERFACE_PREPARE_LENGTH" is used to obtain the length of
* the prepared interface description that will be produced by
* "GLU_INTERFACE_PREPARE". This is useful if the memory for the
* prepared description is to be allocated dynamically.
* "GLU_INTERFACE_PREPARE_length" returns
* GLU_SUCCESS or a value indicating the reason for the failure.
*
* <cinbuf> is the generated CIN description of the interface.
*
* <cinlen> is the size of CIN description contained in "cinbuf".
*
* <prep_len> gets the size of prepared CIN that will be
* produced by "GLU_INTERFACE_PREPARE".
*/
extern GLU_status
GLU_INTERFACE_PREPARE_LENGTH(
/* In */ const char *cinbuf,
/* In */ IDL_unsigned_long cinlen,
/* Out */ IDL_unsigned_long *prep_len);
/*
* "GLU_REQUEST_BODY_UNPACK" unpacks the parameters associated
* with the request. The "GLU_header_def" and "GLU_request_header_def"
* must be unpacked by "GLU_HEADER_UNPACK" and
* "GLU_REQUEST_HEADER_UNPACK_BY_REF", respectively.
*
* <data_format> how to unmarshall the parameters.
* This value was returned by
* "GLU_REQUEST_HEADER_UNPACK_BY_REF".
* If NULL and request_header is NULL,
* "GLU_HEADER_UNPACK" and
* "GLU_REQUEST_HEADER_UNPACK_BY_REF" will
* be called implicitly.
*
* <request_header> defines the operation whose parameters
* are being unpacked. This value was returned
* by "GLU_REQUEST_HEADER_UNPACK_BY_REF".
* If NULL and data_format is NULL,
* "GLU_HEADER_UNPACK" and
* "GLU_REQUEST_HEADER_UNPACK_BY_REF" will
* be called implicitly.
*
* <prep> the prepared CIN which was returned by
* "GLU_INTERFACE_PREPARE". This value should
* be related to "request_header->oid".
*
* <synch> is this a synchronous or asynchronous object
* call? This value controls the interpretation
* of "pv".
*
* <pv_len_max> maximum number of elements in "pv"
*
* <to_unpack_buf> marshalled request parameters. This pointer
* should point just after the
* "GLU_request_header_def". This value should be
* computed by adding the "to_unpack_buf" and
* "to_unpack_used" values passed to/from
* "GLU_REQUEST_HEADER_UNPACK_BY_REF".
* If "GLU_HEADER_UNPACK" and
* "GLU_REQUEST_HEADER_UNPACK_BY_REF" are
* to be called implicitly (see above),
* "to_unpack_buf" should point to
* "GLU_header_def.
*
* <to_unpack_len> size of "to_unpack_buf". This value should be
* computed by subtracting the "to_unpack_len" and
* "to_unpack_used" values passed to/from
* "GLU_REQUEST_HEADER_UNPACK_BY_REF".
*
* <unpacked_len_max> size of "unpacked_data". This value should be
* computed by subtracting the "unpacked_len_max"
* and "unpacked_len" values passed to/from
* "GLU_REQUEST_HEADER_UNPACK_BY_REF".
*
* <unpacked_data> buffer to unpack the parameters into.
*
* <unpacked_len> sizeof of "unpacked_data" consumed by
* this routine.
*
* <pv> where to place the pointers to the unpacked
* parameters. For a detailed description,
* see the section "PARAMETER VECTORS".
*
* <local_op_idx> the index of the operation specified in
* "request_header".
*
* <=GLU_SHORTOUTBUF> the message could not be unpacked, because
* "unpacked_len_max" was smaller than the space
* required. "unpacked_len" is contains the
* appropriate length. Reallocate "unpacked_data"
* to at least "unpacked_len" bytes.
*
* <=GLU_BADPREPBUF> "prep" is invalid. Either the memory
* is corrupt or "GLU_INTERFACE_PREPARE" was
* not called.
*
* <=GLU_NOSUCHOP> the operation specified in "request_header"
* could not be found. Either the name was
* not found or the operation synopsis did not
* match, i.e. the operation's type signature
* defined in "prep" is not the same as the
* type signature used to pack the request.
*
* <=GLU_SHORTPV> "pv_len_max" is shorter than required to
* unpack all the parameters for the operation.
* "*local_op_idx" is valid. The correct size
* should be two plus the parameter count
* for the operation. GLU_GET_NR_PARAMETERS
* may be called to get the parameter count.
* Note that the "result" is treated as an
* "out" parameter and need not be handled
* specially.
*
* <=GLU_LONGINBUF> the message was unpacked successfully, but
* "to_unpack_len" was greater than the data
* required to successfully unmarshal the
* request. This is probably a protocol
* violation.
*
* <=GLU_SHORTINBUF> the message could not be unpacked, because
* "to_unpack_len" was smaller than the data
* required. This is probably a protocol
* violation.
*
* <=GLU_BADSEQSIZE> while unmarshalling a parameter or exception,
* a bounded sequence was encountered the
* length of which was greater than the bound.
* This is probably a protocol violation, because
* the sending ORB should have checked the length.
*
* <=GLU_BADSEQSIZE> while unmarshalling a parameter or exception,
* a bounded string was encountered the
* length of which was greater than the bound.
* This is probably a protocol violation, because
* the sending ORB should have checked the length.
*
* <=GLU_UNIMPLCONV> while unmarshalling a parameter or exception,
* a data type was encountered that could not
* be converted to the native format. This is
* likely to be caused by a conversion between
* two different floating point (real) formats.
* For example, the client sent a NaN in IEEE
* format and the server's native format is
* Tandem format which doesn't have a
* representation for NaN.
*
* <=GLU_NOTREQUEST> the header type is not GLU_TYPE_REQUEST.
* This status is only returned if
* "GLU_HEADER_DEF" is called implicitly.
*
* <=GLU_UNKNOWN> an unexpected PCU error occured. This is
* probably a protocol violation.
*/
extern GLU_status
GLU_REQUEST_BODY_UNPACK(
/* In */ const GLU_data_format_def *data_format,
/* In */ const GLU_request_header_def *request_header,
/* In */ const void *prep,
/* In */ IDL_boolean synch,
/* In */ IDL_unsigned_long pv_len_max,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len,
/* Out */ void **pv,
/* Out */ IDL_unsigned_long *local_op_idx);
extern GLU_status
GLU_REQUEST_COPY(
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ IDL_boolean synch_impl,
/* In */ const void *const *pv,
/* In */ IDL_unsigned_long max_msglen,
/* Out */ void *msgbuf,
/* Out */ IDL_unsigned_long *msglen);
/* If SHORTOUTBUF, then everything unpacked except service context */
extern GLU_status
GLU_REQUEST_HEADER_UNPACK_BY_REF(
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len,
/* Out */ GLU_data_format_def *data_format,
/* Out */ GLU_request_header_def *request_header,
/* Out */ IDL_unsigned_long *to_unpack_used);
extern GLU_status
GLU_REQUEST_PACK(
/* In */ IDL_unsigned_long request_id,
/* In */ const GLU_service_context_list_def *service_context_list,
/* In */ const char *oid,
/* In */ IDL_unsigned_long oid_len,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ IDL_boolean synch,
/* In */ const void *const *pv,
/* In */ IDL_unsigned_long packed_len_max,
/* Out */ IDL_octet *packed_buf,
/* Out */ IDL_unsigned_long *packed_len);
/* If data_format AND response_header are NULL,
GLU_RESPONSE_HEADER_UNPACK_BY_REF will be called. */
extern GLU_status
GLU_RESPONSE_BODY_UNPACK(
/* In */ const GLU_data_format_def *data_format,
/* In */ const GLU_response_header_def *response_header,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ IDL_boolean synch,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len,
/* Out */ void **pv);
extern GLU_status
GLU_RESPONSE_COPY(
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ IDL_boolean synch_impl,
/* In */ const void *const *pv,
/* In */ IDL_unsigned_long max_msglen,
/* Out */ void *msgbuf,
/* Out */ IDL_unsigned_long *msglen);
/* If SHORTOUTBUF, then everything unpacked except service context */
extern GLU_status
GLU_RESPONSE_HEADER_UNPACK_BY_REF(
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len,
/* Out */ GLU_data_format_def *data_format,
/* Out */ GLU_response_header_def *response_header,
/* Out */ IDL_unsigned_long *to_unpack_used);
extern GLU_status
GLU_RESPONSE_PACK(
/* In */ IDL_unsigned_long request_id,
/* In */ const GLU_service_context_list_def *service_context_list,
/* In */ char status,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ IDL_boolean synch,
/* In */ const void *const *pv,
/* In */ IDL_unsigned_long packed_len_max,
/* Out */ IDL_octet *packed_buf,
/* Out */ IDL_unsigned_long *packed_len);
extern GLU_status
GLU_ENCAPSULATION_PACK(
/* In */ void *pcu_prep,
/* In */ void *to_pack_data,
/* In */ IDL_unsigned_long packed_len_max,
/* Out */ IDL_octet *packed_buf,
/* Out */ IDL_unsigned_long *packed_len);
extern GLU_status
GLU_ENCAPSULATION_UNPACK(
/* In */ void *pcu_prep,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len);
extern GLU_status
GLU_ENCAPSULATION_UNPACK_SCATTER(
/* In */ void *pcu_prep,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_app_len_max,
/* Out */ void *unpacked_base,
/* Out */ void *unpacked_appendages,
/* Out */ IDL_unsigned_long *unpacked_app_len);
/*
* "GLU_STATUS_TO_TEXT" returns the address of a string
* containing a description of the specified GLU status.
*
* <sts> is the return status code whose description is required.
*
* <=descr> is the address of a zero terminated string containing
* a description of "sts"
*/
extern char *
GLU_STATUS_TO_TEXT(
/* In */ GLU_status sts);
/*
* "GLU_STDEXC_TO_TEXT" returns the address of a string
* containing a description of the specified standard exception number.
*
* <exnr> is the exception number whose description is required.
*
* <=descr> is the address of a zero terminated string containing
* a description of "exnr"
*/
extern char *
GLU_STDEXC_TO_TEXT(
/* In */ GLU_exception_nr exnr);
extern GLU_status
GLU_STRUCT_REQUEST_PACK(
/* In */ IDL_unsigned_long request_id,
/* In */ const GLU_service_context_list_def *service_context_list,
/* In */ const char *oid,
/* In */ IDL_unsigned_long oid_len,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ const void *to_pack_data,
/* In */ IDL_unsigned_long packed_len_max,
/* Out */ void *packed_buf,
/* Out */ IDL_unsigned_long *packed_len);
extern GLU_status
GLU_STRUCT_REQUEST_BODY_UNPACK(
/* In */ const GLU_data_format_def *data_format,
/* In */ const GLU_request_header_def *request_header,
/* In */ const void *prep,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len,
/* Out */ IDL_unsigned_long *local_op_idx);
extern GLU_status
GLU_STRUCT_RESPONSE_PACK(
/* In */ IDL_unsigned_long request_id,
/* In */ const GLU_service_context_list_def *service_context_list,
/* In */ char status,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ const void *to_pack_data,
/* In */ IDL_unsigned_long packed_len_max,
/* Out */ void *packed_buf,
/* Out */ IDL_unsigned_long *packed_len);
extern GLU_status
GLU_STRUCT_RESPONSE_BODY_UNPACK(
/* In */ const GLU_data_format_def *data_format,
/* In */ const GLU_response_header_def *response_header,
/* In */ const void *prep,
/* In */ IDL_unsigned_long local_op_idx,
/* In */ const IDL_octet *to_unpack_buf,
/* In */ IDL_unsigned_long to_unpack_len,
/* In */ IDL_unsigned_long unpacked_len_max,
/* Out */ void *unpacked_data,
/* Out */ IDL_unsigned_long *unpacked_len);
#ifdef __cplusplus
}
#endif
#endif