TFCweb
1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
Pàgina principal
Pàgines Relacionades
Espais de Noms
Classes
Fitxers
Llista dels Fitxers
Membres de Fitxers
src
MissatgeHTTP.h
Veure la documentació d'aquest fitxer.
1
#if !defined(_MISSATGE_HTTP_H_)
2
#define _MISSATGE_HTTP_H_
3
10
/*
11
* Copyright (c) 2012 Toni Corvera
12
*
13
* This file is part of TFCWeb.
14
*
15
* TFCWeb is free software: you can redistribute it and/or modify
16
* it under the terms of the GNU General Public License as published by
17
* the Free Software Foundation, either version 3 of the License, or
18
* (at your option) any later version.
19
*
20
* TFCWeb is distributed in the hope that it will be useful,
21
* but WITHOUT ANY WARRANTY; without even the implied warranty of
22
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
* GNU General Public License for more details.
24
*
25
* You should have received a copy of the GNU General Public License
26
* along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
27
*/
28
29
#include "
CapsaleraHTTP.h
"
30
#include "
portabilitat.h
"
31
32
#include <memory>
33
#include <vector>
34
35
namespace
tfc {
36
37
// FIXME: RFC 2068 també?
38
// L'RFC recomana (no exigeix) enviar les capçaleres amb un ordre determinat
39
// (de més generals a més concretes respecte el contingut del missatge)
40
//
41
// Interessa conservar l'ordre d'inserció, si es fa servir una taula hash
42
// caldrà algún mètode de fer-ho:
43
// - afegir un vector<string> amb l'ordre d'inserció
44
// - utilitzar boost::multi_index
45
// <http://www.boost.org/doc/libs/1_49_0/libs/multi_index/doc/index.html>
46
// <http://stackoverflow.com/questions/1098175/a-stdmap-that-keep-track-of-the-order-of-insertion>
47
51
template
<
typename
TCos>
52
class
MissatgeHTTP
{
53
public
:
54
typedef
std::vector<CapsaleraHTTP>
tipus_llista_capsaleres
;
55
63
std::string
capsalera
(
const
std::string &
nom
,
bool
* definida = 0)
const
;
64
66
virtual
bool
operator==
(
const
MissatgeHTTP<TCos>
& m)
const
{
67
if
(
this
== &m) {
68
return
true
;
69
}
70
return
capsaleres_
== m.
capsaleres_
;
// FIXME: == ó std::equal() ? Test case
71
}
72
77
void
afegeix_capsalera
(
const
std::string &
nom
,
const
std::string & valor);
78
84
template
<
typename
Iterador>
85
void
afegeix_capsaleres
(
const
Iterador & inici,
const
Iterador &
final
);
86
94
const
tipus_llista_capsaleres
&
capsaleres
()
const
{
95
return
capsaleres_
;
96
}
97
102
void
defineix_cos
(std::shared_ptr<TCos>
cos
) {
103
cos_
=
cos
;
104
}
105
112
void
imprimeix_capsaleres
(std::ostream &os,
const
std::string & le =
"\n"
)
const
;
113
118
virtual
std::weak_ptr<TCos>
cos
()
const
{
return
cos_
; }
119
120
bool
te_cos
()
const
{
return
0 !=
cos_
.get(); }
121
126
bool
elimina_capsalera
(
const
std::string &
nom
)
throw
();
127
128
protected
:
129
MissatgeHTTP
()
130
:
cos_
()
131
{
132
// buit
133
}
134
139
MissatgeHTTP
(
const
MissatgeHTTP
& m);
140
private
:
141
147
struct
Impressor;
148
154
tipus_llista_capsaleres
capsaleres_
;
155
156
#if 0
157
// L'RFC no obliga però recomana ordenar les capçaleres (de més a menys generals)
158
// amb aquesta intenció interessa mantenir l'ordre d'inserció. Per a fer-ho
159
// cap utilitzar un contenidor addicional (ni map ni unordered_map mantenen l'ordre
160
// d'inserció), o un dels contenidors multi-clau de boost
167
std::unordered_map<std::string, CapsaleraHTTP>
capsaleres_
;
173
std::vector<std::string> ordre_capsaleres_;
174
#endif
175
176
std::shared_ptr<TCos>
cos_
;
177
};
178
179
}
// ns tfc
180
181
// Implementació (inclosa directament per ser una classe template)
182
#include "MissatgeHTTP.hxx"
183
184
#endif // _MISSATGE_HTTP_H_
185
186
// vim:set ts=4 et ai: //
Generat a Dl Jun 17 2013 20:07:39 per a TFCweb per
1.8.1.2