ANNA Suite  2020b
Multipurpose development suite for Telco applications
Response.hpp
Go to the documentation of this file.
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_Response_hpp
10 #define anna_diameter_comm_Response_hpp
11 
12 
14 #include <anna/core/Allocator.hpp>
16 
17 // Local
20 
21 
22 namespace anna {
23 class DataBlock;
24 }
25 
26 
27 namespace anna {
28 
29 namespace diameter {
30 
31 namespace comm {
32 
33 class Session;
34 class Timer;
35 class Message;
36 
44 class Response {
45 public:
46 
47  struct ResultCode {
48  enum _v {
53  };
54  };
55 
60  const ClassCode::_v & getClassCode() const { return a_classCode; }
61 
68  HopByHop getHopByHop() const { return a_hopByHop; }
69 
74  const Session* getSession() const { return a_session; }
75 
80  Session* getSession() { return a_session; }
81 
82 
87  const ResultCode::_v & getResultCode() const { return a_resultCode; }
88 
89 
94  const Message* getRequest() const { return a_request; }
95 
100  const anna::DataBlock *getMessage() const { return a_message; }
101 
102  // helpers
103 
104 // /**
105 // Reponse regarding diameter keepalive
106 // */
107 // bool isKeepAlive() const ;
108 
113  std::string asString() const ;
114 
115 private:
116  ClassCode::_v a_classCode;
117  HopByHop a_hopByHop;
118  Session* a_session;
119  ResultCode::_v a_resultCode;
120  Timer* a_timer;
121  const Message* a_request; // associated original request
122  const anna::DataBlock *a_message; // received datablock from server
123 
125  static response_pool st_responses;
126 
127  Response();
128 
129  static Response* instance(const ClassCode::_v &, const HopByHop) noexcept(false);
130  static void release(Response* response) ;
131 
132  void clear() ;
133 
134  void setSession(Session* session) { a_session = session; }
135  void setRequest(const Message* request) { a_request = request; }
136  void setMessage(const anna::DataBlock *message) { a_message = message; }
137  void activateTimer() noexcept(false);
138  void cancelTimer() ;
139  void setResultCode(const ResultCode::_v & resultCode) { a_resultCode = resultCode; }
140 
141  static const char* asText(const ResultCode::_v) ;
142 
143  friend class Session;
144  friend class ClientSession;
145  friend class ServerSession;
146  friend class Timer;
147  friend class anna::Allocator<Response>;
148 };
149 
150 }
151 }
152 }
153 
154 #endif
155 
HopByHop getHopByHop() const
Definition: Response.hpp:68
Session * getSession()
Definition: Response.hpp:80
unsigned int HopByHop
Definition: defines.hpp:68
Definition: Timer.hpp:30
const anna::DataBlock * getMessage() const
Definition: Response.hpp:100
const Message * getRequest() const
Definition: Response.hpp:94
_v
Definition: ClassCode.hpp:28
std::string asString() const
Definition: Allocator.hpp:19
Definition: Response.hpp:44
const ClassCode::_v & getClassCode() const
Definition: Response.hpp:60
Definition: Message.hpp:45
Definition: ServerSession.hpp:53
Definition: ClientSession.hpp:51
Definition: Recycler.hpp:30
const Session * getSession() const
Definition: Response.hpp:74
Definition: app.hpp:12
const ResultCode::_v & getResultCode() const
Definition: Response.hpp:87
Definition: Session.hpp:55
Definition: DataBlock.hpp:24