]> git.mxchange.org Git - friendica.git/commitdiff
DFRN: Improved delivery status handling
authorMichael <heluecht@pirati.ca>
Wed, 16 Aug 2017 04:08:57 +0000 (04:08 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 16 Aug 2017 04:08:57 +0000 (04:08 +0000)
include/dfrn.php
include/network.php
mod/dfrn_notify.php

index 78802563a625d6fcd6fdc0ef2ee4a46a6fcea05f..79482424bdc60ad6ff3f1bf19457ed76fe623674 100644 (file)
@@ -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;
        }
 }
index 4bf6868822b4549986f3bfbae630c3a9366c7f44..4fc04b81942d816e6a0da345989f585331a44df2 100644 (file)
@@ -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<message>" . xmlify($message) . "</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 '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
-       echo "<result>\r\n\t<status>$st</status>\r\n$xml_message</result>\r\n";
        killme();
 }
 
index 44e016599e486862c0d4493499ba10e331838e33..a0ac506769be364ec10d7960598f9f75c8d59063 100644 (file)
@@ -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
 }