summaryrefslogtreecommitdiff
path: root/ext/satellite/corba.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/satellite/corba.c')
-rw-r--r--ext/satellite/corba.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/ext/satellite/corba.c b/ext/satellite/corba.c
new file mode 100644
index 0000000000..9b1cb77152
--- /dev/null
+++ b/ext/satellite/corba.c
@@ -0,0 +1,128 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP version 4.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: David Eriksson <eriksson@php.net> |
+ +----------------------------------------------------------------------+
+ */
+
+/*
+ * $Id$
+ * vim: syntax=c tabstop=2 shiftwidth=2
+ */
+
+/* -----------------------------------------------------------------------
+ *
+ * Control access to CORBA_ORB and CORBA_Environment objects
+ * Adjust these functions to get thread safety!
+ *
+ * -----------------------------------------------------------------------
+ */
+#include "corba.h"
+
+#ifdef HAVE_CONFIG_H
+#include "php_config.h" /* for COMPILE_DL_ORBIT */
+#endif
+
+/* ZTS = thread-safe Zend */
+#ifdef ZTS
+#error ORBit support not thread-safe, you should at least modify corba.c
+#endif
+
+static CORBA_ORB corba_orb = NULL;
+static CORBA_Environment corba_environment;
+static CORBA_boolean corba_initialized = FALSE;
+
+CORBA_boolean orbit_corba_init()
+{
+ int argc = 1;
+ char * argv[2] = { "dummy", NULL };
+
+
+#if COMPILE_DL_SATELLITE
+ /*
+ IIOP normally registers a function with atexit, but that's pretty stupid
+ when it is called from a dynamic module that is unloaded before exit()
+ is called...
+
+ "In addition, for David Eriksson (I think), added:
+ int giop_skip_atexit;
+ to IIOP. Applications may set this TRUE prior to invoking any
+ CORBA_ORB_init() calls, and it will not invoke atexit. This is
+ perhaps an ugly way of doing this, but I'm assuming this feature
+ will only be used from within specialized sharedlib applications
+ that know what they are doing...
+
+ Kennard"
+ */
+
+ giop_skip_atexit = TRUE;
+#endif
+
+ CORBA_exception_init(&corba_environment);
+ corba_orb = CORBA_ORB_init(
+ &argc, argv, "orbit-local-orb", &corba_environment);
+
+ /* check return value */
+ if (corba_orb == NULL || orbit_caught_exception())
+ {
+/* printf("orbit_corba_init failed\n");*/
+ return FALSE;
+ }
+
+ corba_initialized = TRUE;
+
+ return TRUE;
+}
+
+CORBA_boolean orbit_corba_shutdown()
+{
+ if (corba_initialized)
+ {
+ /* the orb's reference count is two.. what to do? */
+ CORBA_Object_release((CORBA_Object)corba_orb, &corba_environment);
+ CORBA_Object_release((CORBA_Object)corba_orb, &corba_environment);
+ /*CORBA_ORB_destroy(corba_orb, &corba_environment); */
+
+ CORBA_exception_free(orbit_get_environment());
+
+ corba_initialized = FALSE;
+ corba_orb = NULL;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+CORBA_ORB orbit_get_orb()
+{
+ return corba_orb;
+}
+
+CORBA_Environment * orbit_get_environment()
+{
+ return &corba_environment;
+}
+
+CORBA_boolean orbit_caught_exception()
+{
+#if 0 /*debug*/
+ if (orbit_get_environment()->_major != CORBA_NO_EXCEPTION)
+ {
+ printf("Caught exception %s\n",
+ CORBA_exception_id(orbit_get_environment()));
+ }
+#endif
+ return orbit_get_environment()->_major != CORBA_NO_EXCEPTION;
+}
+