The Diaspora transport layer is now the default for DFRN

This commit is contained in:
Michael 2018-04-02 21:46:10 +00:00
parent 4972b82807
commit eeadd2f9d6

View File

@ -1146,13 +1146,20 @@ class DFRN
* @param string $atom Content that will be transmitted * @param string $atom Content that will be transmitted
* @param bool $dissolve (to be documented) * @param bool $dissolve (to be documented)
* *
* @return int Deliver status. -1 means an error. * @return int Deliver status. Negative values mean an error.
* @todo Add array type-hint for $owner, $contact * @todo Add array type-hint for $owner, $contact
*/ */
public static function deliver($owner, $contact, $atom, $dissolve = false) public static function deliver($owner, $contact, $atom, $dissolve = false)
{ {
$a = get_app(); $a = get_app();
// At first try the Diaspora transport layer
$ret = self::transmit($owner, $contact, $atom);
if ($ret >= 200) {
logger('Delivery via Diaspora transport layer was successfull with status ' . $ret);
return $ret;
}
$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']); $idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
if ($contact['duplex'] && $contact['dfrn-id']) { if ($contact['duplex'] && $contact['dfrn-id']) {
@ -1359,7 +1366,7 @@ class DFRN
} }
if (!empty($res->message)) { if (!empty($res->message)) {
logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); logger('Transmit returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
} }
if ($res->status == 200) { if ($res->status == 200) {
@ -1370,15 +1377,15 @@ class DFRN
} }
/** /**
* @brief Delivers items to the contacts via the Diaspora transport layer * @brief Transmits atom content to the contacts via the Diaspora transport layer
* *
* @param array $owner Owner record * @param array $owner Owner record
* @param array $contact Contact record of the receiver * @param array $contact Contact record of the receiver
* @param array $items Items that will be transmitted * @param string $atom Content that will be transmitted
* *
* @return int HTTP Deliver status * @return int Deliver status. Negative values mean an error.
*/ */
public static function buildAndTransmit($owner, $contact, $items) public static function transmit($owner, $contact, $atom)
{ {
$a = get_app(); $a = get_app();
@ -1400,10 +1407,38 @@ class DFRN
$content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json"); $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
$ret = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); $xml = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]);
/// @ToDo: Add better treatment of return codes $curl_stat = $a->get_curl_code();
return $a->get_curl_code(); if (!$curl_stat || empty($xml)) {
return -9; // timed out
}
if (($curl_stat == 503) && (stristr($a->get_curl_headers(), 'retry-after'))) {
return -10;
}
if (strpos($xml, '<?xml') === false) {
logger('no valid XML returned');
logger('returned XML: ' . $xml, LOGGER_DATA);
return 3;
}
$res = XML::parseString($xml);
if (!isset($res->status)) {
return -11;
}
if (!empty($res->message)) {
logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG);
}
if ($res->status == 200) {
Contact::unmarkForArchival($contact);
}
return intval($res->status);
} }
/** /**