Menu

[r754]: / framework / branches / refactoring / http_cookie.cpp  Maximize  Restore  History

Download this file

118 lines (101 with data), 3.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#define CPPCMS_SOURCE
#include "http_cookie.h"
#include "http_protocol.h"
#include "cppcms_error.h"
#include <sstream>
#include <locale>
namespace cppcms { namespace http {
struct cookie::data { };
std::string cookie::name() const { return name_; }
void cookie::name(std::string v) { name_=v; }
std::string cookie::value() const { return value_; }
void cookie::value(std::string v) { value_=v; }
std::string cookie::path() const { return path_; }
void cookie::path(std::string v) { path_=v; }
std::string cookie::domain() const { return domain_; }
void cookie::domain(std::string v) { domain_=v; }
std::string cookie::comment() const { return comment_; }
void cookie::comment(std::string v) { comment_=v; }
void cookie::max_age(unsigned age)
{
has_age_=1;
max_age_=age;
}
void cookie::browser_age()
{
has_age_=0;
}
bool cookie::secure() const { return secure_; }
void cookie::secure(bool secure) { secure_ = secure ? 1: 0; }
void cookie::write(std::ostream &out) const
{
if(name_.empty())
throw cppcms_error("Cookie's name is not defined");
out<<"Set-Cookie:"<<name_<<'=';
if(!value_.empty() && protocol::tocken(value_.begin(),value_.end())==value_.end())
out<<value_;
else
out<<protocol::quote(value_);
if(!comment_.empty())
out<<"; Comment="<<protocol::quote(comment_);
if(!domain_.empty())
out<<"; Domain="<<domain_;
if(has_age_) {
std::ostringstream ss;
ss.imbue(std::locale("C"));
ss<<max_age_;
out<<"; Max-Age="<<ss.str();
}
if(!path_.empty())
out<<"; Path="<<path_;
if(secure_)
out<<"; Secure";
out<<"; Version=1";
}
std::ostream &operator<<(std::ostream &out,cookie const &c)
{
c.write(out);
return out;
}
cookie::cookie(std::string name,std::string value) :
name_(name), value_(value), secure_(0), has_age_(0)
{
}
cookie::cookie(std::string name,std::string value,unsigned age) :
name_(name), value_(value), max_age_(age), secure_(0), has_age_(1)
{
}
cookie::cookie(std::string name,std::string value,unsigned age,std::string path,std::string domain,std::string comment) :
name_(name), value_(value), path_(path),domain_(domain),comment_(comment),max_age_(age), secure_(0), has_age_(1)
{
}
cookie::cookie(std::string name,std::string value,std::string path,std::string domain,std::string comment) :
name_(name), value_(value), path_(path),domain_(domain),comment_(comment), secure_(0), has_age_(0)
{
}
cookie::cookie(cookie const &other) :
name_(other.name_),
value_(other.value_),
path_(other.path_),
domain_(other.domain_),
comment_(other.comment_),
max_age_(other.max_age_),
secure_(other.secure_),
has_age_(other.has_age_)
{
}
cookie const &cookie::operator=(cookie const &other)
{
name_=other.name_;
value_=other.value_;
path_=other.path_;
domain_=other.domain_;
comment_=other.comment_;
max_age_=other.max_age_;
secure_=other.secure_;
has_age_=other.has_age_;
return *this;
}
cookie::cookie() : secure_(0), has_age_(0) {}
cookie::~cookie() {}
} } // cppcms::http
MongoDB Logo MongoDB