X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsquirrelmail_rpc.php;h=7f5f779f636ca24038da1994090a80ce848fa818;hb=eceb3fe56e7ef548f83797639e9d6d993254695b;hp=4a1acbacf31be106eb15d5e697f62274f4e7ab34;hpb=cd60d6082e0060ed5d5182baa24e1cab6db5ad05;p=squirrelmail.git diff --git a/src/squirrelmail_rpc.php b/src/squirrelmail_rpc.php index 4a1acbac..7f5f779f 100644 --- a/src/squirrelmail_rpc.php +++ b/src/squirrelmail_rpc.php @@ -5,8 +5,15 @@ * * This file contains the entry point to the "SquirrelMail API" -- the * remote procedure call request receiver. + * + * RPC requests are currently understood as simple HTTP GET or POST + * requests. The SquirrelMail default_rpc template set responds in a + * SOAP (currently v1.2) compliant manner, but this interface does not + * (yet?) understand SOAP requests. The format of responses can be + * changed by creating a different RPC template set and pointing to it + * with $rpc_templateset in the main SquirrelMail configuration file. * - * @copyright © 1999-2008 The SquirrelMail Project Team + * @copyright © 1999-2009 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -69,6 +76,8 @@ require('../include/init.php'); * 500 - Empty Folders plugin empty_folders_purge_trash action failed * 501 - Empty Folders plugin empty_folders_purge_all action failed * 502 - Empty Folders plugin empty_folders_delete_all action failed + * 503 - Mark Read plugin mark_read_read_all action failed + * 504 - Mark Read plugin mark_read_unread_all action failed * */ @@ -79,7 +88,7 @@ require('../include/init.php'); * */ if (!sqGetGlobalVar('rpc_action', $rpc_action, SQ_FORM)) { - sm_rpc_return_error(1, _("No RPC action given")); + sm_rpc_return_error('', 1, _("No RPC action given"), 'client', 400, 'Bad Request'); } @@ -116,6 +125,7 @@ $oTemplate->header('Cache-Control: no-cache'); * * Known users of this hook: * empty_folders + * mark_read * */ $temp = array(&$rpc_action); @@ -139,11 +149,11 @@ if (!$handled_by_plugin) switch (strtolower($rpc_action)) { require_once(SM_PATH . 'functions/imap.php'); if (!sqGetGlobalVar('delete_ids', $delete_ids, SQ_FORM)) { - sm_rpc_return_error(99, _("No deletion ID given")); + sm_rpc_return_error($rpc_action, 99, _("No deletion ID given"), 'client', 400, 'Bad Request'); } $delete_ids = explode(',', $delete_ids); if (!sqGetGlobalVar('mailbox', $mailbox, SQ_FORM)) { - sm_rpc_return_error(99, _("No mailbox given")); + sm_rpc_return_error($rpc_action, 99, _("No mailbox given"), 'client', 400, 'Bad Request'); } if (sqGetGlobalVar('startMessage', $startMessage, SQ_INORDER, 1)) { $startMessage = (int) $startMessage; @@ -162,14 +172,14 @@ if (!$handled_by_plugin) switch (strtolower($rpc_action)) { //FIXME: establish constants for $hide values (the 3 below indicates not to show errors, but to return any error string) $result = $oImapMessage->deleteMessage(3); if ($result !== TRUE) { - sm_rpc_return_error(99, $result); + sm_rpc_return_error($rpc_action, 99, $result, 'server', 500, 'Server Error'); } } --- */ sm_rpc_return_success(); //FIXME: Just for testing the line above can be changed to something like this: - //sm_rpc_return_success(0, 'Hooray! Message(s) deleted. Refresh your message list and make sure.'); + //sm_rpc_return_success($rpc_action, 0, 'Hooray! Message(s) deleted. Refresh your message list and make sure.'); break; @@ -178,7 +188,7 @@ if (!$handled_by_plugin) switch (strtolower($rpc_action)) { * */ default: - sm_rpc_return_error(2, _("RPC action not understood")); + sm_rpc_return_error($rpc_action, 2, _("RPC action not understood"), 'client', 400, 'Bad Request'); break; } @@ -190,16 +200,43 @@ if (!$handled_by_plugin) switch (strtolower($rpc_action)) { * * NOTE that this function exits and will never return * - * @param int $error_code The error code for the current error condition - * @param string $error_text Any error message associated with the error - * condition (OPTIONAL; default empty string) + * @param string $rpc_action The RPC action that is being handled + * (OPTIONAL; default attempt to grab from GET/POST) + * @param int $error_code The (application-level) error code for the current + * error condition + * @param string $error_text Any error message associated with the error + * condition (OPTIONAL; default empty string) + * @param string $guilty_party A string indicating the party who caused the + * error: either "client" or "server" (OPTIONAL; + * default unspecified) + * @param int $http_status_code When non-zero, this value will be sent to + * the browser in the HTTP headers as the request + * status code (OPTIONAL; default not used) + * @param string $http_status_text A string naming the HTTP status, usually the + * title of the corresponding status code as + * found on: + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + * (OPTIONAL; default not used; $http_status_code + * must also be provided). * */ -function sm_rpc_return_error($error_code, $error_text='') { +function sm_rpc_return_error($rpc_action=NULL, $error_code, + $error_text='', $guilty_party='', + $http_status_code=0, $http_status_text='') { global $oTemplate; - $oTemplate->assign('error_code', $error_code); - $oTemplate->assign('error_text', $error_text); + + if (is_null($rpc_action)) sqGetGlobalVar('rpc_action', $rpc_action, SQ_FORM); + + if ($http_status_code) { + $oTemplate->header('HTTP/1.1 ' . $http_status_code . ' ' . $http_status_text); + $oTemplate->header('Status: ' . $http_status_code . ' ' . $http_status_text); + } + + $oTemplate->assign('rpc_action', $rpc_action); + $oTemplate->assign('error_code', $error_code); + $oTemplate->assign('error_text', $error_text); + $oTemplate->assign('guilty_party', $guilty_party); $oTemplate->display('rpc_response_error.tpl'); @@ -214,14 +251,19 @@ function sm_rpc_return_error($error_code, $error_text='') { * * NOTE that this function exits and will never return * + * @param string $rpc_action The RPC action that is being handled + * (OPTIONAL; default attempt to grab from GET/POST) * @param int $result_code The result code (OPTIONAL; default 0) * @param string $result_text Any result message (OPTIONAL; default * empty string) * */ -function sm_rpc_return_success($result_code=0, $result_text='') { +function sm_rpc_return_success($rpc_action=NULL, $result_code=0, $result_text='') { + + if (is_null($rpc_action)) sqGetGlobalVar('rpc_action', $rpc_action, SQ_FORM); global $oTemplate; + $oTemplate->assign('rpc_action', $rpc_action); $oTemplate->assign('result_code', $result_code); $oTemplate->assign('result_text', $result_text);