⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ic.h

📁 OTP是开放电信平台的简称
💻 H
字号:
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. *  * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. *  * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' *  *     $Id$ */#include <stdlib.h>#include <string.h>#include <assert.h>#include <ei.h>#include <erl_interface.h>#ifdef __WIN32__/* Windows.h #defines interface to struct, get rid of it! */#ifdef interface#undef interface#endif#endif#ifndef __IC_H__#define __IC_H__#ifdef __cplusplusextern "C" {#endif/* Standard type mapping */#ifndef __CORBA_SHORT__#define __CORBA_SHORT__    typedef short           CORBA_short;#endif#ifndef __CORBA_LONG__#define __CORBA_LONG__    typedef long            CORBA_long;#endif/* CORBA_long_long = long because of erl_interface limitation */#ifndef __CORBA_LONG_LONG__#define __CORBA_LONG_LONG__    typedef long            CORBA_long_long;  /* LONG LONG */#endif#ifndef __CORBA_UNSIGNED_SHORT__#define __CORBA_UNSIGNED_SHORT__    typedef unsigned short  CORBA_unsigned_short;#endif#ifndef __CORBA_UNSIGNED_LONG__#define __CORBA_UNSIGNED_LONG__    typedef unsigned long CORBA_unsigned_long;#endif/* CORBA_unsigned long_long = unsigned long because of erl_interface   limitation */#ifndef __CORBA_UNSIGNED_LONG_LONG__#define __CORBA_UNSIGNED_LONG_LONG__    typedef unsigned long CORBA_unsigned_long_long;#endif#ifndef __CORBA_FLOAT__#define __CORBA_FLOAT__    typedef float           CORBA_float;#endif#ifndef __CORBA_DOUBLE__#define __CORBA_DOUBLE__    typedef double          CORBA_double;#endif#ifndef __CORBA_LONG_DOUBLE__#define __CORBA_LONG_DOUBLE__    typedef double          CORBA_long_double;#endif#ifndef __CORBA_CHAR__#define __CORBA_CHAR__    typedef char            CORBA_char;#endif#ifndef __CORBA_WCHAR__#define __CORBA_WCHAR__    typedef unsigned long   CORBA_wchar;#endif#ifndef __CORBA_BOOLEAN__#define __CORBA_BOOLEAN__    typedef unsigned char   CORBA_boolean;#endif#ifndef __CORBA_OCTET__#define __CORBA_OCTET__    typedef char            CORBA_octet;#endif#ifndef CORBA_enum#define CORBA_enum      enum#endif#ifndef __ERLANG_BINARY__#define __ERLANG_BINARY__    typedef struct {	CORBA_unsigned_long _maximum;	CORBA_unsigned_long _length;	CORBA_octet* _buffer;    } erlang_binary;#endif/* Object  definition */    typedef void* CORBA_Object;/* Exception discriminators */#ifndef CORBA_NO_EXCEPTION#define CORBA_NO_EXCEPTION      0#endif#ifndef CORBA_SYSTEM_EXCEPTION#define CORBA_SYSTEM_EXCEPTION -1#endif#ifndef CORBA_USER_EXCEPTION#define CORBA_USER_EXCEPTION   -2#endif/* System exceptions */#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"/* Exception type */    typedef int CORBA_exception_type; #ifndef __CORBA_ENVIRONMENT__#define __CORBA_ENVIRONMENT__/* Environment definition */    typedef struct {	/*----- CORBA compatibility part ------------------------------------*/	CORBA_exception_type   _major;          /* Exception tag, initially set						   to CORBA_NO_EXCEPTION   */	/*----- External Implementation part - initiated by the user --------*/	int                    _fd;             /* File descriptor           */	int                    _inbufsz;        /* Size of input buffer      */	char                  *_inbuf;          /* Pointer to always 						   dynamically allocated 						   buffer for input   */	int                    _outbufsz;       /* Size of output buffer     */	char                  *_outbuf;         /* Pointer to always						   dynamically						   allocated buffer						   for output */	int                    _memchunk;       /* Size of memory						   chunks in bytes,						   used for increasing						   the output buffer,						   set to >= 32,						   should be around >=						   1024 for						   performance reasons */	char                   _regname[256];   /* Pointer for                                                   registered name */	erlang_pid            *_to_pid;         /* Process identity                                                   for caller */	erlang_pid            *_from_pid;       /* Process identity                                                   for callee */	/*----- Internal Implementation part - used by the server/client ----*/	int                    _iin;            /* Index for input buffer */	int                    _iout;           /* Index for output buffer */	char                   _operation[256]; /* Pointer for operation name*/	int                    _received;       /* Used to count parameters */	erlang_pid             _caller;         /* Used to identify                                                   the caller*/	erlang_ref             _unique;         /* Used to identify the call */	CORBA_char            *_exc_id;         /* Exception id field        */	void                  *_exc_value;      /* Exception value field     */  	unsigned int          _ref_counter_1;   /* Counter for reference     */	unsigned int          _ref_counter_2;   /* Counter for reference     */	unsigned int          _ref_counter_3;   /* Counter for reference     */    } CORBA_Environment; #endif/* Corba standard functions */    void CORBA_free(void *);    CORBA_char *CORBA_string_alloc(CORBA_unsigned_long);    CORBA_wchar *CORBA_wstring_alloc(CORBA_unsigned_long);    CORBA_char *CORBA_exception_id(CORBA_Environment *env);    void *CORBA_exception_value(CORBA_Environment *env);    void CORBA_exception_free(CORBA_Environment *env);    void CORBA_exc_set(CORBA_Environment *env,		       CORBA_exception_type Major,		       CORBA_char *Id,		       CORBA_char *Value);    CORBA_Environment *CORBA_Environment_alloc(int inbufsz, int outbufsz);    void ic_init_ref(CORBA_Environment *env, erlang_ref *ref);    int ic_compare_refs(erlang_ref *ref1, erlang_ref *ref2);/* Used internally */#define __OE_MEMCHUNK__   1024#define __OE_VSNSZ__         1#define __OE_LONGSZ__        7#define __OE_LONGLONGSZ__    7#define __OE_ULONGSZ__       7#define __OE_ULONGLONGSZ__   7#define __OE_DOUBLESZ__     32#define __OE_CHARSZ__        2#define __OE_WCHARSZ__       7  #define __OE_TUPLEHDRSZ__    5#define __OE_LISTHDRSZ__     5/* The actual size of a wide char */#define __OE_WCHAR_SIZE_OF__ 4  /* Size check macro */#define OE_MALLOC_SIZE_CHECK(env,x) { \    assert((x) > 0); \    if (!((x) > 0)) { \        CORBA_exc_set((env), CORBA_SYSTEM_EXCEPTION, INTERNAL, \            "Bad malloc size calculation"); \        return -1; \    } \}/* Exec function -- probably not needed */    typedef int oe_exec_function_t(CORBA_Object, CORBA_Environment*);/* These are for backward compatibility */    typedef oe_exec_function_t ___exec_function___;    typedef oe_exec_function_t ___generic___;/* Operation declaration */    typedef struct {	char *interface;	char *name;	oe_exec_function_t  *function;    } oe_operation_t;/* For backward compatibility */    typedef oe_operation_t ___operation___;/* Map declaration */    typedef struct {	int length;	oe_operation_t *operations;    } oe_map_t;/* For backward compatibility */    typedef oe_map_t ___map___;/* Align macro */#define OE_ALIGN(x) (((x) + sizeof(double) - 1) & ~(sizeof(double) - 1))/* Encoders */     int oe_ei_encode_version(CORBA_Environment *env);    int oe_ei_encode_long(CORBA_Environment *env, long p);    int oe_ei_encode_longlong(CORBA_Environment *env, CORBA_long_long p);    int oe_ei_encode_ulong(CORBA_Environment *env, unsigned long p);    int oe_ei_encode_ulonglong(CORBA_Environment *env, 			       CORBA_unsigned_long_long p);    int oe_ei_encode_double(CORBA_Environment *env, double p);    int oe_ei_encode_char(CORBA_Environment *env, char p);    int oe_ei_encode_wchar(CORBA_Environment *env, CORBA_wchar p);    int oe_ei_encode_string(CORBA_Environment *env, const char *p);    int oe_ei_encode_wstring(CORBA_Environment *env, CORBA_wchar *p);    int oe_ei_encode_atom(CORBA_Environment *env, const char *p);    int oe_ei_encode_pid(CORBA_Environment *env, const erlang_pid *p);    int oe_ei_encode_port(CORBA_Environment *env, const erlang_port *p);    int oe_ei_encode_ref(CORBA_Environment *env, const erlang_ref *p);    int oe_ei_encode_term(CORBA_Environment *env, void *t);     int oe_ei_encode_tuple_header(CORBA_Environment *env, int arity);    int oe_ei_encode_list_header(CORBA_Environment *env, int arity);    int oe_encode_erlang_binary(CORBA_Environment *env, erlang_binary *binary);#define oe_ei_encode_empty_list(ev) oe_ei_encode_list_header(ev,0)/* Decoders */    int oe_ei_decode_wchar(const char *buf, int *index, CORBA_wchar *p);    int oe_ei_decode_wstring(const char *buf, int *index, CORBA_wchar *p);    int oe_ei_decode_longlong(const char *buf, int *index, CORBA_long_long *p);    int oe_ei_decode_ulonglong(const char *buf, int *index, 			       CORBA_unsigned_long_long *p);    int oe_decode_erlang_binary(CORBA_Environment *env, char *buf, int *index, 				erlang_binary *binary);/* Generic client encoders (gen_server protocol) */    int oe_prepare_notification_encoding(CORBA_Environment *env);    int oe_prepare_request_encoding(CORBA_Environment *env);/* Generic client decoders (gen_server protocol) */    int oe_prepare_reply_decoding(CORBA_Environment *env);/* Generic client send and receive functions (Erlang distribution protocol) */    int oe_send_notification(CORBA_Environment *env);    int oe_send_notification_tmo(CORBA_Environment *env, unsigned int send_ms);    int oe_send_request_and_receive_reply(CORBA_Environment *env);    int oe_send_request_and_receive_reply_tmo(CORBA_Environment *env,					      unsigned int send_ms,					      unsigned int recv_ms);/* Generic server decoder */    int oe_prepare_request_decoding(CORBA_Environment *env);/* Generic server encoder */    int oe_prepare_reply_encoding(CORBA_Environment *env);/* -------- *//* Generic server receive (possibly send reply) */    int oe_server_receive(CORBA_Environment *env, oe_map_t *map);    int oe_server_receive_tmo(CORBA_Environment *env, oe_map_t *map,			      unsigned int send_ms,			      unsigned int recv_ms);/* -------- *//* Size calculators */    int oe_sizecalc_erlang_binary(CORBA_Environment *env, int *index, 				  int *size);/* Print functions */    int print_erlang_binary(erlang_binary*);/* Length counter for wide strings */    int ic_wstrlen(CORBA_wchar * p); /* Wide string comparison */    int ic_wstrcmp(CORBA_wchar * ws1, CORBA_wchar * ws2);/* Put for 64-bits integer type */#define put64le(s,n) do { \  (s)[0] = (n) & 0xff;  \  (s)[1] = ((n) >>  8) & 0xff; \  (s)[2] = ((n) >>  16) & 0xff; \  (s)[3] = ((n) >>  24) & 0xff; \  (s)[4] = ((n) >>  32) & 0xff; \  (s)[5] = ((n) >>  40) & 0xff; \  (s)[6] = ((n) >>  48) & 0xff; \  (s)[7] = ((n) >>  56) & 0xff; \  (s)[8] = ((n) >>  64) & 0xff; \  (s) += 8; \} while (0)/* Get for 64-bits integer type */#define get64le(s) \  ((s) += 8, \   ((((unsigned char *)(s))[-1] << 56) | \    (((unsigned char *)(s))[-2] << 48) | \    (((unsigned char *)(s))[-3] << 40) | \    (((unsigned char *)(s))[-4] << 32) | \    (((unsigned char *)(s))[-5] << 24) | \    (((unsigned char *)(s))[-6] << 16) | \    (((unsigned char *)(s))[-7] << 8) | \    ((unsigned char *)(s))[-8]))/* Exec function switch */    int oe_exec_switch(CORBA_Object, CORBA_Environment*, oe_map_t*);/* For backward compatibility */    int ___switch___(CORBA_Object, CORBA_Environment*, oe_map_t*);/* For backward compatibility -- replaced by oe_prepare_request_decoding() */    int ___call_info___(CORBA_Object, CORBA_Environment*); /* Map merging */    oe_map_t* oe_merge_maps(oe_map_t*, int); /* For backward compatibility */    oe_map_t* ___merge___(oe_map_t*, int); /* Macro for error reporting */#ifdef OE_C_REPORT#define OE_RPT_ERR(x)  fprintf(stderr, (x))#else#define OE_RPT_ERR(x)  #endif       #ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -