From 791fc1d8b3c3cc6bb4e62ef4b6f81bb99c1d45ed Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 16 Aug 2017 04:08:57 +0000 Subject: [PATCH] DFRN: Improved delivery status handling --- include/dfrn.php | 14 ++++++++++---- include/network.php | 18 +++++++++++++----- mod/dfrn_notify.php | 19 +++++++++---------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/include/dfrn.php b/include/dfrn.php index 78802563a..79482424b 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1281,7 +1281,11 @@ class dfrn { $res = parse_xml_string($xml); - return $res->status; + if (!isset($res->status)) { + return -11; + } + + return intval($res->status); } /** @@ -2800,19 +2804,20 @@ class dfrn { * @param text $xml The DFRN message * @param array $importer Record of the importer user mixed with contact of the content * @param bool $sort_by_date Is used when feeds are polled + * @return integer Import status * @todo set proper type-hints */ - public static function import($xml,$importer, $sort_by_date = false) { + public static function import($xml, $importer, $sort_by_date = false) { if ($xml == "") { - return; + return 400; } if ($importer["readonly"]) { // We aren't receiving stuff from this person. But we will quietly ignore them // rather than a blatant "go away" message. logger('ignoring contact '.$importer["id"]); - return; + return 403; } $doc = new DOMDocument(); @@ -2917,5 +2922,6 @@ class dfrn { } } logger("Import done for user " . $importer["uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); + return 200; } } diff --git a/include/network.php b/include/network.php index 4bf686882..4fc04b819 100644 --- a/include/network.php +++ b/include/network.php @@ -372,14 +372,22 @@ function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0) function xml_status($st, $message = '') { - $xml_message = ((strlen($message)) ? "\t" . xmlify($message) . "\r\n" : ''); + $result = array('status' => $st); - if ($st) + if ($message != '') { + $result['message'] = $message; + } + + if ($st) { logger('xml_status returning non_zero: ' . $st . " message=" . $message); + } + + header("Content-type: text/xml"); + + $xmldata = array("result" => $result); + + echo xml::from_array($xmldata, $xml); - header( "Content-type: text/xml" ); - echo ''."\r\n"; - echo "\r\n\t$st\r\n$xml_message\r\n"; killme(); } diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 44e016599..a0ac50676 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -47,7 +47,7 @@ function dfrn_notify_post(App $a) { ); if (! dbm::is_result($r)) { logger('dfrn_notify: could not match challenge to dfrn_id ' . $dfrn_id . ' challenge=' . $challenge); - xml_status(3); + xml_status(3, 'Could not match challenge'); } $r = q("DELETE FROM `challenge` WHERE `dfrn-id` = '%s' AND `challenge` = '%s'", @@ -58,7 +58,7 @@ function dfrn_notify_post(App $a) { // find the local user who owns this relationship. $sql_extra = ''; - switch($direction) { + switch ($direction) { case (-1): $sql_extra = sprintf(" AND ( `issued-id` = '%s' OR `dfrn-id` = '%s' ) ", dbesc($dfrn_id), dbesc($dfrn_id)); break; @@ -69,7 +69,7 @@ function dfrn_notify_post(App $a) { $sql_extra = sprintf(" AND `dfrn-id` = '%s' AND `duplex` = 1 ", dbesc($dfrn_id)); break; default: - xml_status(3); + xml_status(3, 'Invalid direction'); break; // NOTREACHED } @@ -95,7 +95,7 @@ function dfrn_notify_post(App $a) { if (! dbm::is_result($r)) { logger('dfrn_notify: contact not found for dfrn_id ' . $dfrn_id); - xml_status(3); + xml_status(3, 'Contact not found'); //NOTREACHED } @@ -135,8 +135,7 @@ function dfrn_notify_post(App $a) { require_once('include/Contact.php'); contact_remove($importer['id']); logger('relationship dissolved : ' . $importer['name'] . ' dissolved ' . $importer['username']); - xml_status(0); - + xml_status(0, 'relationship dissolved'); } $rino = get_config('system', 'rino_encrypt'); @@ -150,7 +149,7 @@ function dfrn_notify_post(App $a) { // but only for $remote_rino > 1, because old code did't send rino version if ($rino_remote_version > 1 && $rino < $rino_remote) { logger("rino version '$rino_remote' is lower than supported '$rino'"); - xml_status(0,"rino version '$rino_remote' is lower than supported '$rino'"); + xml_status(0, "rino version '$rino_remote' is lower than supported '$rino'"); } $rawkey = hex2bin(trim($key)); @@ -204,8 +203,8 @@ function dfrn_notify_post(App $a) { } break; default: - logger("rino: invalid sent verision '$rino_remote'"); - xml_status(0); + logger("rino: invalid sent version '$rino_remote'"); + xml_status(0, "Invalid sent version '$rino_remote'"); } @@ -213,7 +212,7 @@ function dfrn_notify_post(App $a) { } $ret = dfrn::import($data, $importer); - xml_status($ret); + xml_status($ret, 'Processed'); // NOTREACHED }