+ return intval($res->status);
+ }
+
+ /**
+ * @brief Transmits atom content to the contacts via the Diaspora transport layer
+ *
+ * @param array $owner Owner record
+ * @param array $contact Contact record of the receiver
+ * @param string $atom Content that will be transmitted
+ *
+ * @return int Deliver status. Negative values mean an error.
+ */
+ public static function transmit($owner, $contact, $atom)
+ {
+ $a = get_app();
+
+ // Currently disabled, at first we will not use the batch delivery
+ // $public_batch = !$items[0]['private'];
+ $public_batch = false;
+
+ $msg = DFRN::entries($items, $owner);
+
+ $fcontact = Diaspora::personByHandle($contact['addr']);
+ if (empty($fcontact)) {
+ logger("unable to find contact details");
+ return;
+ }
+
+ $envelope = Diaspora::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch);
+
+ $dest_url = ($public_batch ? $fcontact["batch"] : $contact["notify"]);
+
+ $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
+
+ $xml = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]);
+
+ $curl_stat = $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;
+ }
+