+function dfrn_dispatch_public($postdata)
+{
+ $msg = Diaspora::decodeRaw([], $postdata);
+ if (!$msg) {
+ // We have to fail silently to be able to hand it over to the salmon parser
+ return false;
+ }
+
+ // Fetch the corresponding public contact
+ $contact = Contact::getDetailsByAddr($msg['author'], 0);
+ if (!$contact) {
+ logger('Contact not found for address ' . $msg['author']);
+ System::xmlExit(3, 'Contact ' . $msg['author'] . ' not found');
+ }
+
+ // We now have some contact, so we fetch it
+ $importer = dba::fetch_first("SELECT *, `name` as `senderName`
+ FROM `contact`
+ WHERE NOT `blocked` AND `id` = ? LIMIT 1",
+ $contact['id']);
+
+ $importer['importer_uid'] = 0;
+
+ // This should never fail
+ if (!DBM::is_result($importer)) {
+ logger('Contact not found for address ' . $msg['author']);
+ System::xmlExit(3, 'Contact ' . $msg['author'] . ' not found');
+ }
+
+ logger('Importing post from ' . $msg['author'] . ' with the public envelope.', LOGGER_DEBUG);
+
+ // Now we should be able to import it
+ $ret = DFRN::import($msg['message'], $importer);
+ System::xmlExit($ret, 'Done');
+}
+
+function dfrn_dispatch_private($user, $postdata)
+{
+ $msg = Diaspora::decodeRaw($user, $postdata);
+ if (!$msg) {
+ System::xmlExit(4, 'Unable to parse message');
+ }
+
+ // Check if the user has got this contact
+ $cid = Contact::getIdForURL($msg['author'], $user['uid']);
+ if (!$cid) {
+ // Otherwise there should be a public contact
+ $cid = Contact::getIdForURL($msg['author']);
+ if (!$cid) {
+ logger('Contact not found for address ' . $msg['author']);
+ System::xmlExit(3, 'Contact ' . $msg['author'] . ' not found');
+ }
+ }
+
+ // We now have some contact, so we fetch it
+ $importer = dba::fetch_first("SELECT *, `name` as `senderName`
+ FROM `contact`
+ WHERE NOT `blocked` AND `id` = ? LIMIT 1",
+ $cid);
+
+ // This should never fail
+ if (!DBM::is_result($importer)) {
+ logger('Contact not found for address ' . $msg['author']);
+ System::xmlExit(3, 'Contact ' . $msg['author'] . ' not found');
+ }
+
+ // Set the user id. This is important if this is a public contact
+ $importer['importer_uid'] = $user['uid'];
+
+ logger('Importing post from ' . $msg['author'] . ' to ' . $user['nickname'] . ' with the private envelope.', LOGGER_DEBUG);
+
+ // Now we should be able to import it
+ $ret = DFRN::import($msg['message'], $importer);
+ System::xmlExit($ret, 'Done');
+}