httpmessage.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2005 Tommi Maekitalo
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 
29 
30 #ifndef TNT_HTTPMESSAGE_H
31 #define TNT_HTTPMESSAGE_H
32 
33 #include <tnt/messageheader.h>
34 #include <tnt/httpheader.h>
35 #include <tnt/cookie.h>
36 #include <time.h>
37 
38 namespace tnt
39 {
42  {
43  public:
45 
46  private:
47  unsigned short _majorVersion;
48  unsigned short _minorVersion;
49 
50  protected:
53 
54  public:
56  : _majorVersion(1),
57  _minorVersion(0)
58  { }
59  virtual ~HttpMessage()
60  { }
61 
63  virtual void clear();
64 
67  bool hasHeader(const char* key) const { return header.hasHeader(key); }
68  bool hasHeader(const std::string& key) const { return header.hasHeader(key); }
70 
73  const char* getHeader(const char* key, const char* def = "") const;
74 
76  unsigned short getMajorVersion() const
77  { return _majorVersion; }
78 
80  unsigned short getMinorVersion() const
81  { return _minorVersion; }
82 
84  void setVersion(unsigned short majorVersion, unsigned short minorVersion)
85  { _majorVersion = majorVersion; _minorVersion = minorVersion; }
86 
92  { return header.begin(); }
93 
96  { return header.end(); }
97 
99  void setHeader(const std::string& key, const std::string& value, bool replace = true)
100  { header.setHeader(key, value, replace); }
101 
103  void removeHeader(const std::string& key)
104  { header.removeHeader(key); }
105 
107  std::string dumpHeader() const;
108 
110  void dumpHeader(std::ostream& out) const;
111 
114  static std::string htdate(time_t t);
115  static std::string htdate(const struct ::tm* tm);
116 
117  // date buffer must be at least 30 bytes long
118  static void htdate(char* date, time_t t);
119  static void htdate(char* date, const struct ::tm* tm);
121 
123  static std::string htdateCurrent();
126  static void htdateCurrent(char* current);
127 
128  // TODO: Documentation revision: Is this meant to check for absolute URLs?
133  static bool checkUrl(const std::string& url);
134  };
135 }
136 
137 #endif // TNT_HTTPMESSAGE_H
138