aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xboot.php2
-rw-r--r--include/deliver.php23
-rw-r--r--include/notifier.php12
-rw-r--r--include/poller.php11
-rw-r--r--include/zot.php12
-rw-r--r--install/schema_mysql.sql2
-rw-r--r--install/schema_postgres.sql2
-rw-r--r--install/update.php13
-rw-r--r--mod/dreport.php32
9 files changed, 105 insertions, 4 deletions
diff --git a/boot.php b/boot.php
index ac2a26380..5a564bb9d 100755
--- a/boot.php
+++ b/boot.php
@@ -50,7 +50,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H');
define ( 'ZOT_REVISION', 1 );
-define ( 'DB_UPDATE_VERSION', 1153 );
+define ( 'DB_UPDATE_VERSION', 1154 );
/**
* @brief Constant with a HTML line break.
diff --git a/include/deliver.php b/include/deliver.php
index 26739fb06..7a43e3d47 100644
--- a/include/deliver.php
+++ b/include/deliver.php
@@ -15,7 +15,10 @@ function deliver_run($argv, $argc) {
logger('deliver: invoked: ' . print_r($argv,true), LOGGER_DATA);
+
for($x = 1; $x < $argc; $x ++) {
+
+ $dresult = null;
$r = q("select * from outq where outq_hash = '%s' limit 1",
dbesc($argv[$x])
);
@@ -98,11 +101,29 @@ function deliver_run($argv, $argc) {
}
else {
$msg = array('body' => json_encode(array('success' => true, 'pickup' => array(array('notify' => $notify,'message' => $m)))));
- zot_import($msg,z_root());
+ $dresult = zot_import($msg,z_root());
}
$r = q("delete from outq where outq_hash = '%s'",
dbesc($argv[$x])
);
+ if($dresult && is_array($dresult)) {
+ foreach($dresult as $xx) {
+ if(is_array($xx) && array_key_exists('message_id',$xx)) {
+ q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ",
+ dbesc($xx['message_id']),
+ dbesc($xx['location']),
+ dbesc($xx['recipient']),
+ dbesc($xx['status']),
+ dbesc(datetime_convert($xx['date'])),
+ dbesc($xx['sender'])
+ );
+ }
+ }
+ }
+
+ q("delete from dreport where dreport_queue = '%s' limit 1",
+ dbesc($argv[$x])
+ );
}
}
else {
diff --git a/include/notifier.php b/include/notifier.php
index e16f80ecf..fd95d53e2 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -662,6 +662,18 @@ function notifier_run($argv, $argc){
dbesc($n),
dbesc(json_encode($encoded_item))
);
+ // only create delivery reports for normal undeleted items
+ if(array_key_exists('postopts',$target_item) && (! $target_item['item_deleted'])) {
+ q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan, dreport_queue ) values ( '%s','%s','%s','%s','%s','%s','%s' ) ",
+ dbesc($target_item['mid']),
+ dbesc($hub['hubloc_host']),
+ dbesc($hub['hubloc_host']),
+ dbesc('queued'),
+ dbesc(datetime_convert()),
+ dbesc($channel['channel_hash']),
+ dbesc($hash)
+ );
+ }
}
$deliver[] = $hash;
diff --git a/include/poller.php b/include/poller.php
index 72f22d946..031fb4533 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -201,6 +201,17 @@ function poller_run($argv, $argc){
db_utcnow(), db_quoteinterval('30 DAY')
);
+ // expire old delivery reports
+
+ $keep_reports = intval(get_config('system','expire_delivery_reports'));
+ if($keep_reports === 0)
+ $keep_reports = 30;
+
+ q("delete from dreport where dreport_time < %s - INTERVAL %s",
+ db_utcnow(),
+ db_quoteinterval($keep_reports . ' DAY')
+ );
+
// expire any expired accounts
downgrade_accounts();
diff --git a/include/zot.php b/include/zot.php
index f728d8fb9..942998b98 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -971,7 +971,11 @@ function zot_process_response($hub, $arr, $outq) {
}
}
}
-
+
+ q("delete from dreport where dreport_queue = '%s' limit 1",
+ dbesc($outq['outq_hash'])
+ );
+
// update the timestamp for this site
q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'",
@@ -1575,6 +1579,12 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $
continue;
}
+ if($d['hash'] === $sender['hash']) {
+ $DR->update('self delivery ignored');
+ $result[] = $DR->get();
+ continue;
+ }
+
$channel = $r[0];
$DR->addto_recipient($channel['channel_name'] . ' <' . $channel['channel_address'] . '@' . get_app()->get_hostname() . '>');
diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql
index 3bb3b7133..a21e5f48a 100644
--- a/install/schema_mysql.sql
+++ b/install/schema_mysql.sql
@@ -359,11 +359,13 @@ CREATE TABLE IF NOT EXISTS `dreport` (
`dreport_result` char(255) NOT NULL DEFAULT '',
`dreport_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`dreport_xchan` char(255) NOT NULL DEFAULT '',
+ `dreport_queue` char(255) NOT NULL DEFAULT '',
PRIMARY KEY (`dreport_id`),
KEY `dreport_mid` (`dreport_mid`),
KEY `dreport_site` (`dreport_site`),
KEY `dreport_time` (`dreport_time`),
KEY `dreport_xchan` (`dreport_xchan`),
+ KEY `dreport_queue` (`dreport_queue`),
KEY `dreport_channel` (`dreport_channel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql
index 1298f3cb3..26d7d79a3 100644
--- a/install/schema_postgres.sql
+++ b/install/schema_postgres.sql
@@ -350,6 +350,7 @@ CREATE TABLE IF NOT EXISTS "dreport" (
"dreport_result" char(255) NOT NULL DEFAULT '',
"dreport_time" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00',
"dreport_xchan" char(255) NOT NULL DEFAULT '',
+ "dreport_queue" char(255) NOT NULL DEFAULT '',
PRIMARY KEY ("dreport_id")
);
@@ -357,6 +358,7 @@ create index "dreport_mid" on dreport ("dreport_mid");
create index "dreport_site" on dreport ("dreport_site");
create index "dreport_time" on dreport ("dreport_time");
create index "dreport_xchan" on dreport ("dreport_xchan");
+create index "dreport_queue" on dreport ("dreport_queue");
create index "dreport_channel" on dreport ("dreport_channel");
diff --git a/install/update.php b/install/update.php
index cf35698df..bef754570 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1153 );
+define( 'UPDATE_VERSION' , 1154 );
/**
*
@@ -1854,3 +1854,14 @@ function update_r1152() {
return UPDATE_FAILED;
}
+
+function update_r1153() {
+
+ $r1 = q("ALTER TABLE dreport ADD dreport_queue CHAR( 255 ) NOT NULL DEFAULT '' ");
+ $r2 = q("create index dreport_queue on dreport ( dreport_queue) ");
+ if($r1 && $r2)
+ return UPDATE_SUCCESS;
+ return UPDATE_FAILED;
+
+
+}
diff --git a/mod/dreport.php b/mod/dreport.php
new file mode 100644
index 000000000..7e245fbe0
--- /dev/null
+++ b/mod/dreport.php
@@ -0,0 +1,32 @@
+<?php
+
+function dreport_content(&$a) {
+
+ if(! local_channel()) {
+ notice( t('Permission denied') . EOL);
+ return;
+ }
+
+ $channel = $a->get_channel();
+
+ $mid = ((argc() > 1) ? argv(1) : '');
+
+ if(! $mid) {
+ notice( t('Invalid message') . EOL);
+ return;
+ }
+
+ $r = q("select * from dreport where dreport_xchan = '%s' and dreport_mid = '%s'",
+ dbesc($channel['channel_hash']),
+ dbesc($mid)
+ );
+
+ if(! $r) {
+ notice( t('no results') . EOL);
+ return;
+ }
+
+ return print_r($r,true);
+
+
+} \ No newline at end of file