infrastructure for queueing, redelivery

This commit is contained in:
Friendika 2010-11-21 23:00:01 -08:00
parent 552c56102e
commit de6c777d3f
7 changed files with 53 additions and 13 deletions

View file

@ -2,7 +2,7 @@
set_time_limit(0); set_time_limit(0);
define ( 'BUILD_ID', 1018 ); define ( 'BUILD_ID', 1019 );
define ( 'DFRN_PROTOCOL_VERSION', '2.0' ); define ( 'DFRN_PROTOCOL_VERSION', '2.0' );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
@ -378,8 +378,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
$curl_time = intval(get_config('system','curl_timeout')); $curl_time = intval(get_config('system','curl_timeout'));
if($curl_time) curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time);
// by default we will allow self-signed certs // by default we will allow self-signed certs
// but you can override this // but you can override this
@ -400,7 +399,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) {
$s = curl_exec($ch); $s = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
$header = substr($s,0,strpos($s,"\r\n\r\n")); $header = substr($s,0,strpos($s,"\r\n\r\n"));
if(stristr($header,'100') && (strlen($header) < 30)) { if(stristr($header,'100') && (strlen($header) < 30)) {
// 100 Continue has two headers, get the real one // 100 Continue has two headers, get the real one
@ -440,8 +439,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
curl_setopt($ch, CURLOPT_POSTFIELDS,$params); curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
$curl_time = intval(get_config('system','curl_timeout')); $curl_time = intval(get_config('system','curl_timeout'));
if($curl_time) curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time);
if(is_array($headers)) if(is_array($headers))
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
@ -459,7 +457,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
$s = curl_exec($ch); $s = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
$header = substr($s,0,strpos($s,"\r\n\r\n")); $header = substr($s,0,strpos($s,"\r\n\r\n"));
if(stristr($header,'100') && (strlen($header) < 30)) { if(stristr($header,'100') && (strlen($header) < 30)) {
// 100 Continue has two headers, get the real one // 100 Continue has two headers, get the real one

View file

@ -408,3 +408,10 @@ CREATE TABLE IF NOT EXISTS `auth_codes` (
PRIMARY KEY ( `id` ) PRIMARY KEY ( `id` )
) ENGINE = MYISAM DEFAULT CHARSET=utf8; ) ENGINE = MYISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `queue` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`cid` INT NOT NULL ,
`created` DATETIME NOT NULL ,
`last` DATETIME NOT NULL ,
`content` MEDIUMTEXT NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET=utf8;

View file

@ -710,7 +710,10 @@ function dfrn_deliver($owner,$contact,$atom) {
$xml = post_url($contact['notify'],$postvars); $xml = post_url($contact['notify'],$postvars);
logger('dfrn_deliver: ' . "SENDING: " . print_r($postvars,true) . "\n" . "RECEIVING: " . $xml); logger('dfrn_deliver: ' . "SENDING: " . print_r($postvars,true) . "\n" . "RECEIVING: " . $xml, LOGGER_DATA);
if(! strlen($xml))
return(-1);
$res = simplexml_load_string($xml); $res = simplexml_load_string($xml);

View file

@ -255,10 +255,24 @@
case 'dfrn': case 'dfrn':
logger('notifier: dfrndelivery: ' . $contact['name']); logger('notifier: dfrndelivery: ' . $contact['name']);
$deliver_status = dfrn_deliver($owner,$contact,$atom); $deliver_status = dfrn_deliver($owner,$contact,$atom);
if($deliver_status == (-1)) {
// queue message for redelivery
}
break; break;
default: default:
if($followup && $contact['notify']) { if($followup && $contact['notify']) {
slapper($owner,$contact['notify'],$slap); logger('notifier: slapdelivery: ' . $contact['name']);
$deliver_status = slapper($owner,$contact['notify'],$slap);
if($deliver_status == (-1)) {
// queue message for redelivery
}
} }
else { else {
@ -269,7 +283,13 @@
logger('notifier: slapdelivery: ' . $contact['name']); logger('notifier: slapdelivery: ' . $contact['name']);
foreach($slaps as $slappy) { foreach($slaps as $slappy) {
if($contact['notify']) { if($contact['notify']) {
slapper($owner,$contact['notify'],$slappy); $deliver_status = slapper($owner,$contact['notify'],$slappy);
if($deliver_status == (-1)) {
// queue message for redelivery
// if not already in queue
// else if deliver_status ok and queued, remove from queue
}
} }
} }
} }
@ -277,6 +297,7 @@
break; break;
} }
if(($cmd === 'mail') && ($deliver_status == 0)) { if(($cmd === 'mail') && ($deliver_status == 0)) {
$r = q("UPDATE `mail` SET `delivered` = 1 WHERE `id` = %d LIMIT 1", $r = q("UPDATE `mail` SET `delivered` = 1 WHERE `id` = %d LIMIT 1",
intval($item_id) intval($item_id)
@ -292,7 +313,7 @@
logger('notifier: urldelivery: ' . $url); logger('notifier: urldelivery: ' . $url);
foreach($slaps as $slappy) { foreach($slaps as $slappy) {
if($url) { if($url) {
slapper($owner,$url,$slappy); $deliver_status = slapper($owner,$url,$slappy);
} }
} }
} }

View file

@ -205,6 +205,8 @@ EOT;
} }
logger('slapper returned ' . $return_code); logger('slapper returned ' . $return_code);
return; if(! $return_code)
return(-1);
return ((substr($return_code,0,1) === '2') ? 0 : 1);
} }

View file

@ -167,3 +167,12 @@ PRIMARY KEY ( `id` )
} }
function update_1018() {
q("CREATE TABLE IF NOT EXISTS `queue` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`cid` INT NOT NULL ,
`created` DATETIME NOT NULL ,
`last` DATETIME NOT NULL ,
`content` MEDIUMTEXT NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
}