diff options
-rw-r--r-- | appinfo/info.xml | 5 | ||||
-rw-r--r-- | lib/BackgroundJob/ExpireSignalingMessage.php | 50 | ||||
-rw-r--r-- | lib/Signaling/Messages.php | 16 |
3 files changed, 70 insertions, 1 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml index 9e23c7441..5ea2f6cee 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -82,7 +82,12 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m <step>OCA\Spreed\Migration\FillRoomTokens</step> </post-migration> </repair-steps> + <contactsmenu> <provider>OCA\Spreed\ContactsMenu\Providers\CallProvider</provider> </contactsmenu> + + <background-jobs> + <job>OCA\Spreed\BackgroundJob\ExpireSignalingMessage</job> + </background-jobs> </info> diff --git a/lib/BackgroundJob/ExpireSignalingMessage.php b/lib/BackgroundJob/ExpireSignalingMessage.php new file mode 100644 index 000000000..51e23b79f --- /dev/null +++ b/lib/BackgroundJob/ExpireSignalingMessage.php @@ -0,0 +1,50 @@ +<?php +/** + * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Spreed\BackgroundJob; + +use OC\BackgroundJob\TimedJob; +use OCA\Spreed\Signaling\Messages; + +/** + * Class ExpireSignalingMessage + * + * @package OCA\Spreed\BackgroundJob + */ +class ExpireSignalingMessage extends TimedJob { + + /** @var Messages */ + protected $messages; + + /** + * @param Messages $messages + */ + public function __construct(Messages $messages) { + // Every 5 minutes + $this->setInterval(60 * 5); + + $this->messages = $messages; + } + + protected function run($argument) { + $this->messages->expireOlderThan(5 * 60); + } +} diff --git a/lib/Signaling/Messages.php b/lib/Signaling/Messages.php index 72d228cda..dbe659f56 100644 --- a/lib/Signaling/Messages.php +++ b/lib/Signaling/Messages.php @@ -105,7 +105,7 @@ class Messages { * immediately, but the next polling is only 1 second later and will get the * "new" message. * - * @param $sessionId + * @param string $sessionId * @return array */ public function getAndDeleteMessages($sessionId) { @@ -132,4 +132,18 @@ class Messages { return $messages; } + + /** + * Expires all signaling messages that are too old or invalid + * + * @param int $olderThan + */ + public function expireOlderThan($olderThan) { + $time = $this->time->getTime() - $olderThan; + + $query = $this->db->getQueryBuilder(); + $query->delete('videocalls_signaling') + ->where($query->expr()->lt('timestamp', $query->createNamedParameter($time))); + $query->execute(); + } } |