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
CosResposta.h
Veure la documentació d'aquest fitxer.
1
#if !defined(_COS_RESPOSTA_H_)
2
#define _COS_RESPOSTA_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 "
CodisEstatHTTP.h
"
30
#include "
Excepcions.h
"
31
#include "
Servidor.h
"
32
#include "
Transformacions.h
"
33
34
#include <memory>
35
#include <string>
36
#include <vector>
37
#include <boost/asio.hpp>
38
39
namespace
tfc {
40
41
#if 0
42
51
enum
ContentEncoding {
52
CE_CAP = 0,
53
CE_IDENTITY,
54
CE_GZIP,
55
CE_COMPRESS,
56
CE_DEFLATE
57
};
58
68
enum
TransferEncoding {
69
TE_CAP = 0,
70
TE_IDENTITY,
71
TE_CHUNKED,
72
TE_GZIP,
73
TE_COMPRESS,
74
TE_DEFLATE
75
};
76
#endif
77
81
class
CosResposta
{
82
public
:
83
typedef
std::pair<std::string, std::string>
tipus_capsalera
;
84
typedef
std::vector<tipus_capsalera>
tipus_capsaleres
;
85
typedef
std::shared_ptr<Transformacio>
transformacio_ptr
;
86
typedef
boost::asio::ip::tcp::socket
socket_tcp
;
87
91
explicit
CosResposta
(
const
PeticioHTTP
&
peticio
)
92
:
peticio_
(peticio),
93
deflate_ok_
(false),
chunked_ok_
(false),
94
trans_
()
95
{
96
determina_codificacions
();
97
}
98
99
CosResposta
(
const
CosResposta
& cr)
100
:
peticio_
(cr.
peticio_
),
101
deflate_ok_
(cr.
deflate_ok_
),
102
chunked_ok_
(cr.
chunked_ok_
),
103
te_
(cr.
te_
),
ce_
(cr.
ce_
),
104
trans_
(cr.
trans_
)
105
{
106
107
}
108
109
CosResposta
&
operator=
(
const
CosResposta
& cr) {
110
peticio_
= cr.
peticio_
;
111
deflate_ok_
= cr.
deflate_ok_
;
112
chunked_ok_
= cr.
chunked_ok_
;
113
te_
= cr.
te_
;
114
ce_
= cr.
ce_
;
115
trans_
= cr.
trans_
;
116
return
*
this
;
117
}
118
119
virtual
~CosResposta
() {
120
// buit
121
}
122
128
virtual
void
envia
(
socket_tcp
& socket)
const
129
throw
(std::runtime_error) = 0;
130
135
virtual
void
envia_eom
(
socket_tcp
& socket)
const
throw
(
ErrorEscrivintEnSocket
);
136
142
virtual
tipus_capsaleres
capsaleres
()
const
;
143
156
virtual
bool
pot_generar_capsaleres
()
const
{
157
return
false
;
158
}
159
160
const
PeticioHTTP
&
peticio
()
const
{
return
peticio_
; }
161
162
protected
:
171
virtual
size_t
envia
(
socket_tcp
& socket,
172
const
std::string & buffer)
const
throw
(
ErrorEscrivintEnSocket
);
173
177
size_t
envia_literal
(
socket_tcp
& socket,
const
std::string & buffer)
178
const
throw
(
ErrorEscrivintEnSocket
);
179
180
182
bool
deflate_ok
()
const
{
return
deflate_ok_
; }
183
185
bool
chunked_ok
()
const
{
return
chunked_ok_
; }
186
190
transformacio_ptr
transformacio
()
const
{
return
trans_
; }
191
193
const
std::string&
content_encoding
()
const
{
return
ce_
; }
194
196
const
std::string&
transfer_encoding
()
const
{
return
te_
; }
197
private
:
199
void
determina_codificacions
();
200
201
PeticioHTTP
peticio_
;
202
bool
deflate_ok_
;
203
bool
chunked_ok_
;
204
std::string
te_
,
205
ce_
;
206
transformacio_ptr
trans_
;
207
};
208
209
class
RecursDinamic
:
public
CosResposta
{
// FIXME: Implementació temporal
210
public
:
211
explicit
RecursDinamic
(
const
PeticioHTTP
& p)
212
:
CosResposta
(p)
213
{
214
// buit
215
}
216
RecursDinamic
(
const
RecursDinamic
& rd)
217
:
CosResposta
(rd)
218
{
219
// buit
220
}
221
RecursDinamic
&
operator=
(
const
RecursDinamic
& rd) {
222
CosResposta::operator=
(rd);
223
return
*
this
;
224
}
225
230
virtual
std::string
html
()
const
= 0;
231
232
virtual
void
envia
(
socket_tcp
& socket)
const
233
throw
(std::runtime_error)
234
{
235
this->
envia
(socket,
html
());
236
}
237
protected
:
238
using
CosResposta::envia
;
// envia(socket, string)
239
};
240
241
class
CosPaginaError
:
public
RecursDinamic
{
242
public
:
243
CosPaginaError
(
const
PeticioHTTP
& p,
CodiEstatHTTP
error,
const
std::string & missatge)
244
:
RecursDinamic
(p),
error_
(error),
missatge_
(missatge),
cache_
()
245
{
246
// buit
247
}
248
CosPaginaError
(
const
CosPaginaError
& cpe)
249
:
RecursDinamic
(cpe),
error_
(cpe.
error_
),
missatge_
(cpe.
missatge_
),
cache_
(cpe.
cache_
)
250
{
251
// buit
252
}
253
254
virtual
tipus_capsaleres
capsaleres
()
const
;
255
virtual
std::string
html
()
const
;
256
private
:
257
CosPaginaError
&
operator=
(
const
CosPaginaError
& cpe) {
258
throw
ErrorNoImplementat
(
FITXER_I_LINIA_
);
259
}
260
const
CodiEstatHTTP
error_
;
261
const
std::string
missatge_
;
262
mutable
std::string
cache_
;
263
};
264
268
class
CosTextual
:
public
RecursDinamic
{
269
public
:
270
CosTextual
(
const
PeticioHTTP
& p,
const
std::string & text)
271
:
RecursDinamic
(p),
text_
(text)
272
{
273
// buit
274
}
275
CosTextual
(
const
CosTextual
& c)
276
:
RecursDinamic
(c),
text_
(c.
text_
)
277
{
278
// buit
279
}
280
281
virtual
string
html
()
const
{
return
text_
; }
282
private
:
283
CosTextual
&
operator=
(
const
CosTextual
& c) {
284
throw
ErrorNoImplementat
(
FITXER_I_LINIA_
);
285
}
286
const
std::string
text_
;
287
};
288
289
}
// ns tfc
290
291
#endif // _COS_RESPOSTA_H_
292
293
// vim:set ts=4 et ai: //
Generat a Dl Jun 17 2013 20:07:39 per a TFCweb per
1.8.1.2