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;
 }
Esempio n. 2
0
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);
}