All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.java.Java.inc Maven / Gradle / Ivy

There is a newer version: 7.1.3
Show newest version
0) {
$thiz=$ar[$arLen-1];
return dirname($thiz);
} else {
return "java";
}
}
function java_truncate($str) {
if (strlen($str)>955)
return substr($str,0,475).'[...]'.substr($str,-475);
return $str;
}
class java_JavaException extends Exception {
function __toString() {return $this->getMessage();}
};
class java_RuntimeException extends java_JavaException {};
class java_IOException extends java_JavaException {};
class java_ConnectException extends java_IOException {};
class java_IllegalStateException extends java_RuntimeException {};
class java_IllegalArgumentException extends java_RuntimeException {
function __construct($ob) {
parent::__construct("illegal argument: ".gettype($ob));
}
};
function java_autoload_function5($x) {
$s=str_replace("_",".",$x);
$c=__javaproxy_Client_getClient();
if(!($c->invokeMethod(0,"typeExists",array($s)))) return false;
$i="class ${x} extends Java {".
"static function type(\$sub=null){if(\$sub) \$sub='\$'.\$sub; return java('${s}'.\"\$sub\");}".
'function __construct() {$args=func_get_args();'.
'array_unshift($args,'."'$s'".'); parent::__construct($args);}}';
eval ("$i");
return true;
}
function java_autoload_function($x) {
$idx=strrpos($x,"\\"); if (!$idx) return java_autoload_function5($x);
$str=str_replace("\\",".",$x);
$client=__javaproxy_Client_getClient();
if(!($client->invokeMethod(0,"typeExists",array($str)))) return false;
$package=substr($x,0,$idx);
$name=substr($x,1+$idx);
$instance="namespace $package; class ${name} extends \\Java {".
"static function type(\$sub=null){if(\$sub) \$sub='\$'.\$sub;return \\java('${str}'.\"\$sub\");}".
"static function __callStatic(\$procedure,\$args) {return \\java_invoke(\\java('${str}'),\$procedure,\$args);}".
'function __construct() {$args=func_get_args();'.
'array_unshift($args,'."'$str'".'); parent::__construct($args);}}';
eval ("$instance");
return true;
}
if(!defined("JAVA_DISABLE_AUTOLOAD") && function_exists("spl_autoload_register")) spl_autoload_register("java_autoload_function");
function java_autoload($libs=null) {
trigger_error('Please use getHttpServletResponse();
$res=new java("php.java.servlet.RemoteHttpServletResponse",$res);
$req->getRequestDispatcher($path)->include($req,$res);
if ($return) return $res->getBufferContents();
echo $res->getBufferContents();
return true;
}
function Java($name) {
static $classMap=array();
if(array_key_exists($name,$classMap)) return $classMap[$name];
return $classMap[$name]=new JavaClass($name);
}
function java_get_closure() {return java_closure_array(func_get_args());}
function java_wrap() {return java_closure_array(func_get_args());}
function java_get_values($arg) { return java_values($arg); }
function java_get_session() {return java_session_array(func_get_args());}
function java_get_context() {return java_context(); }
function java_get_server_name() { return java_server_name(); }
function java_isnull($value) { return is_null (java_values ($value)); }
function java_is_null($value) { return is_null (java_values ($value)); }
function java_istrue($value) { return (boolean)(java_values ($value)); }
function java_is_true($value) { return (boolean)(java_values ($value)); }
function java_isfalse($value) { return !(java_values ($value)); }
function java_is_false($value) { return !(java_values ($value)); }
function java_set_encoding($enc) { return java_set_file_encoding ($enc); }
function java_call_with_continuation($kontinuation=null) {
if (java_getHeader("X_JAVABRIDGE_INCLUDE",$_SERVER) && !java_getHeader("X_JAVABRIDGE_INCLUDE_ONLY",$_SERVER)) {
if (is_null($kontinuation))
java_context()->call(java_closure());
elseif (is_string($kontinuation))
java_context()->call(call_user_func($kontinuation));
elseif ($kontinuation instanceof java_JavaType)
java_context()->call($kontinuation);
else
java_context()->call(java_closure($kontinuation));
}
}
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");
return true;
}
}
return false;
}
define("JAVA_PEAR_VERSION","");
if(!defined("JAVA_SEND_SIZE"))
define("JAVA_SEND_SIZE",8192);
if(!defined("JAVA_RECV_SIZE"))
define("JAVA_RECV_SIZE",8192);
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");
}
}
if(!defined("JAVA_SERVLET")) {
if (!(($java_ini=get_cfg_var("java.servlet"))===false)) define("JAVA_SERVLET",$java_ini);
else define("JAVA_SERVLET",1);
}
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);
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);
class java_SimpleFactory {
public $client;
function __construct($client) {
$this->client=$client;
}
function getProxy($result,$signature,$exception,$wrap) {
return $result;
}
function checkResult($result) {
}
}
class java_ProxyFactory extends java_SimpleFactory {
function create($result,$signature) {
return new java_JavaProxy($result,$signature);
}
function createInternal($proxy) {
return new java_InternalJava($proxy);
}
function getProxy($result,$signature,$exception,$wrap) {
$proxy=$this->create($result,$signature);
if($wrap) $proxy=$this->createInternal($proxy);
return $proxy;
}
}
class java_ArrayProxyFactory extends java_ProxyFactory {
function create($result,$signature) {
return new java_ArrayProxy($result,$signature);
}
}
class java_IteratorProxyFactory extends java_ProxyFactory {
function create($result,$signature) {
return new java_IteratorProxy($result,$signature);
}
}
class java_ExceptionProxyFactory extends java_SimpleFactory {
function create($result,$signature) {
return new java_ExceptionProxy($result,$signature);
}
function getProxy($result,$signature,$exception,$wrap) {
$proxy=$this->create($result,$signature);
if($wrap) $proxy=new java_InternalException($proxy,$exception);
return $proxy;
}
}
class java_ThrowExceptionProxyFactory extends java_ExceptionProxyFactory {
function getProxy($result,$signature,$exception,$wrap) {
$proxy=$this->create($result,$signature);
$proxy=new java_InternalException($proxy,$exception);
return $proxy;
}
function checkResult($result) {
if (JAVA_PREFER_VALUES || ($result->__hasDeclaredExceptions=='T'))
throw $result;
else {
trigger_error("Unchecked exception detected: ".java_truncate($result->__toString()),E_USER_WARNING);
}
}
}
class java_CacheEntry {
public $fmt,$signature,$factory,$java;
public $resultVoid;
function __construct($fmt,$signature,$factory,$resultVoid) {
$this->fmt=$fmt;
$this->signature=$signature;
$this->factory=$factory;
$this->resultVoid=$resultVoid;
}
}
class java_Arg {
public $client;
public $exception;
public $factory,$val;
public $signature;
function __construct($client) {
$this->client=$client;
$this->factory=$client->simpleFactory;
}
function linkResult(&$val) {
$this->val=&$val;
}
function setResult($val) {
$this->val=&$val;
}
function getResult($wrap) {
$rc=$this->factory->getProxy($this->val,$this->signature,$this->exception,$wrap);
$factory=$this->factory;
$this->factory=$this->client->simpleFactory;
$factory->checkResult($rc);
return $rc;
}
function setFactory($factory) {
$this->factory=$factory;
}
function setException($string) {
$this->exception=$string;
}
function setVoidSignature() {
$this->signature="@V";
$key=$this->client->currentCacheKey;
if($key && $key[0]!='~') {
$this->client->currentArgumentsFormat[6]="3";
$cacheEntry=new java_CacheEntry($this->client->currentArgumentsFormat,$this->signature,$this->factory,true);
$this->client->methodCache[$key]=$cacheEntry;
}
}
function setSignature($signature) {
$this->signature=$signature;
$key=$this->client->currentCacheKey;
if($key && $key[0]!='~') {
$cacheEntry=new java_CacheEntry($this->client->currentArgumentsFormat,$this->signature,$this->factory,false);
$this->client->methodCache[$key]=$cacheEntry;
}
}
}
class java_CompositeArg extends java_Arg {
public $parentArg;
public $idx;
public $type;
public $counter;
function __construct($client,$type) {
parent::__construct($client);
$this->type=$type;
$this->val=array();
$this->counter=0;
}
function setNextIndex() {
$this->idx=$this->counter++;
}
function setIndex($val) {
$this->idx=$val;
}
function linkResult(&$val) {
$this->val[$this->idx]=&$val;
}
function setResult($val) {
$this->val[$this->idx]=$this->factory->getProxy($val,$this->signature,$this->exception,true);
$this->factory=$this->client->simpleFactory;
}
}
class java_ApplyArg extends java_CompositeArg {
public $m,$p,$v,$n;
function __construct($client,$type,$m,$p,$v,$n) {
parent::__construct($client,$type);
$this->m=$m;
$this->p=$p;
$this->v=$v;
$this->n=$n;
}
}
class java_Client {
public $RUNTIME;
public $result,$exception;
public $parser;
public $simpleArg,$compositeArg;
public $simpleFactory,
$proxyFactory,$iteratorProxyFacroty,
$arrayProxyFactory,$exceptionProxyFactory,$throwExceptionProxyFactory;
public $arg;
public $asyncCtx,$cancelProxyCreationTag;
public $globalRef;
public $stack;
public $defaultCache=array(),$asyncCache=array(),$methodCache;
public $isAsync=0;
public $currentCacheKey,$currentArgumentsFormat;
public $cachedJavaPrototype;
public $sendBuffer,$preparedToSendBuffer;
public $inArgs;
function __construct() {
$this->RUNTIME=array();
$this->RUNTIME["NOTICE"]='***USE echo java_inspect(jVal) OR print_r(java_values(jVal)) TO SEE THE CONTENTS OF THIS JAVA OBJECT!***';
$this->parser=new java_Parser($this);
$this->protocol=new java_Protocol($this);
$this->simpleFactory=new java_SimpleFactory($this);
$this->proxyFactory=new java_ProxyFactory($this);
$this->arrayProxyFactory=new java_ArrayProxyFactory($this);
$this->iteratorProxyFactory=new java_IteratorProxyFactory($this);
$this->exceptionProxyFactory=new java_ExceptionProxyFactory($this);
$this->throwExceptionProxyFactory=new java_ThrowExceptionProxyFactory($this);
$this->cachedJavaPrototype=new java_JavaProxyProxy($this);
$this->simpleArg=new java_Arg($this);
$this->globalRef=new java_GlobalRef();
$this->asyncCtx=$this->cancelProxyCreationTag=0;
$this->methodCache=$this->defaultCache;
$this->inArgs=false;
}
function read($size) {
return $this->protocol->read($size);
}
function setDefaultHandler() {
$this->methodCache=$this->defaultCache;
}
function setAsyncHandler() {
$this->methodCache=$this->asyncCache;
}
function handleRequests() {
$tail_call=false;
do {
$this->stack=array($this->arg=$this->simpleArg);
$this->idx=0;
$this->parser->parse();
if((count($this->stack)) > 1) {
$arg=array_pop($this->stack);
$this->apply($arg);
$tail_call=true;
} else {
$tail_call=false;
}
$this->stack=null;
} while($tail_call);
return 1;
}
function getWrappedResult($wrap) {
return $this->simpleArg->getResult($wrap);
}
function getInternalResult() {
return $this->getWrappedResult(false);
}
function getResult() {
return $this->getWrappedResult(true);
}
function getProxyFactory($type) {
switch($type[0]) {
case 'E':
$factory=$this->exceptionProxyFactory;
break;
case 'C':
$factory=$this->iteratorProxyFactory;
break;
case 'A':
$factory=$this->arrayProxyFactory;
break;
default:
case 'O':
$factory=$this->proxyFactory;
}
return $factory;
}
function link(&$arg,&$newArg) {
$arg->linkResult($newArg->val);
$newArg->parentArg=$arg;
}
function getExact($str) {
return hexdec($str);
}
function getInexact($str) {
$val=null;
sscanf($str,"%e",$val);
return $val;
}
function begin($name,$st) {
$arg=$this->arg;
switch($name[0]) {
case 'A':
$object=$this->globalRef->get($this->getExact($st['v']));
$newArg=new java_ApplyArg($this,'A',
$this->parser->getData($st['m']),
$this->parser->getData($st['p']),
$object,
$this->getExact($st['n']));
$this->link($arg,$newArg);
array_push($this->stack,$this->arg=$newArg);
break;
case 'X':
$newArg=new java_CompositeArg($this,$st['t']);
$this->link($arg,$newArg);
array_push($this->stack,$this->arg=$newArg);
break;
case 'P':
if($arg->type=='H') {
$s=$st['t'];
if($s[0]=='N') {
$arg->setIndex($this->getExact($st['v']));
} else {
$arg->setIndex($this->parser->getData($st['v']));
}
} else {
$arg->setNextIndex();
}
break;
case 'S':
$arg->setResult($this->parser->getData($st['v']));
break;
case 'B':
$s=$st['v'];
$arg->setResult($s[0]=='T');
break;
case 'L':
$sign=$st['p'];
$val=$this->getExact($st['v']);
if($sign[0]=='A') $val*=-1;
$arg->setResult($val);
break;
case 'D':
$arg->setResult($this->getInexact($st['v']));
break;
case 'V':
if ($st['n']!='T') {
$arg->setVoidSignature();
}
case 'N':
$arg->setResult(null);
break;
case 'F':
break;
case 'O':
$arg->setFactory($this->getProxyFactory($st['p']));
$arg->setResult($this->asyncCtx=$this->getExact($st['v']));
if($st['n']!='T') $arg->setSignature($st['m']);
break;
case 'E':
$arg->setFactory($this->throwExceptionProxyFactory);
$arg->setException($st['m']);
$arg->setResult($this->asyncCtx=$this->getExact($st['v']));
break;
default:
$this->parser->parserError();
}
}
function end($name) {
switch($name[0]) {
case 'X':
$frame=array_pop($this->stack);
$this->arg=$frame->parentArg;
break;
}
}
function createParserString() {
return new java_ParserString();
}
function writeArg($arg) {
if(is_string($arg)) {
$this->protocol->writeString($arg);
} else if(is_object($arg)) {
if ((!$arg instanceof java_JavaType)) {
error_log((string)new java_IllegalArgumentException($arg));
trigger_error("argument '".get_class($arg)."' is not a Java object,using NULL instead",E_USER_WARNING);
$this->protocol->writeObject(null);
} else {
$this->protocol->writeObject($arg->__java);
}
} else if(is_null($arg)) {
$this->protocol->writeObject(null);
} else if(is_bool($arg)) {
$this->protocol->writeBoolean($arg);
} else if(is_integer($arg)) {
$this->protocol->writeLong($arg);
} else if(is_float($arg)) {
$this->protocol->writeDouble($arg);
} else if(is_array($arg)) {
$wrote_begin=false;
foreach($arg as $key=>$val) {
if(is_string($key)) {
if(!$wrote_begin) {
$wrote_begin=1;
$this->protocol->writeCompositeBegin_h();
}
$this->protocol->writePairBegin_s($key);
$this->writeArg($val);
$this->protocol->writePairEnd();
} else {
if(!$wrote_begin) {
$wrote_begin=1;
$this->protocol->writeCompositeBegin_h();
}
$this->protocol->writePairBegin_n($key);
$this->writeArg($val);
$this->protocol->writePairEnd();
}
}
if(!$wrote_begin) {
$this->protocol->writeCompositeBegin_a();
}
$this->protocol->writeCompositeEnd();
}
}
function writeArgs($args) {
$this->inArgs=true;
$n=count($args);
for($i=0; $i<$n; $i++) {
$this->writeArg($args[$i]);
}
$this->inArgs=false;
}
function createObject($name,$args) {
$this->protocol->createObjectBegin($name);
$this->writeArgs($args);
$this->protocol->createObjectEnd();
$val=$this->getInternalResult();
return $val;
}
function referenceObject($name,$args) {
$this->protocol->referenceBegin($name);
$this->writeArgs($args);
$this->protocol->referenceEnd();
$val=$this->getInternalResult();
return $val;
}
function getProperty($object,$property) {
$this->protocol->propertyAccessBegin($object,$property);
$this->protocol->propertyAccessEnd();
return $this->getResult();
}
function setProperty($object,$property,$arg) {
$this->protocol->propertyAccessBegin($object,$property);
$this->writeArg($arg);
$this->protocol->propertyAccessEnd();
$this->getResult();
}
function invokeMethod($object,$method,$args) {
$this->protocol->invokeBegin($object,$method);
$this->writeArgs($args);
$this->protocol->invokeEnd();
$val=$this->getResult();
return $val;
}
function unref($object) {
if (isset($this->protocol)) $this->protocol->writeUnref($object);
}
function apply($arg) {
$name=$arg->p;
$object=$arg->v;
$ob=($object==null) ? $name : array(&$object,$name);
$isAsync=$this->isAsync;
$methodCache=$this->methodCache;
$currentArgumentsFormat=$this->currentArgumentsFormat;
try {
$res=$arg->getResult(true);
if((($object==null) && !function_exists($name)) || (!($object==null) && !method_exists($object,$name))) throw new JavaException("java.lang.NoSuchMethodError","$name");
$res=call_user_func_array($ob,$res);
if (is_object($res) && (!($res instanceof java_JavaType))) {
trigger_error("object returned from $name() is not a Java object",E_USER_WARNING);
$this->protocol->invokeBegin(0,"makeClosure");
$this->protocol->writeULong($this->globalRef->add($res));
$this->protocol->invokeEnd();
$res=$this->getResult();
}
$this->protocol->resultBegin();
$this->writeArg($res);
$this->protocol->resultEnd();
} catch (JavaException $e) {
$trace=$e->getTraceAsString();
$this->protocol->resultBegin();
$this->protocol->writeException($e->__java,$trace);
$this->protocol->resultEnd();
} catch(Exception $ex) {
error_log($ex->__toString());
trigger_error("Unchecked exception detected in callback",E_USER_ERROR);
die (1);
}
$this->isAsync=$isAsync;
$this->methodCache=$methodCache;
$this->currentArgumentsFormat=$currentArgumentsFormat;
}
function cast($object,$type) {
switch($type[0]) {
case 'S': case 's':
return $this->invokeMethod(0,"castToString",array($object));
case 'B': case 'b':
return $this->invokeMethod(0,"castToBoolean",array($object));
case 'L': case 'I': case 'l': case 'i':
return $this->invokeMethod(0,"castToExact",array($object));
case 'D': case 'd': case 'F': case 'f':
return $this->invokeMethod(0,"castToInExact",array($object));
case 'N': case 'n':
return null;
case 'A': case 'a':
return $this->invokeMethod(0,"castToArray",array($object));
case 'O': case 'o':
return $object;
default:
throw new java_RuntimeException("$type illegal");
}
}
function getContext() {
static $cache=null;
if (!is_null($cache)) return $cache;
return $cache=$this->invokeMethod(0,"getContext",array());
}
function getSession($args) {
return $this->invokeMethod(0,"getSession",$args);
}
function getServerName() {
static $cache=null;
if (!is_null($cache)) return $cache;
return $cache=$this->protocol->getServerName();
}
}
function java_shutdown() {
global $java_initialized;
if (!$java_initialized) return;
if (session_id()) session_write_close();
$client=__javaproxy_Client_getClient();
if (!isset($client->protocol) || $client->inArgs) return;
if ($client->preparedToSendBuffer)
$client->sendBuffer.=$client->preparedToSendBuffer;
$client->sendBuffer.=$client->protocol->getKeepAlive();
$client->protocol->flush();
$client->protocol->keepAlive();
}
register_shutdown_function("java_shutdown");
class java_GlobalRef {
public $map;
function __construct() {
$this->map=array();
}
function add($object) {
if(is_null($object)) return 0;
return array_push($this->map,$object);
}
function get($id) {
if(!$id) return 0;
return $this->map[--$id];
}
}
class java_NativeParser {
public $parser,$handler;
public $level,$event;
public $buf;
function __construct($handler) {
$this->handler=$handler;
$this->parser=xml_parser_create();
xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,0);
xml_set_object($this->parser,$this);
xml_set_element_handler($this->parser,"begin","end");
xml_parse($this->parser,"");
$this->level=0;
}
function begin($parser,$name,$param) {
$this->event=true;
switch($name) {
case 'X': case 'A': $this->level+=1;
}
$this->handler->begin($name,$param);
}
function end($parser,$name) {
$this->handler->end($name);
switch($name) {
case 'X': case 'A': $this->level-=1;
}
}
function getData($str) {
return base64_decode($str);
}
function parse() {
do {
$this->event=false;
$buf=$this->buf=$this->handler->read(JAVA_RECV_SIZE);
$len=strlen($buf);
if(!xml_parse($this->parser,$buf,$len==0)) {
$this->handler->protocol->handler->shutdownBrokenConnection(
sprintf("protocol error: %s,%s at col %d. Check the back end log for OutOfMemoryErrors.",
$buf,
xml_error_string(xml_get_error_code($this->parser)),
xml_get_current_column_number($this->parser)));
}
} while(!$this->event || $this->level>0);
}
function parserError() {
$this->handler->protocol->handler->shutdownBrokenConnection(
sprintf("protocol error: %s. Check the back end log for details.",$this->buf));
}
}
class java_Parser {
public $parser;
function __construct($handler) {
if(function_exists("xml_parser_create")) {
$this->parser=new java_NativeParser($handler);
$handler->RUNTIME["PARSER"]="NATIVE";
} else {
$this->parser=new java_SimpleParser($handler);
$handler->RUNTIME["PARSER"]="SIMPLE";
}
}
function parse() {
$this->parser->parse();
}
function getData($str) {
return $this->parser->getData($str);
}
function parserError() {
$this->parser->parserError();
}
}
function java_getHeader($name,$array) {
if (array_key_exists($name,$array)) return $array[$name];
$name="HTTP_$name";
if (array_key_exists($name,$array)) return $array[$name];
return null;
}
function java_checkCliSapi() {
$sapi=substr(php_sapi_name(),0,3);
return ((($sapi=='cgi') && !get_cfg_var("java.session")) || ($sapi=='cli'));
}
function java_getCompatibilityOption($client) {
static $compatibility=null;
if ($compatibility) return $compatibility;
$compatibility=$client->RUNTIME["PARSER"]=="NATIVE"
? (0103-JAVA_PREFER_VALUES)
: (0100+JAVA_PREFER_VALUES);
if(is_int(JAVA_LOG_LEVEL)) {
$compatibility |=128 | (7 & JAVA_LOG_LEVEL)<<2;
}
$compatibility=chr ($compatibility);
return $compatibility;
}
class java_EmptyChannel {
protected $handler;
private $res;
function __construct($handler) {
$this->handler=$handler;
}
function shutdownBrokenConnection () {}
function fwrite($data) {
return $this->handler->fwrite($data);
}
function fread($size) {
return $this->handler->fread($size);
}
function getKeepAliveA() {
return "";
}
function getKeepAliveE() {
return "";
}
function getKeepAlive() {
return $this->getKeepAliveE();
}
function error() {
trigger_error("An unchecked exception occured during script execution. Please check the server log files for details.",E_USER_ERROR);
}
function checkA($peer) {
$val=$this->res[6];
if ($val !='A') fclose($peer);
if ($val !='A' && $val !='E') {
$this->error();
}
}
function checkE() {
$val=$this->res[6];
if ($val !='E') {
$this->error();
}
}
function keepAliveS() {
$this->res=$this->fread(10);
}
function keepAliveSC() {
$this->res=$this->fread(10);
$this->fwrite("");
$this->fread(JAVA_RECV_SIZE);
}
function keepAliveH() {
$this->res=$this->handler->read(10);
}
function keepAlive() {
$this->keepAliveH();
$this->checkE();
}
}
abstract class java_SocketChannel extends java_EmptyChannel {
public $peer,$host;
function __construct($peer,$host) {
$this->peer=$peer;
$this->host=$host;
}
function fwrite($data) {
return fwrite($this->peer,$data);
}
function fread($size) {
return fread($this->peer,$size);
}
function shutdownBrokenConnection () {
fclose($this->peer);
}
}
class java_SocketChannelP extends java_SocketChannel {
function getKeepAlive() {return $this->getKeepAliveA();}
function keepAlive() { $this->keepAliveS(); $this->checkA($this->peer); }
}
class java_ChunkedSocketChannel extends java_SocketChannel {
function fwrite($data) {
$len=dechex(strlen($data));
return fwrite($this->peer,"${len}\r\n${data}\r\n");
}
function fread($size) {
$length=hexdec(fgets($this->peer,JAVA_RECV_SIZE));
$data="";
while ($length > 0) {
$str=fread($this->peer,$length);
if (feof ($this->peer)) return null;
$length -=strlen($str);
$data .=$str;
}
fgets($this->peer,3);
return $data;
}
function keepAlive() { $this->keepAliveSC(); $this->checkE(); fclose ($this->peer); }
}
class java_SocketHandler {
public $protocol,$channel;
function __construct($protocol,$channel) {
$this->protocol=$protocol;
$this->channel=$channel;
}
function write($data) {
return $this->channel->fwrite($data);
}
function fwrite($data) {return $this->write($data);}
function read($size) {
return $this->channel->fread($size);
}
function fread($size) {return $this->read($size);}
function redirect() {}
function getKeepAlive() {
return $this->channel->getKeepAlive();
}
function keepAlive() {
$this->channel->keepAlive();
}
function dieWithBrokenConnection($msg) {
unset($this->protocol->client->protocol);
trigger_error ($msg?$msg:"unknown error: please see back end log for details",E_USER_ERROR);
}
function shutdownBrokenConnection ($msg) {
$this->channel->shutdownBrokenConnection();
$this->dieWithBrokenConnection($msg);
}
}
class java_SimpleHttpHandler extends java_SocketHandler {
public $headers,$cookies;
public $context,$ssl,$port;
public $host;
function createChannel() {
$channelName=java_getHeader("X_JAVABRIDGE_REDIRECT",$_SERVER);
$context=java_getHeader("X_JAVABRIDGE_CONTEXT",$_SERVER);
$len=strlen($context);
$len0=java_getCompatibilityOption($this->protocol->client);
$len1=chr($len&0xFF); $len>>=8;
$len2=chr($len&0xFF);
$this->channel=new java_EmptyChannel($this);
$this->channel=$this->getChannel($channelName);
$this->protocol->socketHandler=new java_SocketHandler($this->protocol,$this->channel);
$this->protocol->write("\177${len0}${len1}${len2}${context}");
$this->context=sprintf("X_JAVABRIDGE_CONTEXT: %s\r\n",$context);
$this->protocol->handler=$this->protocol->socketHandler;
$this->protocol->handler->write($this->protocol->client->sendBuffer)
or $this->protocol->handler->shutdownBrokenConnection("Broken local connection handle");
$this->protocol->client->sendBuffer=null;
$this->protocol->handler->read(1)
or $this->protocol->handler->shutdownBrokenConnection("Broken local connection handle");
}
function __construct($protocol,$ssl,$host,$port) {
$this->cookies=array();
$this->protocol=$protocol;
$this->ssl=$ssl;
$this->host=$host;
$this->port=$port;
$this->createChannel();
}
function getCookies() {
$str="";
$first=true;
foreach($_COOKIE as $k=> $v) {
$str .=($first ? "Cookie: $k=$v":"; $k=$v");
$first=false;
}
if(!$first) $str .="\r\n";
return $str;
}
function getContextFromCgiEnvironment() {
$ctx=java_getHeader('X_JAVABRIDGE_CONTEXT',$_SERVER);
return $ctx;
}
function getContext() {
static $context=null;
if($context) return $context;
$ctx=$this->getContextFromCgiEnvironment();
$context="";
if($ctx) {
$context=sprintf("X_JAVABRIDGE_CONTEXT: %s\r\n",$ctx);
}
return $context;
}
function getWebAppInternal() {
$context=$this->protocol->webContext;
if(isset($context)) return $context;
return (JAVA_SERVLET=="User" &&
array_key_exists('PHP_SELF',$_SERVER) &&
array_key_exists('HTTP_HOST',$_SERVER))
? $_SERVER['PHP_SELF']."javabridge"
: null;
}
function getWebApp() {
$context=$this->getWebAppInternal();
if(is_null($context)) $context=JAVA_SERVLET;
if(is_null($context) || $context[0]!="/")
$context="/JavaBridge/JavaBridge.phpjavabridge";
return $context;
}
function write($data) {
return $this->protocol->socketHandler->write($data);
}
function doSetCookie($key,$val,$path) {
$path=trim($path);
$webapp=$this->getWebAppInternal(); if(!$webapp) $path="/";
setcookie($key,$val,0,$path);
}
function read($size) {
return $this->protocol->socketHandler->read($size);
}
function getChannel($channelName) {
$errstr=null; $errno=null;
$peer=pfsockopen($this->host,$channelName,$errno,$errstr,20);
if (!$peer) throw new java_IllegalStateException("No ContextServer for {$this->host}:{$channelName}. Error: $errstr ($errno)\n");
stream_set_timeout($peer,-1);
return new java_SocketChannelP($peer,$this->host);
}
function keepAlive() {
parent::keepAlive();
}
function redirect() {}
}
class java_SimpleHttpTunnelHandler extends java_SimpleHttpHandler {
public $socket;
protected $hasContentLength=false;
function createSimpleChannel () {
$this->channel=new java_EmptyChannel($this);
}
function createChannel() {
$this->createSimpleChannel();
}
function shutdownBrokenConnection ($msg) {
fclose($this->socket);
$this->dieWithBrokenConnection($msg);
}
function checkSocket($socket,&$errno,&$errstr) {
if (!$socket) {
$msg="Could not connect to the JEE server {$this->ssl}{$this->host}:{$this->port}. Please start it.";
$msg.=java_checkCliSapi()
?" Or define('JAVA_HOSTS',9267); define('JAVA_SERVLET',false); before including 'Java.inc' and try again. Error message: $errstr ($errno)\n"
:" Error message: $errstr ($errno)\n";
throw new java_ConnectException($msg);
}
}
function open() {
$errno=null; $errstr=null;
$socket=fsockopen("{$this->ssl}{$this->host}",$this->port,$errno,$errstr,20);
$this->checkSocket($socket,$errno,$errstr);
stream_set_timeout($socket,-1);
$this->socket=$socket;
}
function fread($size) {
$length=hexdec(fgets($this->socket,JAVA_RECV_SIZE));
$data="";
while ($length > 0) {
$str=fread($this->socket,$length);
if (feof ($this->socket)) return null;
$length -=strlen($str);
$data .=$str;
}
fgets($this->socket,3);
return $data;
}
function fwrite($data) {
$len=dechex(strlen($data));
return fwrite($this->socket,"${len}\r\n${data}\r\n");
}
function close() {
fwrite($this->socket,"0\r\n\r\n");
fgets($this->socket,JAVA_RECV_SIZE);
fgets($this->socket,3);
fclose($this->socket);
}
function __construct($protocol,$ssl,$host,$port) {
parent::__construct($protocol,$ssl,$host,$port);
$this->open();
}
function read($size) {
if(is_null($this->headers)) $this->parseHeaders();
if (isset($this->headers["http_error"])) {
if (isset($this->headers["transfer_chunked"])) {
$str=$this->fread(JAVA_RECV_SIZE);
} elseif (isset($this->headers['content_length'])) {
$len=$this->headers['content_length'];
for($str=fread($this->socket,$len); strlen($str)<$len; $str.=fread($this->socket,$len-strlen($str)))
if (feof ($this->socket)) break;
} else {
$str=fread($this->socket,JAVA_RECV_SIZE);
}
$this->shutdownBrokenConnection($str);
}
return $this->fread(JAVA_RECV_SIZE);
}
function getBodyFor ($compat,$data) {
$len=dechex(2+strlen($data));
return "Cache-Control: no-cache\r\nPragma: no-cache\r\nTransfer-Encoding: chunked\r\n\r\n${len}\r\n\177${compat}${data}\r\n";
}
function write($data) {
$compat=java_getCompatibilityOption($this->protocol->client);
$this->headers=null;
$socket=$this->socket;
$webapp=$this->getWebApp();
$cookies=$this->getCookies();
$context=$this->getContext();
$res="PUT ";
$res .=$webapp;
$res .=" HTTP/1.1\r\n";
$res .="Host: {$this->host}:{$this->port}\r\n";
$res .=$context;
$res .=$cookies;
$res .=$this->getBodyFor($compat,$data);
$count=fwrite($socket,$res) or $this->shutdownBrokenConnection("Broken connection handle");
fflush($socket) or $this->shutdownBrokenConnection("Broken connection handle");
return $count;
}
function parseHeaders() {
$this->headers=array();
$line=trim(fgets($this->socket,JAVA_RECV_SIZE));
$ar=explode (" ",$line);
$code=((int)$ar[1]);
if ($code !=200) $this->headers["http_error"]=$code;
while (($str=trim(fgets($this->socket,JAVA_RECV_SIZE)))) {
if($str[0]=='X') {
if(!strncasecmp("X_JAVABRIDGE_REDIRECT",$str,21)) {
$this->headers["redirect"]=trim(substr($str,22));
} else if(!strncasecmp("X_JAVABRIDGE_CONTEXT",$str,20)) {
$this->headers["context"]=trim(substr($str,21));
}
} else if($str[0]=='S') {
if(!strncasecmp("SET-COOKIE",$str,10)) {
$str=substr($str,12);
$this->cookies[]=$str;
$ar=explode(";",$str);
$cookie=explode("=",$ar[0]);
$path="";
if(isset($ar[1])) $p=explode("=",$ar[1]);
if(isset($p)) $path=$p[1];
$this->doSetCookie($cookie[0],$cookie[1],$path);
}
} else if($str[0]=='C') {
if(!strncasecmp("CONTENT-LENGTH",$str,14)) {
$this->headers["content_length"]=trim(substr($str,15));
$this->hasContentLength=true;
} else if(!strncasecmp("CONNECTION",$str,10) && !strncasecmp("close",trim(substr($str,11)),5)) {
$this->headers["connection_close"]=true;
}
} else if($str[0]=='T') {
if(!strncasecmp("TRANSFER-ENCODING",$str,17) && !strncasecmp("chunked",trim(substr($str,18)),7)) {
$this->headers["transfer_chunked"]=true;
}
}
}
}
function getSimpleChannel() {
return new java_ChunkedSocketChannel($this->socket,$this->protocol,$this->host);
}
function redirect() {
$this->isRedirect=isset($this->headers["redirect"]);
if ($this->isRedirect)
$channelName=$this->headers["redirect"];
$context=$this->headers["context"];
$len=strlen($context);
$len0=chr(0xFF);
$len1=chr($len&0xFF); $len>>=8;
$len2=chr($len&0xFF);
if ($this->isRedirect) {
$this->protocol->socketHandler=new java_SocketHandler($this->protocol,$this->getChannel($channelName));
$this->protocol->write("\177${len0}${len1}${len2}${context}");
$this->context=sprintf("X_JAVABRIDGE_CONTEXT: %s\r\n",$context);
$this->close ();
$this->protocol->handler=$this->protocol->socketHandler;
$this->protocol->handler->write($this->protocol->client->sendBuffer)
or $this->protocol->handler->shutdownBrokenConnection("Broken local connection handle");
$this->protocol->client->sendBuffer=null;
$this->protocol->handler->read(1)
or $this->protocol->handler->shutdownBrokenConnection("Broken local connection handle");
} else {
$this->protocol->handler=$this->protocol->socketHandler=new java_SocketHandler($this->protocol,$this->getSimpleChannel());
}
}
}
class java_HttpTunnelHandler extends java_SimpleHttpTunnelHandler {
function fread($size) {
if ($this->hasContentLength)
return fread($this->socket,$this->headers["content_length"]);
else
return parent::fread($size);
}
function fwrite($data) {
if ($this->hasContentLength)
return fwrite($this->socket,$data);
else
return parent::fwrite($data);
}
function close() {
if ($this->hasContentLength) {
fwrite($this->socket,"0\r\n\r\n");
fclose($this->socket);
} else {
parent::fclose($this->socket);
}
}
}
class java_Protocol {
public $client;
public $webContext;
public $serverName;
function getOverrideHosts() {
if(array_key_exists('X_JAVABRIDGE_OVERRIDE_HOSTS',$_ENV)) {
$override=$_ENV['X_JAVABRIDGE_OVERRIDE_HOSTS'];
if(!is_null($override) && $override!='/') return $override;
}
return
java_getHeader('X_JAVABRIDGE_OVERRIDE_HOSTS_REDIRECT',$_SERVER);
}
static function getHost() {
static $host=null;
if(is_null($host)) {
$hosts=explode(";",JAVA_HOSTS);
$host=explode(":",$hosts[0]);
while(count ($host) < 3) array_unshift($host,"");
if (substr($host[1],0,2)=="//") $host[1]=substr($host[1],2);
}
return $host;
}
function createHttpHandler() {
$overrideHosts=$this->getOverrideHosts();
$ssl="";
if($overrideHosts) {
$s=$overrideHosts;
if((strlen($s)>2) && ($s[1]==':')) {
if($s[0]=='s')
$ssl="ssl://";
$s=substr($s,2);
}
$webCtx=strpos($s,"//");
if($webCtx)
$host=substr($s,0,$webCtx);
else
$host=$s;
$idx=strpos($host,':');
if($idx) {
if($webCtx)
$port=substr($host,$idx+1,$webCtx);
else
$port=substr($host,$idx+1);
$host=substr($host,0,$idx);
} else {
$port="8080";
}
if($webCtx) $webCtx=substr($s,$webCtx+1);
$this->webContext=$webCtx;
} else {
$hostVec=java_Protocol::getHost();
if ($ssl=$hostVec[0]) $ssl .="://";
$host=$hostVec[1];
$port=$hostVec[2];
}
$this->serverName="${ssl}${host}:$port";
if ((array_key_exists("X_JAVABRIDGE_REDIRECT",$_SERVER)) ||
(array_key_exists("HTTP_X_JAVABRIDGE_REDIRECT",$_SERVER)))
return new java_SimpleHttpHandler($this,$ssl,$host,$port);
return new java_HttpTunnelHandler($this,$ssl,$host,$port);
}
function createSimpleHandler($name,$again=true) {
$channelName=$name;
$errno=null; $errstr=null;
if(is_numeric($channelName)) {
$peer=@pfsockopen($host="127.0.0.1",$channelName,$errno,$errstr,5);
} else {
$type=$channelName[0];
list($host,$channelName)=explode(":",$channelName);
$peer=pfsockopen($host,$channelName,$errno,$errstr,20);
if (!$peer)
throw new java_ConnectException("No Java server at $host:$channelName. Error message: $errstr ($errno)");
}
if (!$peer) {
$java=file_exists(ini_get("extension_dir")."/JavaBridge.jar")?ini_get("extension_dir")."/JavaBridge.jar":(java_get_base()."/JavaBridge.jar");
if (!file_exists($java))
throw new java_IOException("Could not find $java in ".getcwd().". Download it from http://sf.net/projects/php-java-bridge/files/Binary%20package/php-java-bridge_".JAVA_PEAR_VERSION."/exploded/JavaBridge.jar/download and try again.");
$java_cmd="java -Dphp.java.bridge.daemon=true -jar \"${java}\" INET_LOCAL:$channelName 0";
if (!$again)
throw new java_ConnectException("No Java back end! Please run it with: $java_cmd. Error message: $errstr ($errno)");
if (!java_checkCliSapi())
trigger_error("This PHP SAPI requires a JEE or SERVLET back end. Start it,define ('JAVA_SERVLET',true); define('JAVA_HOSTS',...); and try again.",E_USER_ERROR);
system ($java_cmd);
return $this->createSimpleHandler($name,false);
}
stream_set_timeout($peer,-1);
$handler=new java_SocketHandler($this,new java_SocketChannelP($peer,$host));
$compatibility=java_getCompatibilityOption($this->client);
$this->write("\177$compatibility");
$this->serverName="127.0.0.1:$channelName";
return $handler;
}
function java_get_simple_channel() {
return (JAVA_HOSTS&&(!JAVA_SERVLET||(JAVA_SERVLET=="Off"))) ? JAVA_HOSTS : null;
}
function createHandler() {
if(!java_getHeader('X_JAVABRIDGE_OVERRIDE_HOSTS',$_SERVER)&&
((function_exists("java_get_default_channel")&&($defaultChannel=java_get_default_channel())) ||
($defaultChannel=$this->java_get_simple_channel())) ) {
return $this->createSimpleHandler($defaultChannel);
} else {
return $this->createHttpHandler();
}
}
function __construct ($client) {
$this->client=$client;
$this->handler=$this->createHandler();
}
function redirect() {
$this->handler->redirect();
}
function read($size) {
return $this->handler->read($size);
}
function sendData() {
$this->handler->write($this->client->sendBuffer);
$this->client->sendBuffer=null;
}
function flush() {
$this->sendData();
}
function getKeepAlive() {
return $this->handler->getKeepAlive();
}
function keepAlive() {
$this->handler->keepAlive();
}
function handle() {
$this->client->handleRequests();
}
function write($data) {
$this->client->sendBuffer.=$data;
}
function finish() {
$this->flush();
$this->handle();
$this->redirect();
}
function referenceBegin($name) {
$this->client->sendBuffer.=$this->client->preparedToSendBuffer;
$this->client->preparedToSendBuffer=null;
$signature=sprintf("",$name);
$this->write($signature);
$signature[6]="2";
$this->client->currentArgumentsFormat=$signature;
}
function referenceEnd() {
$this->client->currentArgumentsFormat.=$format="";
$this->write($format);
$this->finish();
$this->client->currentCacheKey=null;
}
function createObjectBegin($name) {
$this->client->sendBuffer.=$this->client->preparedToSendBuffer;
$this->client->preparedToSendBuffer=null;
$signature=sprintf("",$name);
$this->write($signature);
$signature[6]="2";
$this->client->currentArgumentsFormat=$signature;
}
function createObjectEnd() {
$this->client->currentArgumentsFormat.=$format="";
$this->write($format);
$this->finish();
$this->client->currentCacheKey=null;
}
function propertyAccessBegin($object,$method) {
$this->client->sendBuffer.=$this->client->preparedToSendBuffer;
$this->client->preparedToSendBuffer=null;
$this->write(sprintf("",$object,$method));
$this->client->currentArgumentsFormat="";
}
function propertyAccessEnd() {
$this->client->currentArgumentsFormat.=$format="";
$this->write($format);
$this->finish();
$this->client->currentCacheKey=null;
}
function invokeBegin($object,$method) {
$this->client->sendBuffer.=$this->client->preparedToSendBuffer;
$this->client->preparedToSendBuffer=null;
$this->write(sprintf("",$object,$method));
$this->client->currentArgumentsFormat="";
}
function invokeEnd() {
$this->client->currentArgumentsFormat.=$format="";
$this->write($format);
$this->finish();
$this->client->currentCacheKey=null;
}
function resultBegin() {
$this->client->sendBuffer.=$this->client->preparedToSendBuffer;
$this->client->preparedToSendBuffer=null;
$this->write("");
}
function resultEnd() {
$this->client->currentCacheKey=null;
$this->write("");
$this->flush();
}
function writeString($name) {
$this->client->currentArgumentsFormat.=$format="";
$this->write(sprintf($format,htmlspecialchars($name,ENT_COMPAT,"ISO-8859-1")));
}
function writeBoolean($boolean) {
$this->client->currentArgumentsFormat.=$format="";
$this->write(sprintf($format,$boolean));
}
function writeLong($l) {
$this->client->currentArgumentsFormat.="";
if($l<0) {
$this->write(sprintf("",-$l));
} else {
$this->write(sprintf("",$l));
}
}
function writeULong($l) {
$this->client->currentArgumentsFormat.=$format="";
$this->write(sprintf($format,$l));
}
function writeDouble($d) {
$this->client->currentArgumentsFormat.=$format="";
$this->write(sprintf($format,$d));
}
function writeObject($object) {
$this->client->currentArgumentsFormat.=$format="";
$this->write(sprintf($format,$object));
}
function writeException($object,$str) {
$this->write(sprintf("",$object,htmlspecialchars($str,ENT_COMPAT,"ISO-8859-1")));
}
function writeCompositeBegin_a() {
$this->write("");
}
function writeCompositeBegin_h() {
$this->write("");
}
function writeCompositeEnd() {
$this->write("");
}
function writePairBegin_s($key) {
$this->write(sprintf("

",htmlspecialchars($key,ENT_COMPAT,"ISO-8859-1"))); } function writePairBegin_n($key) { $this->write(sprintf("

",$key)); } function writePairBegin() { $this->write("

"); } function writePairEnd() { $this->write("

"); } function writeUnref($object) { $this->client->sendBuffer.=$this->client->preparedToSendBuffer; $this->client->preparedToSendBuffer=null; $this->write(sprintf("",$object)); } function getServerName() { return $this->serverName; } } class java_ParserString { public $string,$off,$length; function toString() { return $this->getString(); } function getString() { return substr($this->string,$this->off,$this->length); } } class java_ParserTag { public $n,$strings; function __construct() { $this->strings=array(); $this->n=0; } } class java_SimpleParser { public $SLEN=256; public $handler; public $tag,$buf,$len,$s; public $type; function __construct($handler) { $this->handler=$handler; $this->tag=array(new java_ParserTag(),new java_ParserTag(),new java_ParserTag()); $this->len=$this->SLEN; $this->s=str_repeat(" ",$this->SLEN); $this->type=$this->VOJD; } public $BEGIN=0,$KEY=1,$VAL=2,$ENTITY=3,$VOJD=5,$END=6; public $level=0,$eor=0; public $in_dquote,$eot=false; public $pos=0,$c=0,$i=0,$i0=0,$e; function RESET() { $this->type=$this->VOJD; $this->level=0; $this->eor=0; $this->in_dquote=false; $this->i=0; $this->i0=0; } function APPEND($c) { if($this->i>=$this->len-1) { $this->s=str_repeat($this->s,2); $this->len*=2; } $this->s[$this->i++]=$c; } function CALL_BEGIN() { $pt=&$this->tag[1]->strings; $st=&$this->tag[2]->strings; $t=&$this->tag[0]->strings[0]; $name=$t->string[$t->off]; $n=$this->tag[2]->n; $ar=array(); for($i=0; $i<$n; $i++) { $ar[$pt[$i]->getString()]=$st[$i]->getString(); } $this->handler->begin($name,$ar); } function CALL_END() { $t=&$this->tag[0]->strings[0]; $name=$t->string[$t->off]; $this->handler->end($name); } function PUSH($t) { $str=&$this->tag[$t]->strings; $n=&$this->tag[$t]->n; $this->s[$this->i]='|'; if(!isset($str[$n])){$h=$this->handler; $str[$n]=$h->createParserString();} $str[$n]->string=&$this->s; $str[$n]->off=$this->i0; $str[$n]->length=$this->i-$this->i0; ++$this->tag[$t]->n; $this->APPEND('|'); $this->i0=$this->i; } function parse() { while($this->eor==0) { if($this->c>=$this->pos) { $this->buf=$this->handler->read(JAVA_RECV_SIZE); if(is_null($this->buf) || strlen($this->buf)==0) $this->handler->protocol->handler->shutdownBrokenConnection("protocol error. Check the back end log for OutOfMemoryErrors."); $this->pos=strlen($this->buf); if($this->pos==0) break; $this->c=0; } switch(($ch=$this->buf[$this->c])) { case '<': if($this->in_dquote) {$this->APPEND($ch); break;} $this->level+=1; $this->type=$this->BEGIN; break; case '\t': case '\f': case '\n': case '\r': case ' ': if($this->in_dquote) {$this->APPEND($ch); break;} if($this->type==$this->BEGIN) { $this->PUSH($this->type); $this->type=$this->KEY; } break; case '=': if($this->in_dquote) {$this->APPEND($ch); break;} $this->PUSH($this->type); $this->type=$this->VAL; break; case '/': if($this->in_dquote) {$this->APPEND($ch); break;} if($this->type==$this->BEGIN) { $this->type=$this->END; $this->level-=1; } $this->level-=1; $this->eot=true; break; case '>': if($this->in_dquote) {$this->APPEND($ch); break;} if($this->type==$this->END){ $this->PUSH($this->BEGIN); $this->CALL_END(); } else { if($this->type==$this->VAL) $this->PUSH($this->type); $this->CALL_BEGIN(); } $this->tag[0]->n=$this->tag[1]->n=$this->tag[2]->n=0; $this->i0=$this->i=0; $this->type=$this->VOJD; if($this->level==0) $this->eor=1; break; case ';': if($this->type==$this->ENTITY) { switch ($this->s[$this->e+1]) { case 'l': $this->s[$this->e]='<'; $this->i=$this->e+1; break; case 'g': $this->s[$this->e]='>'; $this->i=$this->e+1; break; case 'a': $this->s[$this->e]=($this->s[$this->e+2]=='m'?'&':'\''); $this->i=$this->e+1; break; case 'q': $this->s[$this->e]='"'; $this->i=$this->e+1; break; default: $this->APPEND($ch); } $this->type=$this->VAL; } else { $this->APPEND($ch); } break; case '&': $this->type=$this->ENTITY; $this->e=$this->i; $this->APPEND($ch); break; case '"': $this->in_dquote=!$this->in_dquote; if(!$this->in_dquote && $this->type==$this->VAL) { $this->PUSH($this->type); $this->type=$this->KEY; } break; default: $this->APPEND($ch); } $this->c+=1; } $this->RESET(); } function getData($str) { return $str; } function parserError() { $this->handler->protocol->handler->shutdownBrokenConnection( sprintf("protocol error: %s. Check the back end log for details.",$this->s)); } } interface java_JavaType {}; $java_initialized=false; function __javaproxy_Client_getClient() { static $client=null; if(!is_null($client)) return $client; if (function_exists("java_create_client")) $client=java_create_client(); else { global $java_initialized; $client=new java_Client(); $java_initialized=true; } return $client; } function java_last_exception_get() { $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"getLastException",array()); } function java_last_exception_clear() { $client=__javaproxy_Client_getClient(); $client->invokeMethod(0,"clearLastException",array()); } function java_values_internal($object) { if(!$object instanceof java_JavaType) return $object; $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"getValues",array($object)); } function java_invoke($object,$method,$args) { $client=__javaproxy_Client_getClient(); $id=($object==null) ? 0 : $object->__java; return $client->invokeMethod($id,$method,$args); } function java_unwrap ($object) { if(!$object instanceof java_JavaType) throw new java_IllegalArgumentException($object); $client=__javaproxy_Client_getClient(); return $client->globalRef->get($client->invokeMethod(0,"unwrapClosure",array($object))); } function java_values($object) { return java_values_internal($object); } function java_reset() { $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"reset",array()); } function java_inspect_internal($object) { if(!$object instanceof java_JavaType) throw new java_IllegalArgumentException($object); $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"inspect",array($object)); } function java_inspect($object) { return java_inspect_internal($object); } function java_set_file_encoding($enc) { $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"setFileEncoding",array($enc)); } function java_instanceof_internal($ob,$clazz) { if(!$ob instanceof java_JavaType) throw new java_IllegalArgumentException($ob); if(!$clazz instanceof java_JavaType) throw new java_IllegalArgumentException($clazz); $client=__javaproxy_Client_getClient(); return $client->invokeMethod(0,"instanceOf",array($ob,$clazz)); } function java_instanceof($ob,$clazz) { return java_instanceof_internal($ob,$clazz); } function java_cast_internal($object,$type) { if(!$object instanceof java_JavaType) { switch($type[0]) { case 'S': case 's': return (string)$object; case 'B': case 'b': return (boolean)$object; case 'L': case 'I': case 'l': case 'i': return (integer)$object; case 'D': case 'd': case 'F': case 'f': return (float) $object; case 'N': case 'n': return null; case 'A': case 'a': return (array)$object; case 'O': case 'o': return (object)$object; } } return $object->__cast($type); } function java_cast($object,$type) { return java_cast_internal($object,$type); } function java_require($arg) { trigger_error('java_require() not supported anymore. Please use
getSession($args); } function java_session() { return java_session_array(func_get_args()); } function java_server_name() { try { $client=__javaproxy_Client_getClient(); return $client->getServerName(); } catch (java_ConnectException $ex) { return null; } } function java_context() { $client=__javaproxy_Client_getClient(); return $client->getContext(); } function java_closure_array($args) { if(isset($args[2]) && ((!($args[2] instanceof java_JavaType))&&!is_array($args[2]))) throw new java_IllegalArgumentException($args[2]); $client=__javaproxy_Client_getClient(); $args[0]=isset($args[0]) ? $client->globalRef->add($args[0]) : 0; $client->protocol->invokeBegin(0,"makeClosure"); $n=count($args); $client->protocol->writeULong($args[0]); for($i=1; $i<$n; $i++) { $client->writeArg($args[$i]); } $client->protocol->invokeEnd(); $val=$client->getResult(); return $val; } function java_closure() { return java_closure_array(func_get_args()); } function java_begin_document() { } function java_end_document() { } class java_JavaProxy implements java_JavaType { public $__serialID,$__java; public $__signature; public $__client; public $__tempGlobalRef; function __construct($java,$signature){ $this->__java=$java; $this->__signature=$signature; $this->__client=__javaproxy_Client_getClient(); } function __cast($type) { return $this->__client->cast($this,$type); } function __sleep() { $args=array($this,java_get_lifetime()); $this->__serialID=$this->__client->invokeMethod(0,"serialize",$args); $this->__tempGlobalRef=$this->__client->globalRef; return array("__serialID","__tempGlobalRef"); } function __wakeup() { $args=array($this->__serialID,java_get_lifetime()); $this->__client=__javaproxy_Client_getClient(); if($this->__tempGlobalRef) $this->__client->globalRef=$this->__tempGlobalRef; $this->__tempGlobalRef=null; $this->__java=$this->__client->invokeMethod(0,"deserialize",$args); } function __destruct() { if(isset($this->__client)) $this->__client->unref($this->__java); } function __get($key) { return $this->__client->getProperty($this->__java,$key); } function __set($key,$val) { $this->__client->setProperty($this->__java,$key,$val); } function __call($method,$args) { return $this->__client->invokeMethod($this->__java,$method,$args); } function __toString() { try { return $this->__client->invokeMethod(0,"ObjectToString",array($this)); } catch (JavaException $ex) { trigger_error("Exception in Java::__toString(): ". java_truncate((string)$ex),E_USER_WARNING); return ""; } } } class java_objectIterator implements Iterator { private $var; function __construct($javaProxy) { $this->var=java_cast ($javaProxy,"A"); } function rewind() { reset($this->var); } function valid() { return $this->current() !==false; } function next() { return next($this->var); } function key() { return key($this->var); } function current() { return current($this->var); } } class java_IteratorProxy extends java_JavaProxy implements IteratorAggregate { function getIterator() { return new java_ObjectIterator($this); } } class java_ArrayProxy extends java_IteratorProxy implements ArrayAccess { function offsetExists($idx) { $ar=array($this,$idx); return $this->__client->invokeMethod(0,"offsetExists",$ar); } function offsetGet($idx) { $ar=array($this,$idx); return $this->__client->invokeMethod(0,"offsetGet",$ar); } function offsetSet($idx,$val) { $ar=array($this,$idx,$val); return $this->__client->invokeMethod(0,"offsetSet",$ar); } function offsetUnset($idx) { $ar=array($this,$idx); return $this->__client->invokeMethod(0,"offsetUnset",$ar); } } class java_ExceptionProxy extends java_JavaProxy { function __toExceptionString($trace) { $args=array($this,$trace); return $this->__client->invokeMethod(0,"ObjectToString",$args); } } abstract class java_AbstractJava implements IteratorAggregate,ArrayAccess,java_JavaType { public $__client; public $__delegate; public $__serialID; public $__factory; public $__java,$__signature; public $__cancelProxyCreationTag; function __createDelegate() { $proxy=$this->__delegate= $this->__factory->create($this->__java,$this->__signature); $this->__java=$proxy->__java; $this->__signature=$proxy->__signature; } function __cast($type) { if(!isset($this->__delegate)) $this->__createDelegate(); return $this->__delegate->__cast($type); } function __sleep() { if(!isset($this->__delegate)) $this->__createDelegate(); $this->__delegate->__sleep(); return array("__delegate"); } function __wakeup() { if(!isset($this->__delegate)) $this->__createDelegate(); $this->__delegate->__wakeup(); $this->__java=$this->__delegate->__java; $this->__client=$this->__delegate->__client; } function __get($key) { if(!isset($this->__delegate)) $this->__createDelegate(); return $this->__delegate->__get($key); } function __set($key,$val) { if(!isset($this->__delegate)) $this->__createDelegate(); $this->__delegate->__set($key,$val); } function __call($method,$args) { if(!isset($this->__delegate)) $this->__createDelegate(); return $this->__delegate->__call($method,$args); } function __toString() { if(!isset($this->__delegate)) $this->__createDelegate(); return $this->__delegate->__toString(); } function getIterator() { if(!isset($this->__delegate)) $this->__createDelegate(); if(func_num_args()==0) return $this->__delegate->getIterator(); $args=func_get_args(); return $this->__call("getIterator",$args); } function offsetExists($idx) { if(!isset($this->__delegate)) $this->__createDelegate(); if(func_num_args()==1) return $this->__delegate->offsetExists($idx); $args=func_get_args(); return $this->__call("offsetExists",$args); } function offsetGet($idx) { if(!isset($this->__delegate)) $this->__createDelegate(); if(func_num_args()==1) return $this->__delegate->offsetGet($idx); $args=func_get_args(); return $this->__call("offsetGet",$args); } function offsetSet($idx,$val) { if(!isset($this->__delegate)) $this->__createDelegate(); if(func_num_args()==2) return $this->__delegate->offsetSet($idx,$val); $args=func_get_args(); return $this->__call("offsetSet",$args); } function offsetUnset($idx) { if(!isset($this->__delegate)) $this->__createDelegate(); if(func_num_args()==1) return $this->__delegate->offsetUnset($idx); $args=func_get_args(); return $this->__call("offsetUnset",$args); } } class Java extends java_AbstractJava { function __construct() { $client=$this->__client=__javaproxy_Client_getClient(); $args=func_get_args(); $name=array_shift($args); if(is_array($name)) {$args=$name; $name=array_shift($args);} $sig="&{$this->__signature}@{$name}"; $len=count($args); $args2=array(); for($i=0; $i<$len; $i++) { switch(gettype($val=$args[$i])) { case 'boolean': array_push($args2,$val); $sig.='@b'; break; case 'integer': array_push($args2,$val); $sig.='@i'; break; case 'double': array_push($args2,$val); $sig.='@d'; break; case 'string': array_push($args2,htmlspecialchars($val,ENT_COMPAT,"ISO-8859-1")); $sig.='@s'; break; case 'array':$sig="~INVALID"; break; case 'object': if($val instanceof java_JavaType) { array_push($args2,$val->__java); $sig.="@o{$val->__signature}"; } else { $sig="~INVALID"; } break; case 'resource': array_push($args2,$val); $sig.='@r'; break; case 'NULL': array_push($args2,$val); $sig.='@N'; break; case 'unknown type': array_push($args2,$val); $sig.='@u'; break; default: throw new java_IllegalArgumentException($val); } } if(array_key_exists($sig,$client->methodCache)) { $cacheEntry=&$client->methodCache[$sig]; $client->sendBuffer.=$client->preparedToSendBuffer; if(strlen($client->sendBuffer)>=JAVA_SEND_SIZE) { if($client->protocol->handler->write($client->sendBuffer)<=0) throw new java_IllegalStateException("Connection out of sync,check backend log for details."); $client->sendBuffer=null; } $client->preparedToSendBuffer=vsprintf($cacheEntry->fmt,$args2); $this->__java=++$client->asyncCtx; $this->__factory=$cacheEntry->factory; $this->__signature=$cacheEntry->signature; $this->__cancelProxyCreationTag=++$client->cancelProxyCreationTag; } else { $client->currentCacheKey=$sig; $delegate=$this->__delegate=$client->createObject($name,$args); $this->__java=$delegate->__java; $this->__signature=$delegate->__signature; } } function __destruct() { if(!isset($this->__client)) return; $client=$this->__client; $preparedToSendBuffer=&$client->preparedToSendBuffer; if($preparedToSendBuffer && $client->cancelProxyCreationTag==$this->__cancelProxyCreationTag) { $preparedToSendBuffer[6]="3"; $client->sendBuffer.=$preparedToSendBuffer; $preparedToSendBuffer=null; $client->asyncCtx -=1; } else { if(!isset($this->__delegate)) { $client->unref($this->__java); } } } function __call($method,$args) { $client=$this->__client; $sig="@{$this->__signature}@$method"; $len=count($args); $args2=array($this->__java); for($i=0; $i<$len; $i++) { switch(gettype($val=$args[$i])) { case 'boolean': array_push($args2,$val); $sig.='@b'; break; case 'integer': array_push($args2,$val); $sig.='@i'; break; case 'double': array_push($args2,$val); $sig.='@d'; break; case 'string': array_push($args2,htmlspecialchars($val,ENT_COMPAT,"ISO-8859-1")); $sig.='@s'; break; case 'array':$sig="~INVALID"; break; case 'object': if($val instanceof java_JavaType) { array_push($args2,$val->__java); $sig.="@o{$val->__signature}"; } else { $sig="~INVALID"; } break; case 'resource': array_push($args2,$val); $sig.='@r'; break; case 'NULL': array_push($args2,$val); $sig.='@N'; break; case 'unknown type': array_push($args2,$val); $sig.='@u'; break; default: throw new java_IllegalArgumentException($val); } } if(array_key_exists($sig,$client->methodCache)) { $cacheEntry=&$client->methodCache[$sig]; $client->sendBuffer.=$client->preparedToSendBuffer; if(strlen($client->sendBuffer)>=JAVA_SEND_SIZE) { if($client->protocol->handler->write($client->sendBuffer)<=0) throw new java_IllegalStateException("Out of sync. Check backend log for details."); $client->sendBuffer=null; } $client->preparedToSendBuffer=vsprintf($cacheEntry->fmt,$args2); if($cacheEntry->resultVoid) { $client->cancelProxyCreationTag +=1; return null; } else { $result=clone($client->cachedJavaPrototype); $result->__factory=$cacheEntry->factory; $result->__java=++$client->asyncCtx; $result->__signature=$cacheEntry->signature; $result->__cancelProxyCreationTag=++$client->cancelProxyCreationTag; return $result; } } else { $client->currentCacheKey=$sig; $retval=parent::__call($method,$args); return $retval; } } } class java_InternalJava extends Java { function __construct($proxy) { $this->__delegate=$proxy; $this->__java=$proxy->__java; $this->__signature=$proxy->__signature; $this->__client=$proxy->__client; } } class java_class extends Java { function __construct() { $this->__client=__javaproxy_Client_getClient(); $args=func_get_args(); $name=array_shift($args); if(is_array($name)) { $args=$name; $name=array_shift($args); } $delegate=$this->__delegate=$this->__client->referenceObject($name,$args); $this->__java=$delegate->__java; $this->__signature=$delegate->__signature; } } class JavaClass extends java_class{} class java_exception extends Exception implements java_JavaType { public $__serialID,$__java,$__client; public $__delegate; public $__signature; public $__hasDeclaredExceptions; function __construct() { $this->__client=__javaproxy_Client_getClient(); $args=func_get_args(); $name=array_shift($args); if(is_array($name)) { $args=$name; $name=array_shift($args); } if (count($args)==0) Exception::__construct($name); else Exception::__construct($args[0]); $delegate=$this->__delegate=$this->__client->createObject($name,$args); $this->__java=$delegate->__java; $this->__signature=$delegate->__signature; $this->__hasDeclaredExceptions='T'; } function __cast($type) { return $this->__delegate->__cast($type); } function __sleep() { $this->__delegate->__sleep(); return array("__delegate"); } function __wakeup() { $this->__delegate->__wakeup(); $this->__java=$this->__delegate->__java; $this->__client=$this->__delegate->__client; } function __get($key) { return $this->__delegate->__get($key); } function __set($key,$val) { $this->__delegate->__set($key,$val); } function __call($method,$args) { return $this->__delegate->__call($method,$args); } function __toString() { return $this->__delegate->__toExceptionString($this->getTraceAsString()); } } class JavaException extends java_exception {} class java_InternalException extends JavaException { function __construct($proxy,$exception) { $this->__delegate=$proxy; $this->__java=$proxy->__java; $this->__signature=$proxy->__signature; $this->__client=$proxy->__client; $this->__hasDeclaredExceptions=$exception; } } class java_JavaProxyProxy extends Java { function __construct($client) { $this->__client=$client; } } } ?>