xmlify($baseurl), '$feed_title' => xmlify($owner['name']), '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , 'Y-m-d\TH:i:s\Z')) , '$name' => xmlify($owner['name']), '$profile_page' => xmlify($owner['url']), '$photo' => xmlify($owner['photo']) )); if($followup) { $atom .= replace_macros($cmnt_template, array( '$name' => xmlify($contact['name']), '$profile_page' => xmlify($contact['url']), '$thumb' => xmlify($contact['thumb']), '$item_id' => xmlify("urn:X-dfrn:$baseurl:{$owner['uid']}:{$item['hash']}"), '$title' => xmlify($item['title']), '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$content' =>xmlify($item['body']), '$parent_id' => xmlify("{$items[0]['remote-id']}"), '$comment_allow' => 0 )); } else { foreach($items as $item) { if($item['deleted']) { $atom .= replace_macros($tomb_template, array( '$id' => xmlify("urn:X-dfrn:$baseurl:{$owner['uid']}:{$item['hash']}"), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , 'Y-m-d\TH:i:s\Z')) )); } else { foreach($contacts as $contact) { if($item['contact-id'] == $contact['id']) { if($item['parent'] == $item['id']) { $atom .= replace_macros($item_template, array( '$name' => xmlify($contact['name']), '$profile_page' => xmlify($contact['url']), '$thumb' => xmlify($contact['thumb']), '$item_id' => xmlify("urn:X-dfrn:$baseurl:{$owner['uid']}:{$item['hash']}"), '$title' => xmlify($contact['name']), '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$content' =>xmlify($item['body']), '$comment_allow' => (($item['last-child'] && strlen($contact['dfrn-id'] && (! $contact['blocked']))) ? 1 : 0) )); } else { $atom .= replace_macros($cmnt_template, array( '$name' => xmlify($contact['name']), '$profile_page' => xmlify($contact['url']), '$thumb' => xmlify($contact['thumb']), '$item_id' => xmlify("urn:X-dfrn:$baseurl:{$owner['uid']}:{$item['hash']}"), '$title' => xmlify($item['title']), '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , 'Y-m-d\TH:i:s\Z')), '$content' =>xmlify($item['body']), '$parent_id' => xmlify("urn:X-dfrn:$baseurl:{$owner['uid']}:{$items[0]['hash']}"), '$comment_allow' => (($item['last-child']) ? 1 : 0) )); } } } } } } $atom .= "\r\n"; // create a separate feed with comments disabled and send to those who can't respond. $atom_nowrite = str_replace('1','0',$atom); print_r($atom); dbg(3); print_r($recipients); if($followup) $recip_str = $parent['contact-id']; else $recip_str = implode(', ', $recipients); $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) ", dbesc($recip_str) ); if(! count($r)) killme(); // delivery loop foreach($r as $rr) { if($rr['self']) continue; if(! strlen($rr['dfrn-id'])) continue; $url = $rr['notify'] . '?dfrn_id=' . $rr['dfrn-id']; print_r($url); $xml = fetch_url($url); echo $xml; print_r($xml); if(! $xml) continue; $res = simplexml_load_string($xml); print_r($res); var_dump($res); if((intval($res->status) != 0) || (! strlen($res->challenge)) || ($res->dfrn_id != $rr['dfrn-id'])) continue; $postvars = array(); $postvars['dfrn_id'] = $rr['dfrn-id']; $challenge = hex2bin($res->challenge); echo "dfrn-id:" . $res->dfrn_id . "\r\n"; echo "challenge:" . $res->challenge . "\r\n"; echo "pubkey:" . $rr['pubkey'] . "\r\n"; openssl_public_decrypt($challenge,$postvars['challenge'],$rr['pubkey']); if(strlen($rr['dfrn-id']) && (! $rr['blocked'])) $postvars['data'] = $atom; else $postvars['data'] = $atom_nowrite; print_r($postvars); $xml = post_url($url,$postvars); print_r($xml); } killme();