<?php /** * $Horde: horde/rpc.php,v 1.31 2005/01/03 14:34:43 jan Exp $ * * Copyright 2002-2005 Jan Schneider <jan@horde.org> * * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. */ error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT); @define('AUTH_HANDLER', true); @define('EGW_API_INC', dirname(__FILE__) . '/phpgwapi/inc/'); @define('HORDE_BASE', EGW_API_INC . '/horde/'); require_once HORDE_BASE . '/lib/core.php'; require_once HORDE_BASE . '/Horde/RPC.php'; //require_once EGW_API_INC . '/common_functions.inc.php'; $GLOBALS['egw_info'] = array( 'flags' => array( 'currentapp' => 'syncml', 'noheader' => true, 'nonavbar' => true, 'noapi' => true, 'disable_Template_class' => true, ), 'server' => array( 'show_domain_selectbox' => true, ), ); include('./header.inc.php'); $errors = array(); // SyncML works currently only with PHP sessions if($GLOBALS['egw_info']['server']['sessions_type'] == 'db') { $errors[] = 'SyncML support is currently not available with DB sessions. Please switch to PHP sessions in header.inc.php.'; } // SyncML does not support func_overload if(ini_get('mbstring.func_overload') != 0) { $errors[] = 'You need to set mbstring.func_overload to 0 for rpc.php.'; } // SyncML requires PHP version 5.0.x if(version_compare(PHP_VERSION, '5.0.0') < 0) { $errors[] = 'eGroupWare\'s SyncML server requires PHP5. Please update to PHP 5.0.x if you want to use SyncML.'; } /* Look at the Content-type of the request, if it is available, to try * and determine what kind of request this is. */ $input = null; $params = null; if (!empty($_SERVER['CONTENT_TYPE'])) { if (strpos($_SERVER['CONTENT_TYPE'], 'application/vnd.syncml+xml') !== false) { $serverType = 'syncml'; } elseif (strpos($_SERVER['CONTENT_TYPE'], 'application/vnd.syncml+wbxml') !== false) { // switching output compression off, as it makes problems with synthesis client ini_set('zlib.output_compression',0); $serverType = 'syncml_wbxml'; } elseif (strpos($_SERVER['CONTENT_TYPE'], 'text/xml') !== false) { $input = Horde_RPC::getInput(); /* Check for SOAP namespace URI. */ if (strpos($input, 'http://schemas.xmlsoap.org/soap/envelope/') !== false) { $serverType = 'soap'; } else { $serverType = 'xmlrpc'; } } else { header('HTTP/1.0 501 Not Implemented'); exit; } } else { $serverType = 'soap'; } if($serverType != 'syncml' && $serverType != 'syncml_wbxml') { foreach($errors as $error) { echo "$error<br>"; } die('You should access this URL only with a SyncML enabled device.'); } elseif (count($errors) > 0) { foreach($errors as $error) { error_log($error); } exit; } if ($serverType == 'soap' && (!isset($_SERVER['REQUEST_METHOD']) || $_SERVER['REQUEST_METHOD'] != 'POST')) { $session_control = 'none'; if (isset($_GET['wsdl'])) { $params = 'wsdl'; } else { $params = 'disco'; } } /* Load base libraries. */ require_once HORDE_BASE . '/lib/base.php'; /* Load the RPC backend based on $serverType. */ $server = &Horde_RPC::singleton($serverType, $params); /* Let the backend check authentication. By default, we look for HTTP * basic authentication against Horde, but backends can override this * as needed. */ $server->authorize(); /* Get the server's response. We call $server->getInput() to allow * backends to handle input processing differently. */ if ($input === null) { $input = $server->getInput(); } $out = $server->getResponse($input, $params); /* Return the response to the client. */ header('Content-Type: ' . $server->getResponseContentType()); header('Content-length: ' . bytes($out)); header('Accept-Charset: UTF-8'); echo $out;