TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
Tipus Públics | Mètodes públics | Mètodes Públics Estàtics | Tipus Privats | Mètodes Privats | Atributs Privats | Llista de tots els membres
Referència de la Classe Servidor

#include <Servidor.h>

Tipus Públics

typedef std::shared_ptr< socket_tsocket_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 Configuraciocfg
socket_ptr socket_

Descripció Detallada

Remarca
Els sockets no es poden copiar lliurement, i han de sobreviure mentre estiguin oberts, per això cal fer servir algun tipus de punter
Mireu també
http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/tutorial/tutdaytime3.html

Definició a la línia 71 del fitxer Servidor.h.

Documentació de les Definicions de Tipus Membre

typedef std::unique_ptr<RespostaHTTP> resposta_uptr
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.

Documentació de les Enumeracions Membre

anonymous enum
private

Constants de classe.

Valors de les Enumeracions:
MIDA_BUFFER_LECTURA 
TIMEOUT_RECEPCIO 

Definició a la línia 149 del fitxer Servidor.h.

Documentació del Constructor i el Destructor

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().

Servidor ( const Servidor s) throw ()
inline

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.

Documentació de les Funcions Membre

PeticioHTTP analitza_peticio ( ) throw (ErrorHTTP)
private
void aten ( ) throw (ErrorHTTP)
Servidor::resposta_uptr aten_peticio_escriptura ( const Uri u,
PeticioHTTP p 
) throw (ErrorHTTP)
private

Prepara la resposta a una petició d'escriptura (PUT, DELETE)

Paràmetres
uURI de la petició
pPetició rebuda
Precondició
p.tipus() és un de [ PUT, METODE_DELETE ]
Es permet l'accés d'escriptura de 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.

Servidor::resposta_uptr aten_peticio_informacio ( const Uri u,
PeticioHTTP p 
) throw (ErrorHTTP)
private

Prepara la resposta a una petició informativa (TRACE, OPTIONS)

Paràmetres
uURI de la petició
pPetició rebuda
Precondició
p.tipus() és un de [ TRACE, OPTIONS ]
Es permet l'accés de lectura de 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.

Servidor::resposta_uptr aten_peticio_lectura ( const Uri u,
PeticioHTTP p 
) throw (ErrorHTTP)
private

Prepara la resposta a una petició de només lectura (GET, HEAD, POST)

Paràmetres
uURI de la petició
pPetició rebuda
Precondició
p.tipus() és un de [ GET, HEAD, POST ]
Es permet l'accés de lectura de 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().

static socket_ptr crea_socket ( boost::asio::io_service &  iosrv)
inlinestatic

Definició a la línia 88 del fitxer Servidor.h.

void envia_resposta ( TipusPeticioHTTP  tipus,
tfc::RespostaHTTP r 
) const throw (ErrorEscrivintEnSocket)
private
void extreu_capsaleres ( PeticioHTTP peticio) throw (ErrorHTTP, ErrorRebentDades)
private
void extreu_cos ( PeticioHTTP peticio) throw (ErrorHTTP, ErrorRebentDades)
private
void interpretar_recurs_dinamic ( const RecursDinamic )
void interpretar_ruta ( const Ruta &  ) const
size_t llegeix_socket ( std::stringstream &  buffer,
unsigned int  timeout_ms = TIMEOUT_RECEPCIO 
) throw (ErrorRebentDades)
private

Llegeix del socket (bloca amb timeout) i afegeix el contingut a buffer.

Paràmetres
bufferstream en què col·locar les dades llegides
timeout_msMilisegons màxims d'espera
Excepcions
ErrorRebentDadesSi es produeix un timeout o es tanca la connexió
Remarca
Les dades s'afegiran a buffer, sense sobre-escriure'l

Definició a la línia 282 del fitxer Servidor.cc.

Referenciat a Servidor::llegeix_socket().

size_t llegeix_socket ( unsigned int  timeout_ms = TIMEOUT_RECEPCIO) throw (ErrorRebentDades)
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().

size_t omple_buffer ( unsigned int  timeout_ms = TIMEOUT_RECEPCIO) throw (ErrorRebentDades)
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.

const string & signatura ( )
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()().

Documentació de les Dades Membre

std::stringstream buffer_
private

Definició a la línia 188 del fitxer Servidor.h.

Referenciat a Servidor::llegeix_socket().

const Configuracio& cfg
private

Definició a la línia 145 del fitxer Servidor.h.

socket_ptr socket_
private

Definició a la línia 146 del fitxer Servidor.h.

Referenciat a Servidor::Servidor().


La documentació d'aquesta classe es va generar a partir dels següents fitxers: