      1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151:

    <?php /*-*- mode: php; tab-width:4 -*-*/

      /**
       * Copyright (C) 2003-2007 Jost Boekemeier.
       *
       * Permission is hereby granted, free of charge, to any person
       * obtaining a copy of this file (the "Software"), to deal in the
       * Software without restriction, including without limitation the
       * rights to use, copy, modify, merge, publish, distribute,
       * sublicense, and/or sell copies of the Software, and to permit
       * persons to whom the Software is furnished to do so, subject to the
       * following conditions:
       *
       * The above copyright notice and this permission notice shall be included in
       * all copies or substantial portions of the Software.
       *
       * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
       * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
       * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
       * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
       * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
       * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
       * OTHER DEALINGS IN THE SOFTWARE.
       *
       * @author     Jost Boekemeier
       * @license    GPL
       * @link       http://php-java-bridge.sf.net
       */

    /**
     * Helper function: Extract the URL from base and
     * and set host, port and servlet accordingly.
     * For example when the user has called:
     * require_once("http://localhost:8080/JavaBridge/java/Java.inc");
     * the JAVA_HOSTS is set to localhost:8080 and
     * JAVA_SERVLET to /JavaBridge/JavaBridge.phpjavabridge.
     * @access private
     */
    function java_defineHostFromInitialQuery($java_base) {
      if($java_base!="java") {
        $url = parse_url($java_base);
        if(isset($url["scheme"]) && ($url["scheme"]=="http" || $url["scheme"]=="https")) {
          $scheme = $url["scheme"] == "https" ? "ssl://" : "";
          $host = $url["host"];
          $port = $url["port"];
          $path = $url["path"];
          define ("JAVA_HOSTS", "${scheme}${host}:${port}");
          $dir = dirname($path);
          define ("JAVA_SERVLET", "$dir/servlet.phpjavabridge"); // On ;; On or User
          return true;
        }
      }
      return false;
    }

    /**
     * The version number of this PHP library.
     */
    define ("JAVA_PEAR_VERSION", "6.1");

    if(!defined("JAVA_SEND_SIZE"))
      define("JAVA_SEND_SIZE", 8192);

    if(!defined("JAVA_RECV_SIZE"))
      define("JAVA_RECV_SIZE", 8192);

    /**
     * The address of the HTTP back end.
     *
     * For example "127.0.0.1:8080"
     * @see JAVA_SERVLET
     */
    if(!defined("JAVA_HOSTS")) {
      if(!java_defineHostFromInitialQuery(java_get_base())) {
        if ($java_ini=get_cfg_var("java.hosts")) define("JAVA_HOSTS", $java_ini);
        else                                define("JAVA_HOSTS", "127.0.0.1:8080"); // host1:port1;host2:port2;...
      }
    }

    /**
     * Rewrite rules for incoming HTTP requests.
     *
     *Used in conjunction with
     * JAVA_HOSTS and a servlet/JEE back end
     * <ul>
     * <li>
     * "On" or 1; Hard-codes the context to "JavaBridge":
     * http://foo.com/test.php => http://host1:port1/JavaBridge/test.phpjavabridge
     * cookie path: always "/"
     *<li>
     * "bar/JavaBridge.phpjavabridge"; Hard-codes the context to "bar":
     * http://foo.com/test.php => http://host1:port1/bar/test.phpjavabridge
     * cookie path: always "/"
     *<li>
     * "User"; Separates different web apps:
     * http://foo.com/mApp1/test.php => http://host1:port1/mApp1/test.phpjavabridge
     * cookie path: /mApp1
     * http://foo.com/mApp2/test.php => http://host1:port1/mApp2/test.phpjavabridge
     * cookie path: /mApp2
     *<li>
     * "Off" or 0 doesn't use a web context at all (no cookies are generated, no
     * PHP/Java session sharing). Back-end must have been started with
     * INET:PORT or INET_LOCAL:PORT, no Servlet engine, no JEE server.
     * </ul>
     */
     if(!defined("JAVA_SERVLET")) {
       if (!(($java_ini=get_cfg_var("java.servlet"))===false)) define("JAVA_SERVLET", $java_ini);
       else                                               define("JAVA_SERVLET", 1); // Off|0, On|1 or User
    }

    /** The request log level between 0 (log off) and 4 (log debug).
     *
     * The
     * default request log level is initialized with the value from to the
     * Java system property "php.java.bridge.default_log_level".  The
     * servlet's init-param: servlet_log_level (see WEB-INF/web.xml)
     * overrides this value. The default level is 2.
     */
    if(!defined("JAVA_LOG_LEVEL"))
      if (!(($java_ini=get_cfg_var("java.log_level"))===false)) define("JAVA_LOG_LEVEL", (int)$java_ini);
      else                                                 define("JAVA_LOG_LEVEL", null); // integer between 0 and 4

    /** Set to 1 for compatibility with earlier versions.
     *
     *
     * When this flag is set, a value (null, int, ...) is returned
     * immediately and java.lang.RuntimeException/java.lang.Error is
     * thrown as a normal PHP JavaException. Otherwise a proxy
     * (RuntimeExceptionErrorMarker, Request$PHPNULL, Integer,
     * Boolean, ...) is returned and PHP must fetch Java values using
     * java_values($proxy) or with (string)$proxy. java.lang.Exceptions are thrown as usual.
     * But java.lang.RuntimeException/Errors raise a warning and terminate the script with
     * a fatal PHP error, unless the error condition is fetched and cleared within the
     * current try/catch block using java_last_exception_get()/java_last_exception_clear().
     */
    if (!defined("JAVA_PREFER_VALUES"))
      if ($java_ini=get_cfg_var("java.prefer_values")) define("JAVA_PREFER_VALUES", $java_ini);
      else                                        define("JAVA_PREFER_VALUES", 0);

    /**
     * Debug mode for the client.
     *
     * This debug flag is for PHP only. To enable the VMBridge log restart
     * Java with the -Dphp.java.bridge.default_log_level=... option.
     */
    if(!defined("JAVA_DEBUG"))
      if ($java_ini=get_cfg_var("java.debug")) define("JAVA_DEBUG", $java_ini);
      else                                define("JAVA_DEBUG", false);