$registry = ipsRegistry::instance();
$registry->init();
IPSCookie::$sensitive_cookies = array('session_id', 'ipb_admin_session_id', 'member_id', 'pass_hash');
//--------------------------------
//  Set up our vars
//--------------------------------
$registry->DB()->obj['use_shutdown'] = 0;
//--------------------------------
// Set debug mode
//--------------------------------
$registry->DB()->setDebugMode(ipsRegistry::$settings['sql_debug'] == 1 ? intval($_GET['debug']) : 0);
//===========================================================================
// Create the XML-RPC Server
//===========================================================================
require_once IPS_KERNEL_PATH . 'classApiServer.php';
$server = new classApiServer();
$api = $server->decodeRequest();
//===========================================================================
// Define Service
//===========================================================================
$valid_api = 0;
switch ($api) {
    case 'blogger':
        $valid_api = 1;
        break;
    case 'metaWeblog':
        $valid_api = 1;
        break;
}
if ($valid_api) {
    require_once DOC_IPS_ROOT_PATH . 'interface/blog/apis/server_' . strtolower($api) . '.php';
//--------------------------------
//  Initialize the FUNC
//--------------------------------
if (!ipsRegistry::$settings['ipconverge_enabled']) {
    @header("Content-type: text/xml");
    print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<methodResponse>\n\t\t\t   <fault>\n\t\t\t      <value>\n\t\t\t         <struct>\n\t\t\t            <member>\n\t\t\t               <name>faultCode</name>\n\t\t\t               <value>\n\t\t\t                  <int>1</int>\n\t\t\t                  </value>\n\t\t\t               </member>\n\t\t\t            <member>\n\t\t\t               <name>faultString</name>\n\t\t\t               <value>\n\t\t\t                  <string>IP.Converge is not enabled from your ACP Control Panel. Log into your IP.Board ACP and visit: System -&gt; Log In Management, and click the red x icon for the IP.Converge login method to enable it.</string>\n\t\t\t               </value>\n\t\t\t               </member>\n\t\t\t            </struct>\n\t\t\t         </value>\n\t\t\t            </fault>\n\t\t\t   </methodResponse>";
    exit;
}
//===========================================================================
// Define Service
//===========================================================================
require_once IPS_KERNEL_PATH . 'classApiServer.php';
//===========================================================================
// Create the XML-RPC Server
//===========================================================================
$server = new classApiServer();
$webservice = new handshake_server($registry);
$webservice->classApiServer =& $server;
$api = $server->decodeRequest();
$server->addObjectMap($webservice, 'UTF-8');
//-----------------------------------------
// Saying "info" or actually doing some
// work? Info is used by converge app to
// ensure this file exists and to grab the
// apps name.
// Codes:
// IPB : Invision Power Board
// IPD : Invision Power Dynamic
// IPN : Invision Power Nexus
//-----------------------------------------
if ($_REQUEST['info']) {
//--------------------------------
//  Initialize the FUNC
//--------------------------------
if (!ipsRegistry::$settings['xmlrpc_enable']) {
    @header("Content-type: text/xml");
    print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<methodResponse>\n\t\t\t   <fault>\n\t\t\t      <value>\n\t\t\t         <struct>\n\t\t\t            <member>\n\t\t\t               <name>faultCode</name>\n\t\t\t               <value>\n\t\t\t                  <int>1</int>\n\t\t\t                  </value>\n\t\t\t               </member>\n\t\t\t            <member>\n\t\t\t               <name>faultString</name>\n\t\t\t               <value>\n\t\t\t                  <string>IP.Board's XML-RPC API system is not enabled. Log into your IP.Board ACP and visit: System -&gt; System Settings -&gt; Advanced -&gt; XML-RPC API and update &quot;Enable XML-RPC API System&quot;</string>\n\t\t\t               </value>\n\t\t\t               </member>\n\t\t\t            </struct>\n\t\t\t         </value>\n\t\t\t            </fault>\n\t\t\t   </methodResponse>";
    exit;
}
//===========================================================================
// Define Service
//===========================================================================
require_once IPS_KERNEL_PATH . 'classApiServer.php';
//===========================================================================
// Create the XML-RPC Server
//===========================================================================
$server = new classApiServer();
$api = $server->decodeRequest();
$module = $server->params['api_module'];
$user = IPSText::md5Clean($server->params['api_key']);
//-----------------------------------------
// Check for module
//-----------------------------------------
if ($module and file_exists(DOC_IPS_ROOT_PATH . 'interface/board/modules/' . $module . '/api.php')) {
    require_once DOC_IPS_ROOT_PATH . 'interface/board/modules/' . $module . '/api.php';
    $webservice = new API_Server($registry);
    $webservice->classApiServer =& $server;
} else {
    $server->apiSendError('2', "IP.Board could not locate an API module called '{$module}'");
    $registry->DB()->insert('api_log', array('api_log_key' => $user, 'api_log_ip' => $_SERVER['REMOTE_ADDR'], 'api_log_date' => time(), 'api_log_query' => $server->raw_request, 'api_log_allowed' => 0));
    exit;
}