+
+function dfrn_poll_content(&$a) {
+
+
+ $dfrn_id = '';
+ $type = 'data';
+
+ if(x($_GET,'dfrn_id'))
+ $dfrn_id = $_GET['dfrn_id'];
+ if(x($_GET,'type'))
+ $type = $_GET['type'];
+ if(x($_GET,'last_update'))
+ $last_update = $_GET['last_update'];
+
+ $dfrn_version = (float) $_GET['dfrn_version'];
+
+ $direction = (-1);
+ if(strpos($dfrn_id,':') == 1) {
+ $direction = intval(substr($dfrn_id,0,1));
+ $dfrn_id = substr($dfrn_id,2);
+ }
+
+
+ if($dfrn_id != '') {
+ // initial communication from external contact
+ $hash = random_string();
+
+ $status = 0;
+
+ $r = q("DELETE FROM `challenge` WHERE `expire` < " . intval(time()));
+
+ $r = q("INSERT INTO `challenge` ( `challenge`, `dfrn-id`, `expire` , `type`, `last_update` )
+ VALUES( '%s', '%s', '%s', '%s', '%s' ) ",
+ dbesc($hash),
+ dbesc($dfrn_id),
+ intval(time() + 60 ),
+ dbesc($type),
+ dbesc($last_update)
+ );
+
+
+ $sql_extra = '';
+ switch($direction) {
+ case (-1):
+ $sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($dfrn_id));
+ $my_id = $dfrn_id;
+ break;
+ case 0:
+ $sql_extra = sprintf(" AND `issued-id` = '%s' AND `duplex` = 1 ", dbesc($dfrn_id));
+ $my_id = '1:' . $dfrn_id;
+ break;
+ case 1:
+ $sql_extra = sprintf(" AND `dfrn-id` = '%s' AND `duplex` = 1 ", dbesc($dfrn_id));
+ $my_id = '0:' . $dfrn_id;
+ break;
+ default:
+ goaway($a->get_baseurl());
+ break; // NOTREACHED
+ }
+
+
+
+
+ $r = q("SELECT * FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 $sql_extra LIMIT 1");
+
+ if(count($r)) {
+
+ $challenge = '';
+ $encrypted_id = '';
+ $id_str = $my_id . '.' . mt_rand(1000,9999);
+
+
+ if($r[0]['duplex'] && strlen($r[0]['pubkey'])) {
+ openssl_public_encrypt($hash,$challenge,$r[0]['pubkey']);
+ openssl_public_encrypt($id_str,$encrypted_id,$r[0]['pubkey']);
+ }
+ else {
+ openssl_private_encrypt($hash,$challenge,$r[0]['prvkey']);
+ openssl_private_encrypt($id_str,$encrypted_id,$r[0]['prvkey']);
+ }
+
+ $challenge = bin2hex($challenge);
+ $encrypted_id = bin2hex($encrypted_id);
+ }
+ else {
+ $status = 1;
+ }
+ header("Content-type: text/xml");
+ echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n"
+ . '<dfrn_poll>' . "\r\n"
+ . "\t" . '<status>' .$status . '</status>' . "\r\n"
+ . "\t" . '<dfrn_version>' . DFRN_PROTOCOL_VERSION . '</dfrn_version>' . "\r\n"
+ . "\t" . '<dfrn_id>' . $encrypted_id . '</dfrn_id>' . "\r\n"
+ . "\t" . '<challenge>' . $challenge . '</challenge>' . "\r\n"
+ . '</dfrn_poll>' . "\r\n" ;
+ killme();
+ }
+}
+
+