luckfox-pico-sdk/project/app/ipcweb/ipcweb-backend/ipcweb-env-arm/include/cgicc/HTTPCookie.h
2023-08-08 20:36:47 +08:00

323 lines
9.2 KiB
C++

/* -*-mode:c++; c-file-style: "gnu";-*- */
/*
* $Id: HTTPCookie.h,v 1.10 2014/04/23 20:55:07 sebdiaz Exp $
*
* Copyright (C) 1996 - 2004 Stephen F. Booth <sbooth@gnu.org>
* 2007 Sebastien DIAZ <sebastien.diaz@gmail.com>
* Part of the GNU cgicc library, http://www.gnu.org/software/cgicc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*/
#ifndef _HTTPCOOKIE_H_
#define _HTTPCOOKIE_H_ 1
#ifdef __GNUG__
#pragma interface
#endif
/*! \file HTTPCookie.h
* \brief An HTTP Cookie
*/
#include <string>
#include "CgiDefs.h"
#include "MStreamable.h"
namespace cgicc {
// ============================================================
// Class HTTPCookie
// ============================================================
/*! \class HTTPCookie HTTPCookie.h cgicc/HTTPCookie.h
* \brief An HTTP cookie
*
* An HTTP cookie is a way to maintain state between stateless HTTP
* requests. HTTP cookies consist of name/value pairs, with optional
* comments, domains, and expiration dates. Usually, you will add one
or more HTTPCookie objects to the HTTP headers your script is
* returning. For example, to set a cookie called \c count to \c 1 in
* a normal HTML document:
* \code
* out << HTTPHTMLHeader().setCookie(HTTPCookie("count","1"));
* \endcode
*/
class CGICC_API HTTPCookie : public MStreamable {
public:
/*! \name Constructors and Destructor */
//@{
/*!
* \brief Default Constructor
*
* Create a new, empty HTTPCookie.
*/
HTTPCookie();
/*!
* \brief Create a new HTTPCookie
*
* This is the most commonly-used constructor.
* \param name The name of the cookie.
* \param value The value of the cookie.
*/
HTTPCookie(const std::string &name, const std::string &value);
/*!
* \brief Create a new fully-spefified HTTPCookie
*
*
* \param name The name of the cookie.
* \param value The value of the cookie.
* \param comment Any comment associated with the cookie.
* \param domain The domain for which this cookie is valid- an empty string
* will use the hostname of the server which generated the cookie response.
* If specified, the domain <em>must</em> start with a period('.').
* \param maxAge A number of seconds defining the lifetime of this cookie.
* A value of \c 0 indicates the cookie expires immediately.
* \param path The subset of URLS in a domain for which the cookie is
* valid, for example \c /
* @param secure Specifies whether this is a secure cookie.
*/
HTTPCookie(const std::string &name, const std::string &value,
const std::string &comment, const std::string &domain,
unsigned long maxAge, const std::string &path, bool secure);
/*!
* \brief Copy constructor
*
* Set the name, value, comment, domain, age and path of this cookie
* to those of \c cookie
* \param cookie The HTTPCookie to copy.
*/
HTTPCookie(const HTTPCookie &cookie);
/*!
* \brief Destructor
*
* Delete this HTTPCookie
*/
virtual ~HTTPCookie();
//@}
// ============================================================
/*! \name Overloaded Operators */
//@{
/*!
* \brief Compare two HTTPCookies for equality.
*
* Two HTTPCookie objects are equal if their names, values,
* comments, domains, ages, and paths match.
* \param cookie The HTTPCookie to compare to this one
* \return true if the two HTTPCookies are equal, false otherwise.
*/
bool operator==(const HTTPCookie &cookie) const;
/*!
* \brief Compare two HTTPCookies for inequality.
*
* Two HTTPCookie objects are equal if their names, values,
* comments, domains, ages, and paths match.
* \param cookie The HTTPCookie to compare to this one
* \return false if the two HTTPCookies are equal, true otherwise.
*/
inline bool operator!=(const HTTPCookie &cookie) const {
return !operator==(cookie);
}
#ifdef WIN32
/* Dummy operator for MSVC++ */
inline bool operator<(const HTTPCookie &cookie) const { return false; }
#endif
//@}
// ============================================================
/*! \name Accessor Methods */
//@{
/*!
* \brief Mark this cookie as secure or unsecure.
*
*/
inline void remove() { fRemoved = true; }
/*!
* \brief Mark this cookie as secure or unsecure.
*
* \param removed Set removed status
*/
inline void setRemoved(bool removed) { fRemoved = removed; }
/*!
* \brief Determine if this is a removed cookie.
*
* \return True if this cookie is removed, false if not.
*/
inline bool isRemoved() const { return fRemoved; }
/*!
* \brief Create a new partially-spefified HTTPCookie for deletion
*
*
* \param name The name of the cookie.
* \param domain The domain for which this cookie is valid- an empty string
* will use the hostname of the server which generated the cookie response.
* If specified, the domain <em>must</em> start with a period('.').
* \param path The subset of URLS in a domain for which the cookie is
* valid, for example \c /
* @param secure Specifies whether this is a secure cookie.
*/
HTTPCookie(const std::string &name, const std::string &domain,
const std::string &path, bool secure);
/*!
* \brief Get the name of this cookie.
*
* \return The name of this cookie.
*/
inline std::string getName() const { return fName; }
/*!
* \brief Get the value of this cookie.
*
* \return The value of this cookie.
*/
inline std::string getValue() const { return fValue; }
/*!
* \brief Get the comment of this cookie.
*
* \return The comment of this cookie.
*/
inline std::string getComment() const { return fComment; }
/*!
* \brief Get the domain for which this cookie is valid.
*
* An empty string indicates the hostname of the server which
* generated the cookie response.
* \return The domain of this cookie, or "" if none.
*/
inline std::string getDomain() const { return fDomain; }
/*!
* \brief Get the lifetime of this cookie, in seconds.
*
* \return The lifetime of this cookie, or 0 if none.
*/
inline unsigned long getMaxAge() const { return fMaxAge; }
/*!
* \brief Get the path of this cookie.
*
* This is the subset of URLS in a domain for which the cookie is
* valid, for example \c /
* \return The path of this cookie, or "" if none.
*/
inline std::string getPath() const { return fPath; }
/*!
* \brief Determine if this is a secure cookie.
*
* \return True if this cookie is secure, false if not.
*/
inline bool isSecure() const { return fSecure; }
//@}
// ============================================================
/*! \name Mutator Methods */
//@{
/*!
* \brief Set the name of this cookie.
*
* \param name The name of this cookie.
*/
inline void setName(const std::string &name) { fName = name; }
/*!
* \brief Set the value of this cookie.
*
* \param value The value of this cookie.
*/
inline void setValue(const std::string &value) { fValue = value; }
/*!
* \brief Set the comment of this cookie.
*
* \param comment The comment of this cookie.
*/
inline void setComment(const std::string &comment) { fComment = comment; }
/*!
* \brief Set the domain of this cookie.
*
* An empty string indicates the hostname of the server which
* generated the cookie response. If specified, the domain
* <em>must</em> start with a period('.').
* \param domain The domain of this cookie.
*/
inline void setDomain(const std::string &domain) { fDomain = domain; }
/*!
* \brief Set the lifetime of this cookie, in seconds.
*
* A value of \c 0 indicated the cookie expires immediately
* \param maxAge The lifetime of this cookie, in seconds.
*/
inline void setMaxAge(unsigned long maxAge) { fMaxAge = maxAge; }
/*!
* \brief Set the path of this cookie.
*
* This is the subset of URLS in a domain for which the cookie is
* valid, for example \c /
* \param path The path of this cookie.
*/
inline void setPath(const std::string &path) { fPath = path; }
/*!
* \brief Mark this cookie as secure or unsecure.
*
* \param secure Whether this is a secure cookie.
*/
inline void setSecure(bool secure) { fSecure = secure; }
//@}
// ============================================================
/*! \name Inherited Methods */
//@{
virtual void render(std::ostream &out) const;
//@}
private:
std::string fName;
std::string fValue;
std::string fComment;
std::string fDomain;
unsigned long fMaxAge;
std::string fPath;
bool fSecure;
bool fRemoved;
};
} // namespace cgicc
#endif /* ! _HTTPCOOKIE_H_ */