Remove warnings
[anna.git] / include / anna / diameter.comm / Transport.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_diameter_comm_Transport_hpp
10 #define anna_diameter_comm_Transport_hpp
11
12
13 #include <anna/config/defines.hpp>
14 #include <anna/core/RuntimeException.hpp>
15 #include <anna/comm/Transport.hpp>
16 #include <anna/comm/TransportFactoryImpl.hpp>
17
18 namespace anna {
19 class DataBlock;
20 }
21
22
23
24 namespace anna {
25
26 namespace diameter {
27
28 namespace comm {
29
30
31 /**
32    Clase generica para definir la capa de transporte del protocolo de comunicaciones diameter.
33
34    Este protocolo esta orientado a intercambiar mensajes en una red interna, por lo que supone
35    que no van a existir errores en los mensajes recibidos y que los mensajes son suficientemente cortos
36    como para ocupar un unico paquete, por lo que no tiene ningun tipo de etiqueta especial que nos informe
37    sobre el inicio y/o fin del mensaje.
38
39    Los supuestos bajo los que se dise este protocolo facilitan el desarrollo de clases que ofrecen un
40    gran rendimiento, pero imposibilitan el desarrollo del sistema de re-sincronizacin en caso de que alguno
41    de los mensajes no cumpla los supuestos. Es decir, si nos llega un mensaje errneo nuestro proceso no sera
42    capaz de volver a sincronizarse nunca mas, por lo que el sistema de proteccion integrado en anna.comm
43    terminara cerrando la conexion.
44 */
45 class Transport : public anna::comm::Transport {
46 public:
47   /**
48      Destructor
49   */
50   virtual ~Transport();
51
52   /**
53      Devuelve el gestor de capas de transporte asociado a esta clase.
54      \return El gestor de capas de transporte asociado a esta clase.
55   */
56   static anna::comm::TransportFactory& getFactory() throw() { return st_factory; }
57
58   /**
59      Devuelve el literal que identifica de esta clase.
60      \return el literal que identifica de esta clase.
61   */
62   static const char* className() throw() { return "diameter::comm::Transport"; }
63
64 private:
65   static anna::comm::TransportFactoryImpl <anna::diameter::comm::Transport> st_factory;
66
67   Transport();
68
69   int calculeSize(const anna::DataBlock&) throw(anna::RuntimeException);
70   const anna::comm::Message* decode(const anna::DataBlock&) throw(anna::RuntimeException);
71   const anna::DataBlock& code(anna::comm::Message&) throw(anna::RuntimeException);
72
73   friend class anna::Allocator <anna::diameter::comm::Transport>;
74 };
75
76 }
77 }
78 }
79
80 #endif
81