1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
10 #include <anna/core/core.hpp>
11 #include <anna/diameter/functions.hpp>
12 #include <anna/time/functions.hpp>
13 #include <anna/diameter/codec/Engine.hpp>
14 #include <anna/diameter.comm/Response.hpp>
15 #include <anna/diameter.comm/ClientSession.hpp>
16 #include <anna/diameter.comm/Server.hpp>
17 #include <anna/diameter.comm/OriginHost.hpp>
20 #include <MyLocalServer.hpp>
21 #include <MyDiameterEngine.hpp>
22 #include <MyDiameterEntity.hpp>
23 #include <rxSimpleTest.hpp>
26 void MyLocalServer::eventRequest(anna::diameter::comm::ServerSession *serverSession, const anna::DataBlock &message, const anna::diameter::comm::OriginHost *myNode)
28 LOGMETHOD(anna::TraceMethod tm("rxSimpleTest::MyLocalServer", "eventRequest", ANNA_FILE_LOCATION));
34 RxSimpleTest& my_app = static_cast <RxSimpleTest&>(anna::app::functions::getApp());
35 anna::diameter::codec::Engine *codecEngine = myNode->getCodecEngine();
38 anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
41 std::string msg = "Request received: ";
42 msg += anna::diameter::functions::commandIdAsPairString(cid);
43 msg += " | DiameterServer: ";
44 msg += anna::functions::socketLiteralAsString(serverSession->getAddress(), serverSession->getPort());
45 msg += " | EventTime: ";
46 msg += anna::time::functions::currentTimeAsString();
47 anna::Logger::debug(msg, ANNA_FILE_LOCATION);
50 anna::diameter::codec::Message codecMsg;
51 anna::diameter::codec::Message codecAnsMsg;
52 anna::diameter::codec::Message *answer_message = (anna::diameter::codec::Message *)&codecAnsMsg;
53 my_app.getCommunicator()->prepareAnswer(answer_message, message);
55 anna::diameter::comm::Message *msg;
57 msg = (const_cast<anna::diameter::comm::OriginHost*>(myNode))->createCommMessage();
58 msg->setBody(answer_message->code());
59 /* response = NULL =*/serverSession->send(msg);
60 } catch(anna::RuntimeException &ex) {
65 (const_cast<anna::diameter::comm::OriginHost*>(myNode))->releaseCommMessage(msg);
68 void MyLocalServer::eventResponse(const anna::diameter::comm::Response &response, const anna::diameter::comm::OriginHost *myNode)
70 LOGMETHOD(anna::TraceMethod tm("rxSimpleTest::MyLocalServer", "eventResponse", ANNA_FILE_LOCATION));
71 RxSimpleTest& my_app = static_cast <RxSimpleTest&>(anna::app::functions::getApp());
72 anna::diameter::comm::ClassCode::_v code = response.getClassCode();
73 anna::diameter::comm::Response::ResultCode::_v result = response.getResultCode();
74 anna::diameter::comm::Message* request = const_cast<anna::diameter::comm::Message*>(response.getRequest());
75 const anna::DataBlock* message = response.getMessage();
76 const anna::diameter::comm::ServerSession *serverSession = static_cast<const anna::diameter::comm::ServerSession *>(response.getSession());
77 bool contextExpired = (result == anna::diameter::comm::Response::ResultCode::Timeout);
78 bool isUnavailable = (result == anna::diameter::comm::Response::ResultCode::DiameterUnavailable);
79 bool isOK = (result == anna::diameter::comm::Response::ResultCode::Success);
82 anna::diameter::CommandId request_cid = request->getCommandId();
85 std::string msg = "Response received for original diameter request: ";
86 msg += anna::diameter::functions::commandIdAsPairString(request_cid);
87 msg += " | Response: ";
88 msg += response.asString();
89 msg += " | LocalServer: ";
90 msg += anna::functions::socketLiteralAsString(serverSession->getAddress(), serverSession->getPort());
91 msg += " | EventTime: ";
92 msg += anna::time::functions::currentTimeAsString();
93 anna::Logger::debug(msg, ANNA_FILE_LOCATION);
97 //if (isApplicationMessage)
98 LOGWARNING(anna::Logger::warning("Diameter client unavailable for Diameter Request", ANNA_FILE_LOCATION));
102 //if (isApplicationMessage)
103 LOGWARNING(anna::Logger::warning("Context Expired for Diameter Request which was sent to the client", ANNA_FILE_LOCATION));
108 std::string msg = "Received response for diameter message: ";
109 msg += anna::diameter::functions::commandIdAsPairString(request_cid);
110 anna::Logger::debug(msg, ANNA_FILE_LOCATION);
115 void MyLocalServer::eventUnknownResponse(anna::diameter::comm::ServerSession *serverSession, const anna::DataBlock &message, const anna::diameter::comm::OriginHost *myNode)
117 LOGMETHOD(anna::TraceMethod tm("rxSimpleTest::MyLocalServer", "eventUnknownResponse", ANNA_FILE_LOCATION));
118 // Performance stats:
119 RxSimpleTest& my_app = static_cast <RxSimpleTest&>(anna::app::functions::getApp());
121 anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
124 std::string msg = "Out-of-context response received from client: ";
125 msg += anna::diameter::functions::commandIdAsPairString(cid);
126 msg += " | DiameterServer: ";
127 msg += anna::functions::socketLiteralAsString(serverSession->getAddress(), serverSession->getPort());
128 msg += " | EventTime: ";
129 msg += anna::time::functions::currentTimeAsString();
130 anna::Logger::debug(msg, ANNA_FILE_LOCATION);
134 void MyLocalServer::eventDPA(anna::diameter::comm::ServerSession *serverSession, const anna::DataBlock &message, const anna::diameter::comm::OriginHost *myNode)
136 LOGMETHOD(anna::TraceMethod tm("rxSimpleTest::MyLocalServer", "eventDPA", ANNA_FILE_LOCATION));
137 // Performance stats:
138 RxSimpleTest& my_app = static_cast <RxSimpleTest&>(anna::app::functions::getApp());
140 anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
143 std::string msg = "Disconnect-Peer-Answer response received from client: ";
144 msg += anna::diameter::functions::commandIdAsPairString(cid);
145 msg += " | DiameterServer: ";
146 msg += anna::functions::socketLiteralAsString(serverSession->getAddress(), serverSession->getPort());
147 msg += " | EventTime: ";
148 msg += anna::time::functions::currentTimeAsString();
149 anna::Logger::debug(msg, ANNA_FILE_LOCATION);