function callTamburine($method, $params) { global $config; if (!is_array($params)) { $params = array($params); } // fetch config $urlParts = parse_url($config['tamburineURL']); $port = $urlParts['port']; $host = $urlParts['host']; $path = $urlParts['path']; //debug("host", $host); //debug("port", $port); //debug("path", $path); /* // xmlrpc encode parameters for($i=0;$i<count($params);$i++){ if(get_class($params[$i]) != 'xmlrpcval') { $xmlparams[$i] = xmlrpc_encoder($params[$i]); } } $msg = new xmlrpcmsg($method, $xmlparams); // this does not work because it rawurlencodes string values // and Tamburine does not understand it $rawMessage = $msg->serialize(); */ $rawMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<methodCall>\n<methodName>{$method}</methodName>\n<params>"; for ($i = 0; $i < count($params); $i++) { $rawMessage .= "\n<param><value>"; $value = trim($params[$i]); if (is_numeric($value)) { $rawMessage .= "<i4>{$value}</i4>"; } else { $rawMessage .= "<string>{$value}</string>"; } $rawMessage .= "</value></param>"; } $rawMessage .= "\n</params>\n</methodCall>"; //prepare request header $header = "POST {$path} HTTP/1.1\nAccept: */*\nAccept-Encoding: deflate\nTE: trailers,deflate\nHost: {$host}:{$port}\nUser-Agent: Tamburine/0.2 libwww/5.4.0\nConnection: TE,Keep-Alive\nDate: Tue, 17 Jun 2003 08:59:10 GMT\nContent-Length: " . strlen($rawMessage) . "\nContent-Type: text/xml\n\n"; $fp = fsockopen($host, $port, $errno, $errstr, $this->timeout); if (!$fp) { raiseError("Streaming error: {$errstr} ({$errno})"); } if (!socket_set_timeout($fp, $this->timeout)) { logError("could not set coket timeout"); } if (!fputs($fp, $header, strlen($header))) { raiseError('Streaming error: Write error'); } fflush($fp); debug("FLUSH", 1); if (!fputs($fp, $rawMessage, strlen($rawMessage))) { raiseError('Streaming error: Write error'); } //fflush($fp); debug("SENT ALL", 1); while (!feof($fp)) { $rep = fread($fp, 1024); if ($rep === FALSE) { raiseError('Streaming error: Read error'); } $rawReply .= $rep; } fclose($fp); $parts = explode("\n\n", $rawReply); if (count($parts) > 2) { raiseError("could not parse response"); } $header = $parts[0]; $content = $parts[1]; $content = preg_replace('/<\\?.*\\?>/', '', $content); $msg = new xmlrpcmsg('foo', ''); $resp = $msg->parseResponse($content); //dump($resp->value(), "RETVAL1"); $retval = xmlrpc_decoder($resp->value()); return $retval; }
function putEvents($params) { global $config, $db, $repository; $events = xmlrpc_decoder($params->getParam(0)); foreach ($events as $event) { debug("PORTAL EVENT", $event); $progId = $event['prog_id']; if ($progId) { if ($repository->looksLikeId($progId)) { $prg =& $repository->getObject($progId); } if (!$prg) { debug("Invalid prog_id arrived in portal event", $progId); continue; } $nodeId = $prg->getNodeId(); //$nodeId = $repository->getNodeId($progId); if ($nodeId != $config['nodeId']) { // event for remote object sotf_NodeObject::createForwardObject('event', $event, $progId, $nodeId); continue; } } $repository->processPortalEvent($event); } $retval = xmlrpc_encoder(count($events)); return new xmlrpcresp($retval); }