ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
anna::comm::Transport Class Referenceabstract

#include <Transport.hpp>

Inheritance diagram for anna::comm::Transport:
Inheritance graph
[legend]
Collaboration diagram for anna::comm::Transport:
Collaboration graph
[legend]

Public Member Functions

 WHEN_SINGLETHREAD (static const int DefaultOverQuotaSize=2048;) WHEN_MULTITHREAD(static const int DefaultOverQuotaSize
 
bool enableTimeout () const
 
void activateTimeout ()
 
void deactivateTimeout ()
 
MessagegetInputMessage () noexcept(false)
 
int getOverQuotaSize () const
 
void setOverQuotaSize (const int overQuotaSize)
 
virtual int calculeSize (const DataBlock &dataBlock) noexcept(false)=0
 
virtual const Messagedecode (const DataBlock &message) noexcept(false)=0
 
virtual const DataBlockcode (Message &message) noexcept(false)=0
 
virtual void clear ()
 

Protected Member Functions

 Transport ()
 
void setInputMessage (Message *inputMessage)
 

Protected Attributes

DataBlock a_forCode
 

Detailed Description

Clase generica para definir la capa de transporte de cualquier protocolo de comunicaciones.

Estructura basica que nos permite ordenar el proceso de analizar un mensaje recibido desde cualquier medio. El protocolo conoce los detalles semanticos del mensaje que ha recibido, es decir, conoce como interpretar cada uno de los bytes que componen el mensaje, cuando un mensaje esta completo.

El principal problema de cualquier protocolo externo a la hora de recibir es conocer cual es el tamao de un determinado mensaje.

Todos los metodos que se deberian reescribir en las clases heredadas se invocan desde un metodo MT-safe que se encarga de evitar accesos simultaneos desde varios threads, lo cual, evita que tengamos que preocuparnos por establecer secciones criticas en cada uno de los metodos reescritos.

Warning
Los supuestos bajo los que se diseñó éste protocolo facilitan el desarrollo de clases que ofrecen un gran rendimiento, pero imposibilitan el desarrollo del sistema de re-sincronización en caso de que alguno de los mensajes no cumpla los supuestos. Es decir, si nos llega un mensaje errneo nuestro proceso no sera capaz de volver a sincronizarse nunca mas.

Constructor & Destructor Documentation

◆ Transport()

anna::comm::Transport::Transport ( )
inlineprotected

Constructor.

Parameters
autoSynchronizeIndica si el el protocolo instancia permite la sincronizacion automatica.
overQuotaSizeLongitud maxima que puede contener el buffer intermedio antes de cerrar el socket por considerar que no puede sincronizarlo.
168  :
169  a_inputMessage(NULL),
170  a_forCode(true),
171  a_enableTimeout(false) {
172  a_overQuotaSize = DefaultOverQuotaSize;
173  }
DataBlock a_forCode
Definition: Transport.hpp:160

Member Function Documentation

◆ activateTimeout()

void anna::comm::Transport::activateTimeout ( )
inline

Activates the timming control system for the ClientSocket which were created through this transport layer. They will be automatically closed if no activity is detected in a time interval.

See also
Communicator::setTimeout.
76 { a_enableTimeout = true; }

◆ calculeSize()

virtual int anna::comm::Transport::calculeSize ( const DataBlock dataBlock)
pure virtualnoexcept

Debe calcular el tamao previsto del mensaje actual.

Si se detecta una anomalia irrecuperable en el mensaje debe devolver una excepcion para indicar el error.

Parameters
dataBlockBloque con la parte del mensaje disponible hasta el momento.
Returns
Si con la informacion disponible no puede establecer la longitud del mensaje devolvera -1 en otro caso devolvera la longitud prevista del mensaje.
Warning
Si el protocolo de transporte implementado detecta problemas al calcular la longitud del mensaje recibido y lanza una excepcion en este metodo el ClientSocket activara los sistemas de recuperacion, si es posible.

◆ clear()

virtual void anna::comm::Transport::clear ( )
inlinevirtual

Metodo que inicializa el estado de esta capa de transporte. Sera invocado automaticamente por el nucleo anna.comm.

Reimplemented in anna::http::Transport.

157 { a_forCode.clear(); }
DataBlock a_forCode
Definition: Transport.hpp:160
void clear() noexcept(false)
Definition: DataBlock.hpp:240
Here is the call graph for this function:

◆ code()

virtual const DataBlock& anna::comm::Transport::code ( Message message)
pure virtualnoexcept

Debe establecer la forma en el protocolo va a preparar el envio a la capa de transporte.

Parameters
messageBloque de datos con la codificacin obtenida mediante cualquiera de los codec disponibles (Ver Codec).
Returns
El bloque de memoria con el mensaje que sera enviado a la capa de transporte.
Warning
De no indicarse ninguna otra implementacin devolvera el mensaje tal y como sea recibido.

◆ deactivateTimeout()

void anna::comm::Transport::deactivateTimeout ( )
inline

Deactivates the timming control system for the ClientSocket which were created through this transport layer.

82 { a_enableTimeout = false; }

◆ decode()

virtual const Message* anna::comm::Transport::decode ( const DataBlock message)
pure virtualnoexcept

Debe establecer el modo en que el protocolo va a verificar que el mensaje obtenido coincide con el patrn esperado e interpretar el contenido del mensaje. Este metodo slo se invoca cuando se considera que el mensaje actual esta completo.

Si se detecta una anomalia irrecuperable en el mensaje debe devolver una excepcion para indicar el error.

Parameters
messageBloque con lo que hasta el momento se considera el ltimo mensaje recibido por completo.
Returns
Un bloque de memoria que contiene el mensaje recibido codificado segn las reglas del protocolo este protocolo de transporte

◆ enableTimeout()

bool anna::comm::Transport::enableTimeout ( ) const
inline

Returns true if the transport layer has a timming control system activated.

68 { return a_enableTimeout; }

◆ getInputMessage()

Message* anna::comm::Transport::getInputMessage ( )
inlinenoexcept
86  {
87  return (a_inputMessage == NULL) ? nullInputMessage() : a_inputMessage;
88  }

◆ getOverQuotaSize()

int anna::comm::Transport::getOverQuotaSize ( ) const
inline

Returns the number of bytes reserved by this protocol for the intermediate buffer.

Returns
number of bytes reserved by this protocol for the intermediate buffer.
94 { return a_overQuotaSize; }

◆ setInputMessage()

void anna::comm::Transport::setInputMessage ( Message inputMessage)
inlineprotected

Establece la instancia del mensaje asociada a este transporte.

Parameters
inputMessageInstancia del mensaje a asociar.
179 { a_inputMessage = inputMessage; }

◆ setOverQuotaSize()

void anna::comm::Transport::setOverQuotaSize ( const int  overQuotaSize)
inline

Establece el numero de bytes que puede mantener este procotolo para cada uno de los ClientSocket sin que se halla identificado el mensaje como propio del protocolo. Si el numero de bytes guardados en la memoria intermedia sobrepasa este numero de bytes se cerrara la conexion con el ClientSocket.

Parameters
overQuotaSizeNumero de maximo de bytes que podemos mantener en la memoria intermedia.
104 { a_overQuotaSize = (overQuotaSize >= MinOverQuotaSize) ? overQuotaSize : MinOverQuotaSize; }
Here is the call graph for this function:

◆ WHEN_SINGLETHREAD()

anna::comm::Transport::WHEN_SINGLETHREAD ( static const int  DefaultOverQuotaSize = 2048;) const

Maximum number of bytes kept by each ClientSocket without identifying a message for the own protocol.

Member Data Documentation

◆ a_forCode

DataBlock anna::comm::Transport::a_forCode
protected

Bloque de memoria usado para guardar el contenido de la codificacion


The documentation for this class was generated from the following file: