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
PeticioHTTP.cc
Veure la documentació d'aquest fitxer.
1
8
/*
9
* Copyright (c) 2012 Toni Corvera
10
*
11
* This file is part of TFCWeb.
12
*
13
* TFCWeb is free software: you can redistribute it and/or modify
14
* it under the terms of the GNU General Public License as published by
15
* the Free Software Foundation, either version 3 of the License, or
16
* (at your option) any later version.
17
*
18
* TFCWeb is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
22
*
23
* You should have received a copy of the GNU General Public License
24
* along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
25
*/
26
27
#include "
PeticioHTTP.h
"
28
29
#include <boost/assign.hpp>
// boost::assign::map_list_of
30
31
using namespace
boost;
32
using namespace
std;
33
using namespace
tfc;
34
35
namespace
{
36
37
const
map<TipusPeticioHTTP, string>
NOMS_TIPUS
= assign::map_list_of
38
(
GET
,
"GET"
)
39
(
POST
,
"POST"
)
40
(
HEAD
,
"HEAD"
)
41
(
OPTIONS
,
"OPTIONS"
)
42
(
TRACE
,
"TRACE"
)
43
(
PUT
,
"PUT"
)
44
(
METODE_DELETE
,
"DELETE"
)
45
(
CONNECT
,
"CONNECT"
)
46
(
desconegut
,
"desconegut"
);
47
}
// ns <anònim>
48
49
namespace
tfc {
50
51
namespace
NomTipusPeticioHTTP {
52
53
// NOMS_TIPUS és constant, per tant l'operador [] no es pot fer
54
// servir directament, complicant-ne l'accés
55
const
string
&
nom
(
TipusPeticioHTTP
tipus
) {
56
return
NOMS_TIPUS.find(tipus)->second;
57
}
58
59
TipusPeticioHTTP
tipus
(
const
string
&
nom
)
throw
(
ErrorMetodeDesconegut
) {
60
TipusPeticioHTTP
tipus
=
desconegut
;
61
// RFC 2616, 5.1.1: "The method is case-sensitive."
62
if
(
"GET"
==
nom
) {
63
tipus =
GET
;
64
}
65
else
if
(
"POST"
==
nom
) {
66
tipus =
POST
;
67
}
68
else
if
(
"HEAD"
==
nom
) {
69
tipus =
HEAD
;
70
}
71
else
if
(
"OPTIONS"
==
nom
) {
72
tipus =
OPTIONS
;
73
}
74
else
if
(
"TRACE"
==
nom
) {
75
tipus =
TRACE
;
76
}
77
else
if
(
"PUT"
==
nom
) {
78
tipus =
PUT
;
79
}
80
else
if
(
"DELETE"
==
nom
) {
81
tipus =
METODE_DELETE
;
82
}
83
else
if
(
"CONNECT"
==
nom
) {
84
tipus =
CONNECT
;
85
}
86
else
{
87
throw
ErrorMetodeDesconegut
(
"El mètode `"
+
nom
+
"` és desconegut per aquest servidor"
);
88
}
89
return
tipus
;
90
}
91
92
}
// ns NomTipusPeticioHTTP
93
94
// Impressió de VersioHTTP
95
ostream&
operator<<
(ostream & os,
VersioHTTP
v) {
96
string
s;
97
s.reserve(8);
98
switch
(v) {
99
case
HTTP_DESCONEGUT
: s =
"HTTP/?.?"
;
break
;
100
case
HTTP_0_9
: s =
"HTTP/0.9"
;
break
;
101
case
HTTP_1_0
: s =
"HTTP/1.0"
;
break
;
102
case
HTTP_1_1
: s =
"HTTP/1.1"
;
break
;
103
case
HTTP_1_X
: s =
"HTTP/1.x"
;
break
;
104
case
HTTP_SUPERIOR
: s =
"HTTP/x.y"
;
break
;
105
default
:
// Si passa probablement v no està inicialitzat
106
assert( !
"Valor de VersioHTTP fora de rang"
);
107
s =
"HTTP/?.?"
;
108
break
;
109
}
110
111
return
os << s;
112
}
113
114
}
// ns tfc
115
116
// vim:set ts=4 et ai: //
Generat a Dl Jun 17 2013 20:07:39 per a TFCweb per
1.8.1.2