This chapter describes the CORBA_Environment C structure.
Here is the complete definition of the CORBA_Environment C structure, defined in file "ic.h" :
/* Environment definition */
typedef struct {
/*----- CORBA compatibility part ------------------------*/
/* Exception tag, initially set to CORBA_NO_EXCEPTION ---*/
CORBA_exception_type _major;
/*----- External Implementation part - initiated by the user ---*/
/* File descriptor */
int _fd;
/* Size of input buffer */
int _inbufsz;
/* Pointer to always dynamically allocated buffer for input */
char *_inbuf;
/* Size of output buffer */
int _outbufsz;
/* Pointer to always dynamically allocated buffer for output */
char *_outbuf;
/* Size of memory chunks in bytes, used for increasing the outpuy
buffer, set to >= 32, should be around >= 1024 for performance
reasons */
int _memchunk;
/* Pointer for registered name */
char _regname[256];
/* Process identity for caller */
erlang_pid *_to_pid;
/* Process identity for callee */
erlang_pid *_from_pid;
/*- Internal Implementation part - used by the server/client ---*/
/* Index for input buffer */
int _iin;
/* Index for output buffer */
int _iout;
/* Pointer for operation name */
char _operation[256];
/* Used to count parameters */
int _received;
/* Used to identify the caller */
erlang_pid _caller;
/* Used to identify the call */
erlang_ref _unique;
/* Exception id field */
CORBA_char *_exc_id;
/* Exception value field */
void *_exc_value;
} CORBA_Environment;
The structure is divided into three parts:
Contains only one field _major defined as a
CORBA_Exception_type. The CORBA_Exception type is an integer
which can be one of:
The current definition of these values are:
#define CORBA_NO_EXCEPTION 0
#define CORBA_SYSTEM_EXCEPTION -1
This part contains the following fields:
This part contains the following fields:
The advanced user who defines his own functions has to update/support these values in a way similar to how they are updated in the generated code.
There are two ways to set the CORBA_Environment structure:
CORBA_Environment *CORBA_Environment_alloc(int inbufsz,
int outbufsz);
where:
![]() |
Remember to set the fields _fd, _regname, *_to_pid and/or *_from_pid to the appropriate application values. These are not automatically set by the stubs. |
![]() |
Never assign static buffers to the buffer pointers. Never set the _memchunk field to a value less than 32. |
If the user wishes to set own system exceptions at critical positions on the code, it is strongly recommended to use one of the current values:
#define UNKNOWN "UNKNOWN"
#define BAD_PARAM "BAD_PARAM"
#define NO_MEMORY "NO_MEMORY"
#define IMPL_LIMIT "IMP_LIMIT"
#define COMM_FAILURE "COMM_FAILURE"
#define INV_OBJREF "INV_OBJREF"
#define NO_PERMISSION "NO_PERMISSION"
#define INTERNAL "INTERNAL"
#define MARSHAL "MARSHAL"
#define INITIALIZE "INITIALIZE"
#define NO_IMPLEMENT "NO_IMPLEMENT"
#define BAD_TYPECODE "BAD_TYPECODE"
#define BAD_OPERATION "BAD_OPERATION"
#define NO_RESOURCES "NO_RESOURCES"
#define NO_RESPONSE "NO_RESPONSE"
#define PERSIST_STORE "PERSIST_STORE"
#define BAD_INV_ORDER "BAD_INV_ORDER"
#define TRANSIENT "TRANSIENT"
#define FREE_MEM "FREE_MEM"
#define INV_IDENT "INV_IDENT"
#define INV_FLAG "INV_FLAG"
#define INTF_REPOS "INTF_REPOS"
#define BAD_CONTEXT "BAD_CONTEXT"
#define OBJ_ADAPTER "OBJ_ADAPTER"
#define DATA_CONVERSION "DATA_CONVERSION"
#define OBJ_NOT_EXIST "OBJECT_NOT_EXIST"
The value of the _exc_value field should be then set to a string that explains the problem in an informative way. The user should use the functions CORBA_exc_set/4 and CORBA_exception_free/1 to free the exception. The user has to use CORBA_exception_id/1 and CORBA_exception_value/1 to access exception information. Prototypes for these functions are declared in "ic.h"