diff --git a/include/dfrn.php b/include/dfrn.php
index 78802563a..8484f7c61 100644
--- a/include/dfrn.php
+++ b/include/dfrn.php
@@ -1281,7 +1281,15 @@ class dfrn {
$res = parse_xml_string($xml);
- return $res->status;
+ if (!isset($res->status)) {
+ return -11;
+ }
+
+ if (!empty($res->message)) {
+ logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
+ }
+
+ return intval($res->status);
}
/**
@@ -2800,19 +2808,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 +2926,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
}