mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-23 10:05:46 -05:00
265 lines
4.9 KiB
C++
265 lines
4.9 KiB
C++
/**
|
|
@file
|
|
@author Stefan Frings
|
|
*/
|
|
|
|
#include "httpcookie.h"
|
|
|
|
using namespace qtwebapp;
|
|
|
|
HttpCookie::HttpCookie()
|
|
{
|
|
version=1;
|
|
maxAge=0;
|
|
secure=false;
|
|
httpOnly=false;
|
|
}
|
|
|
|
HttpCookie::HttpCookie(const QByteArray name, const QByteArray value, const int maxAge, const QByteArray path, const QByteArray comment, const QByteArray domain, const bool secure, const bool httpOnly)
|
|
{
|
|
this->name=name;
|
|
this->value=value;
|
|
this->maxAge=maxAge;
|
|
this->path=path;
|
|
this->comment=comment;
|
|
this->domain=domain;
|
|
this->secure=secure;
|
|
this->httpOnly=httpOnly;
|
|
this->version=1;
|
|
}
|
|
|
|
HttpCookie::HttpCookie(const QByteArray source)
|
|
{
|
|
version=1;
|
|
maxAge=0;
|
|
secure=false;
|
|
QList<QByteArray> list=splitCSV(source);
|
|
foreach(QByteArray part, list)
|
|
{
|
|
|
|
// Split the part into name and value
|
|
QByteArray name;
|
|
QByteArray value;
|
|
int posi=part.indexOf('=');
|
|
if (posi)
|
|
{
|
|
name=part.left(posi).trimmed();
|
|
value=part.mid(posi+1).trimmed();
|
|
}
|
|
else
|
|
{
|
|
name=part.trimmed();
|
|
value="";
|
|
}
|
|
|
|
// Set fields
|
|
if (name=="Comment")
|
|
{
|
|
comment=value;
|
|
}
|
|
else if (name=="Domain")
|
|
{
|
|
domain=value;
|
|
}
|
|
else if (name=="Max-Age")
|
|
{
|
|
maxAge=value.toInt();
|
|
}
|
|
else if (name=="Path")
|
|
{
|
|
path=value;
|
|
}
|
|
else if (name=="Secure")
|
|
{
|
|
secure=true;
|
|
}
|
|
else if (name=="HttpOnly")
|
|
{
|
|
httpOnly=true;
|
|
}
|
|
else if (name=="Version")
|
|
{
|
|
version=value.toInt();
|
|
}
|
|
else {
|
|
if (this->name.isEmpty())
|
|
{
|
|
this->name=name;
|
|
this->value=value;
|
|
}
|
|
else
|
|
{
|
|
qWarning("HttpCookie::HttpCookie: Ignoring unknown %s=%s",name.data(),value.data());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QByteArray HttpCookie::toByteArray() const
|
|
{
|
|
QByteArray buffer(name);
|
|
buffer.append('=');
|
|
buffer.append(value);
|
|
if (!comment.isEmpty())
|
|
{
|
|
buffer.append("; Comment=");
|
|
buffer.append(comment);
|
|
}
|
|
if (!domain.isEmpty())
|
|
{
|
|
buffer.append("; Domain=");
|
|
buffer.append(domain);
|
|
}
|
|
if (maxAge!=0)
|
|
{
|
|
buffer.append("; Max-Age=");
|
|
buffer.append(QByteArray::number(maxAge));
|
|
}
|
|
if (!path.isEmpty())
|
|
{
|
|
buffer.append("; Path=");
|
|
buffer.append(path);
|
|
}
|
|
if (secure) {
|
|
buffer.append("; Secure");
|
|
}
|
|
if (httpOnly) {
|
|
buffer.append("; HttpOnly");
|
|
}
|
|
buffer.append("; Version=");
|
|
buffer.append(QByteArray::number(version));
|
|
return buffer;
|
|
}
|
|
|
|
void HttpCookie::setName(const QByteArray name)
|
|
{
|
|
this->name=name;
|
|
}
|
|
|
|
void HttpCookie::setValue(const QByteArray value)
|
|
{
|
|
this->value=value;
|
|
}
|
|
|
|
void HttpCookie::setComment(const QByteArray comment)
|
|
{
|
|
this->comment=comment;
|
|
}
|
|
|
|
void HttpCookie::setDomain(const QByteArray domain)
|
|
{
|
|
this->domain=domain;
|
|
}
|
|
|
|
void HttpCookie::setMaxAge(const int maxAge)
|
|
{
|
|
this->maxAge=maxAge;
|
|
}
|
|
|
|
void HttpCookie::setPath(const QByteArray path)
|
|
{
|
|
this->path=path;
|
|
}
|
|
|
|
void HttpCookie::setSecure(const bool secure)
|
|
{
|
|
this->secure=secure;
|
|
}
|
|
|
|
void HttpCookie::setHttpOnly(const bool httpOnly)
|
|
{
|
|
this->httpOnly=httpOnly;
|
|
}
|
|
|
|
QByteArray HttpCookie::getName() const
|
|
{
|
|
return name;
|
|
}
|
|
|
|
QByteArray HttpCookie::getValue() const
|
|
{
|
|
return value;
|
|
}
|
|
|
|
QByteArray HttpCookie::getComment() const
|
|
{
|
|
return comment;
|
|
}
|
|
|
|
QByteArray HttpCookie::getDomain() const
|
|
{
|
|
return domain;
|
|
}
|
|
|
|
int HttpCookie::getMaxAge() const
|
|
{
|
|
return maxAge;
|
|
}
|
|
|
|
QByteArray HttpCookie::getPath() const
|
|
{
|
|
return path;
|
|
}
|
|
|
|
bool HttpCookie::getSecure() const
|
|
{
|
|
return secure;
|
|
}
|
|
|
|
bool HttpCookie::getHttpOnly() const
|
|
{
|
|
return httpOnly;
|
|
}
|
|
|
|
int HttpCookie::getVersion() const
|
|
{
|
|
return version;
|
|
}
|
|
|
|
QList<QByteArray> HttpCookie::splitCSV(const QByteArray source)
|
|
{
|
|
bool inString=false;
|
|
QList<QByteArray> list;
|
|
QByteArray buffer;
|
|
for (int i=0; i<source.size(); ++i)
|
|
{
|
|
char c=source.at(i);
|
|
if (inString==false)
|
|
{
|
|
if (c=='\"')
|
|
{
|
|
inString=true;
|
|
}
|
|
else if (c==';')
|
|
{
|
|
QByteArray trimmed=buffer.trimmed();
|
|
if (!trimmed.isEmpty())
|
|
{
|
|
list.append(trimmed);
|
|
}
|
|
buffer.clear();
|
|
}
|
|
else
|
|
{
|
|
buffer.append(c);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (c=='\"')
|
|
{
|
|
inString=false;
|
|
}
|
|
else {
|
|
buffer.append(c);
|
|
}
|
|
}
|
|
}
|
|
QByteArray trimmed=buffer.trimmed();
|
|
if (!trimmed.isEmpty())
|
|
{
|
|
list.append(trimmed);
|
|
}
|
|
return list;
|
|
}
|