linphone-iphone/src/utils/background-task.h
Simon Morlat 18696f2ad2 Fix background task usage when receiving a REFER to join a chatroom.
Add a timeout, because on Android wake locks have no limit in time. The timeout will secure that whatever happens, the wake lock is always released after a reasonable time.
2018-03-09 22:14:05 +01:00

70 lines
2 KiB
C++

/*
* background-task.h
* Copyright (C) 2010-2018 Belledonne Communications SARL
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef _L_BACKGROUND_TASK_H_
#define _L_BACKGROUND_TASK_H_
#include <string>
#include "linphone/utils/general.h"
#include "sal/sal.h"
// =============================================================================
LINPHONE_BEGIN_NAMESPACE
class Sal;
class Core;
class BackgroundTask {
public:
BackgroundTask() : mTimeout(NULL), mSal(NULL), mId(0){}
BackgroundTask (const std::string &name) : mTimeout(NULL), mSal(NULL), mName(name), mId(0) {}
virtual ~BackgroundTask () {
stop();
}
void setName (const std::string &name) {
mName = name;
}
/**
* Start a long running task for at most max_duration_seconds, after which it is automatically terminated
*/
void start(const std::shared_ptr<Core> &core, int max_duration_seconds = 15*60); /*15 mn by default, like on iOS*/
void stop();
const std::string &getName () const {
return mName;
}
protected:
virtual void handleTimeout ();
private:
static int sHandleSalTimeout(void *data, unsigned int events);
static void sHandleTimeout(void *data);
belle_sip_source_t *mTimeout;
Sal *mSal;
std::string mName;
unsigned long mId = 0;
void handleSalTimeout();
};
LINPHONE_END_NAMESPACE
#endif // ifndef _L_BACKGROUND_TASK_H_