| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /**
- @file
- @author Stefan Frings
- */
- #include "httpsession.h"
- #include <QDateTime>
- #include <QUuid>
- using namespace stefanfrings;
- 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: (constructor) new session %s with refCount=1",dataPtr->id.constData());
- #endif
- }
- else
- {
- dataPtr=nullptr;
- }
- }
- HttpSession::HttpSession(const HttpSession& other)
- {
- dataPtr=other.dataPtr;
- if (dataPtr)
- {
- dataPtr->lock.lockForWrite();
- dataPtr->refCount++;
- #ifdef SUPERVERBOSE
- qDebug("HttpSession: (constructor) copy session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);
- #endif
- dataPtr->lock.unlock();
- }
- }
- HttpSession& HttpSession::operator= (const HttpSession& other)
- {
- HttpSessionData* oldPtr=dataPtr;
- dataPtr=other.dataPtr;
- if (dataPtr)
- {
- dataPtr->lock.lockForWrite();
- dataPtr->refCount++;
- #ifdef SUPERVERBOSE
- qDebug("HttpSession: (operator=) session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);
- #endif
- dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();
- dataPtr->lock.unlock();
- }
- if (oldPtr)
- {
- int refCount;
- oldPtr->lock.lockForWrite();
- refCount=--oldPtr->refCount;
- #ifdef SUPERVERBOSE
- qDebug("HttpSession: (operator=) session %s refCount=%i",oldPtr->id.constData(),oldPtr->refCount);
- #endif
- oldPtr->lock.unlock();
- if (refCount==0)
- {
- qDebug("HttpSession: deleting old data");
- delete oldPtr;
- }
- }
- return *this;
- }
- HttpSession::~HttpSession()
- {
- if (dataPtr) {
- int refCount;
- dataPtr->lock.lockForWrite();
- refCount=--dataPtr->refCount;
- #ifdef SUPERVERBOSE
- qDebug("HttpSession: (destructor) session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);
- #endif
- dataPtr->lock.unlock();
- if (refCount==0)
- {
- qDebug("HttpSession: deleting data");
- delete dataPtr;
- }
- }
- }
- const QByteArray& HttpSession::getId() const
- {
- static const QByteArray nullId;
- return (dataPtr) ? dataPtr->id : nullId;
- }
- bool HttpSession::isNull() const {
- return dataPtr==nullptr;
- }
- 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.lockForWrite();
- dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();
- dataPtr->lock.unlock();
- }
- }
|