TFCweb
1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
|
#include <Servidor.h>
Tipus Públics | |
typedef std::shared_ptr< socket_t > | socket_ptr |
Punter a socket. | |
typedef boost::asio::ip::tcp::socket | socket_t |
Socket. |
Mètodes públics | |
Servidor (const Configuracio &c, socket_ptr &s) throw () | |
Servidor (const Servidor &s) throw () | |
~Servidor () | |
void | aten () throw (ErrorHTTP) |
void | interpretar_recurs_dinamic (const RecursDinamic &) |
void | interpretar_ruta (const Ruta &) const |
void | tancar_sessio () |
Mètodes Públics Estàtics | |
static socket_ptr | crea_socket (boost::asio::io_service &iosrv) |
static const std::string & | signatura () |
Obté la signatura del servidor (nom i versió, adreça i port) |
Tipus Privats | |
enum | { MIDA_BUFFER_LECTURA = 1024, TIMEOUT_RECEPCIO = 20*1000 } |
Constants de classe. Més... | |
typedef std::unique_ptr < RespostaHTTP > | resposta_uptr |
Resposta creada dinàmicament. |
Mètodes Privats | |
PeticioHTTP | analitza_peticio () throw (ErrorHTTP) |
resposta_uptr | aten_peticio_escriptura (const Uri &u, PeticioHTTP &p) throw (ErrorHTTP) |
Prepara la resposta a una petició d'escriptura (PUT, DELETE) | |
resposta_uptr | aten_peticio_informacio (const Uri &u, PeticioHTTP &p) throw (ErrorHTTP) |
Prepara la resposta a una petició informativa (TRACE, OPTIONS) | |
resposta_uptr | aten_peticio_lectura (const Uri &u, PeticioHTTP &p) throw (ErrorHTTP) |
Prepara la resposta a una petició de només lectura (GET, HEAD, POST) | |
void | envia_resposta (TipusPeticioHTTP, tfc::RespostaHTTP &) const throw (ErrorEscrivintEnSocket) |
void | extreu_capsaleres (PeticioHTTP &) throw (ErrorHTTP, ErrorRebentDades) |
void | extreu_cos (PeticioHTTP &) throw (ErrorHTTP, ErrorRebentDades) |
size_t | llegeix_socket (std::stringstream &buffer, unsigned int timeout_ms=TIMEOUT_RECEPCIO) throw (ErrorRebentDades) |
Llegeix del socket (bloca amb timeout) i afegeix el contingut a buffer . | |
size_t | llegeix_socket (unsigned int timeout_ms=TIMEOUT_RECEPCIO) throw (ErrorRebentDades) |
Llegeix del socket (bloca amb timeout), utilitza el buffer intern. | |
size_t | omple_buffer (unsigned int timeout_ms=TIMEOUT_RECEPCIO) throw (ErrorRebentDades) |
Llegeix del socket (blocant amb timeout) NOMÉS si no hi ha dades al buffer. |
Atributs Privats | |
std::stringstream | buffer_ |
const Configuracio & | cfg |
socket_ptr | socket_ |
Definició a la línia 71 del fitxer Servidor.h.
|
private |
Resposta creada dinàmicament.
Definició a la línia 114 del fitxer Servidor.h.
typedef std::shared_ptr<socket_t> socket_ptr |
Punter a socket.
Definició a la línia 77 del fitxer Servidor.h.
typedef boost::asio::ip::tcp::socket socket_t |
Socket.
Definició a la línia 75 del fitxer Servidor.h.
|
private |
Constants de classe.
Definició a la línia 149 del fitxer Servidor.h.
Servidor | ( | const Configuracio & | c, |
socket_ptr & | s | ||
) | throw () |
Definició a la línia 386 del fitxer Servidor.cc.
Referències anonymous_namespace{Servidor.cc}::es_connectat().
Definició a la línia 80 del fitxer Servidor.h.
Referències Servidor::socket_.
~Servidor | ( | ) |
Definició a la línia 169 del fitxer Servidor.cc.
|
private |
Definició a la línia 185 del fitxer Servidor.cc.
Referències Uri::autoritat(), tfc::CODI_501, tfc::desconegut, Uri::esquema(), tfc::HTTP_1_0, tfc::HTTP_1_1, tfc::HTTP_1_X, tfc::HTTP_DESCONEGUT, tfc::HTTP_SUPERIOR, tfc::OPTIONS, RFC2068_Sintaxi_URIs::path, anonymous_namespace{Servidor.cc}::split(), Uri::te_ruta_absoluta() i tfc::NomTipusPeticioHTTP::tipus().
void aten | ( | ) | throw (ErrorHTTP) |
Es fa servir a l'hora de produïr erors en què la petició és el problema
Definició a la línia 393 del fitxer Servidor.cc.
Referències MissatgeHTTP< TCos >::afegeix_capsalera(), MissatgeHTTP< TCos >::afegeix_capsaleres(), MissatgeHTTP< TCos >::capsalera(), RespostaHTTP::codi(), ErrorHTTP::codi(), tfc::CODI_200, tfc::CODI_300, tfc::CODI_400, tfc::CODI_401, tfc::CODI_403, tfc::CODI_405, tfc::CODI_408, tfc::CODI_500, tfc::CODI_501, tfc::commit(), tfc::CONNECT, MissatgeHTTP< TCos >::cos(), tfc::data_http(), MissatgeHTTP< TCos >::defineix_cos(), tfc::Base64::descodifica(), tfc::desconegut, tfc::GET, tfc::HEAD, tfc::HTTP_1_1, tfc::HTTP_DESCONEGUT, tfc::log(), tfc::METODE_DELETE, tfc::NivellError, tfc::NivellInfo, tfc::NomTipusPeticioHTTP::nom(), tfc::OPTIONS, RFC2068_Sintaxi_URIs::path, tfc::POST, tfc::PUT, Uri::ruta(), PeticioHTTP::ruta(), Uri::str(), MissatgeHTTP< TCos >::te_cos(), PeticioHTTP::tipus(), tfc::TRACE i PeticioHTTP::versio().
Referenciat a Executor::operator()().
|
private |
Prepara la resposta a una petició d'escriptura (PUT, DELETE)
u | URI de la petició |
p | Petició rebuda |
p.tipus()
és un de [ PUT, METODE_DELETE ] u
(a la configuració, no necessàriament al sistema de fitxers) Definició a la línia 891 del fitxer Servidor.cc.
Referències tfc::CODI_201, tfc::CODI_204, tfc::CODI_400, tfc::CODI_404, tfc::CODI_411, tfc::CODI_500, tfc::CODI_501, tfc::CODI_503, tfc::commit(), tfc::HTTP_1_1, tfc::log(), tfc::METODE_DELETE, tfc::NivellDebug, tfc::NomTipusPeticioHTTP::nom(), RFC2068_Sintaxi_URIs::path i tfc::PUT.
|
private |
Prepara la resposta a una petició informativa (TRACE, OPTIONS)
u | URI de la petició |
p | Petició rebuda |
p.tipus()
és un de [ TRACE, OPTIONS ] u
(a la configuració, no necessàriament al sistema de fitxers) Definició a la línia 992 del fitxer Servidor.cc.
Referències tfc::CODI_200, tfc::CODI_400, tfc::OPTIONS i tfc::TRACE.
|
private |
Prepara la resposta a una petició de només lectura (GET, HEAD, POST)
u | URI de la petició |
p | Petició rebuda |
p.tipus()
és un de [ GET, HEAD, POST ] u
(a la configuració, no necessàriament al sistema de fitxers) Definició a la línia 802 del fitxer Servidor.cc.
Referències tfc::CODI_200, tfc::CODI_400, tfc::CODI_403, tfc::CODI_404, tfc::CODI_500, tfc::commit(), tfc::EXECUCIO, tfc::GET, tfc::HEAD, tfc::HTTP_1_1, tfc::LECTURA, tfc::log(), tfc::NivellDebug, RFC2068_Sintaxi_URIs::path, tfc::portabilitat::permis_execucio(), tfc::POST, Uri::ruta() i anonymous_namespace{Servidor.cc}::te_capsalera().
|
inlinestatic |
Definició a la línia 88 del fitxer Servidor.h.
|
private |
Definició a la línia 1034 del fitxer Servidor.cc.
Referències tfc::commit(), tfc::desconegut, tfc::FrasesEstatHTTP::frase(), tfc::HEAD, tfc::log(), tfc::NivellDebug i tfc::NomTipusPeticioHTTP::tipus().
|
private |
Definició a la línia 335 del fitxer Servidor.cc.
Referències tfc::commit(), tfc::utils::final(), tfc::log(), tfc::NivellDebug, tfc::NivellError, tfc::NomTipusPeticioHTTP::nom() i anonymous_namespace{Servidor.cc}::regex_capsalera().
|
private |
Definició a la línia 650 del fitxer Servidor.cc.
Referències tfc::CODI_100, tfc::CODI_400, tfc::CODI_411, tfc::CODI_413, tfc::CODI_501, tfc::commit(), TransformacioChunked::destransforma(), tfc::FORMAT_INCORRECTE, tfc::HTTP_1_1, tfc::log(), tfc::METODE_DELETE, anonymous_namespace{Servidor.cc}::MIDA_MAXIMA_COS_PETICIO, tfc::NivellDebug, tfc::PUT, anonymous_namespace{Servidor.cc}::te_capsalera() i tfc::TRANSFORMAT.
void interpretar_recurs_dinamic | ( | const RecursDinamic & | ) |
void interpretar_ruta | ( | const Ruta & | ) | const |
|
private |
Llegeix del socket (bloca amb timeout) i afegeix el contingut a buffer
.
buffer | stream en què col·locar les dades llegides |
timeout_ms | Milisegons màxims d'espera |
ErrorRebentDades | Si es produeix un timeout o es tanca la connexió |
buffer
, sense sobre-escriure'l Definició a la línia 282 del fitxer Servidor.cc.
Referenciat a Servidor::llegeix_socket().
|
inlineprivate |
Llegeix del socket (bloca amb timeout), utilitza el buffer intern.
Definició a la línia 178 del fitxer Servidor.h.
Referències Servidor::buffer_ i Servidor::llegeix_socket().
|
private |
Llegeix del socket (blocant amb timeout) NOMÉS si no hi ha dades al buffer.
Definició a la línia 327 del fitxer Servidor.cc.
|
static |
Obté la signatura del servidor (nom i versió, adreça i port)
Definició a la línia 178 del fitxer Servidor.cc.
Referències anonymous_namespace{Servidor.cc}::SIGNATURA.
void tancar_sessio | ( | ) |
Definició a la línia 1099 del fitxer Servidor.cc.
Referenciat a Executor::operator()().
|
private |
Definició a la línia 188 del fitxer Servidor.h.
Referenciat a Servidor::llegeix_socket().
|
private |
Definició a la línia 145 del fitxer Servidor.h.
|
private |
Definició a la línia 146 del fitxer Servidor.h.
Referenciat a Servidor::Servidor().