mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-26 02:20:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|   @file
 | |
|   @author Stefan Frings
 | |
| */
 | |
| 
 | |
| #include "httpsession.h"
 | |
| #include <QDateTime>
 | |
| #include <QUuid>
 | |
| 
 | |
| using namespace qtwebapp;
 | |
| 
 | |
| HttpSession::HttpSession(bool canStore)
 | |
| {
 | |
|     if (canStore)
 | |
|     {
 | |
|         dataPtr=new HttpSessionData();
 | |
|         dataPtr->refCount=1;
 | |
|         dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();
 | |
|         dataPtr->id=QUuid::createUuid().toString().toLocal8Bit();
 | |
| #ifdef SUPERVERBOSE
 | |
|         qDebug("HttpSession: created new session data with id %s",dataPtr->id.data());
 | |
| #endif
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         dataPtr=0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| HttpSession::HttpSession(const HttpSession& other)
 | |
| {
 | |
|     dataPtr=other.dataPtr;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForWrite();
 | |
|         dataPtr->refCount++;
 | |
| #ifdef SUPERVERBOSE
 | |
|         qDebug("HttpSession: refCount of %s is %i",dataPtr->id.data(),dataPtr->refCount);
 | |
| #endif
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
| }
 | |
| 
 | |
| HttpSession& HttpSession::operator= (const HttpSession& other)
 | |
| {
 | |
|     if (this == &other) {
 | |
|         return *this;
 | |
|     }
 | |
|     HttpSessionData* oldPtr=dataPtr;
 | |
|     dataPtr=other.dataPtr;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForWrite();
 | |
|         dataPtr->refCount++;
 | |
| #ifdef SUPERVERBOSE
 | |
|         qDebug("HttpSession: refCount of %s is %i",dataPtr->id.data(),dataPtr->refCount);
 | |
| #endif
 | |
|         dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
|     if (oldPtr)
 | |
|     {
 | |
|         int refCount;
 | |
|         oldPtr->lock.lockForRead();
 | |
|         refCount=oldPtr->refCount--;
 | |
| #ifdef SUPERVERBOSE
 | |
|         qDebug("HttpSession: refCount of %s is %i",oldPtr->id.data(),oldPtr->refCount);
 | |
| #endif
 | |
|         oldPtr->lock.unlock();
 | |
|         if (refCount==0)
 | |
|         {
 | |
|             delete oldPtr;
 | |
|         }
 | |
|     }
 | |
|     return *this;
 | |
| }
 | |
| 
 | |
| HttpSession::~HttpSession()
 | |
| {
 | |
|     if (dataPtr) {
 | |
|         int refCount;
 | |
|         dataPtr->lock.lockForRead();
 | |
|         refCount=--dataPtr->refCount;
 | |
| #ifdef SUPERVERBOSE
 | |
|         qDebug("HttpSession: refCount of %s is %i",dataPtr->id.data(),dataPtr->refCount);
 | |
| #endif
 | |
|         dataPtr->lock.unlock();
 | |
|         if (refCount==0)
 | |
|         {
 | |
|             qDebug("HttpSession: deleting data");
 | |
|             delete dataPtr;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| QByteArray HttpSession::getId() const
 | |
| {
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         return dataPtr->id;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         return QByteArray();
 | |
|     }
 | |
| }
 | |
| 
 | |
| bool HttpSession::isNull() const {
 | |
|     return dataPtr==0;
 | |
| }
 | |
| 
 | |
| void HttpSession::set(const QByteArray& key, const QVariant& value)
 | |
| {
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForWrite();
 | |
|         dataPtr->values.insert(key,value);
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void HttpSession::remove(const QByteArray& key)
 | |
| {
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForWrite();
 | |
|         dataPtr->values.remove(key);
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
| }
 | |
| 
 | |
| QVariant HttpSession::get(const QByteArray& key) const
 | |
| {
 | |
|     QVariant value;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForRead();
 | |
|         value=dataPtr->values.value(key);
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| bool HttpSession::contains(const QByteArray& key) const
 | |
| {
 | |
|     bool found=false;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForRead();
 | |
|         found=dataPtr->values.contains(key);
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
|     return found;
 | |
| }
 | |
| 
 | |
| QMap<QByteArray,QVariant> HttpSession::getAll() const
 | |
| {
 | |
|     QMap<QByteArray,QVariant> values;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForRead();
 | |
|         values=dataPtr->values;
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
|     return values;
 | |
| }
 | |
| 
 | |
| qint64 HttpSession::getLastAccess() const
 | |
| {
 | |
|     qint64 value=0;
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForRead();
 | |
|         value=dataPtr->lastAccess;
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| 
 | |
| void HttpSession::setLastAccess()
 | |
| {
 | |
|     if (dataPtr)
 | |
|     {
 | |
|         dataPtr->lock.lockForRead();
 | |
|         dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();
 | |
|         dataPtr->lock.unlock();
 | |
|     }
 | |
| }
 |