function call($url, $method, $params)
 {
     // xmlrpc encode parameters
     for ($i = 0; $i < count($params); $i++) {
         if (get_class($params[$i]) != 'xmlrpcval') {
             $params[$i] = xmlrpc_encoder($params[$i]);
         }
     }
     // send request
     $message = new xmlrpcmsg($method, $params);
     if ($this->debug) {
         //  $this->display_xml($message->serialize());
         print "<PRE>" . htmlentities($message->serialize()) . "</PRE>\n";
         //("XML-RPC message:\n $message->serialize()",0);
     }
     $addr = parse_url($url);
     $client = new xmlrpc_client($url, $addr['host'], $addr['port'], $this->connTimeout, $this->recvTimeout);
     if ($this->debug) {
         $client->setDebug(1);
     }
     debug("XML-RPC", "call to " . $url);
     $response = $client->send($message);
     if ($this->debug) {
         print "<PRE>" . htmlentities($response->serialize()) . "</PRE>\n";
     }
     // process response
     //debug("XML-RPC Response", $response->serialize());
     if (!$response) {
         addError("No response: probably host is unreachable");
     } elseif ($response->faultCode() > 0) {
         // there was an error
         addError("Error response: " . $response->faultCode() . "  " . $response->faultString());
     } else {
         $retval = $response->value();
         if ($retval) {
             $retval = xmlrpc_decoder($retval);
         }
         //debug("Response", $retval);
         return $retval;
     }
     return NULL;
 }
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);
}