Remove dynamic exceptions
[anna.git] / source / diameter.comm / Session.cpp
index 051cbce..4fb5ab4 100644 (file)
@@ -60,7 +60,7 @@ Session::Session(const char *className, const char *timerName) : anna::timex::Ti
   initialize();
 }
 
-void Session::initialize() throw() {
+void Session::initialize() {
   a_state = State::Closed;
   a_socketId = 0;
   a_lastIncomingActivityTime = (anna::Millisecond)0;
@@ -74,7 +74,7 @@ void Session::initialize() throw() {
 //Session::~Session() {;}
 
 
-void Session::initializeSequences() throw() {
+void Session::initializeSequences() {
   // Sequences
   //
   //   Hop-by-Hop Identifier
@@ -109,13 +109,13 @@ void Session::initializeSequences() throw() {
   //      affect any state that was set when the original request was
   //      processed.  Duplicate answer messages that are to be locally
   //      consumed (see Section 6.2) SHOULD be silently discarded.
-  srand(::time(NULL) + anna::functions::exclusiveHash(anna::functions::asString("%s:%d|%d", getAddress().c_str(), getPort(), a_socketId)));
+  srand(::time(NULL) + anna::functions::hash(anna::functions::asString("%s:%d|%d", getAddress().c_str(), getPort(), a_socketId).c_str()));
   a_nextHopByHop = rand();
   a_nextEndToEnd = ((::time(NULL) & 0xFFF) << 20) + (rand() & 0xFFFFF);
 }
 
 void Session::sendDPA()
-throw(anna::RuntimeException) {
+noexcept(false) {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "sendDPA", ANNA_FILE_LOCATION));
   anna::DataBlock dpa(true);
   a_engine->readDPA(dpa, a_dpr.getBody()); // Asume that DPA is valid ...
@@ -138,7 +138,7 @@ throw(anna::RuntimeException) {
   activateActionTimer(anna::diameter::comm::Timer::Type::SessionUnbind);
 }
 
-void Session::setState(State::_v state) throw() {
+void Session::setState(State::_v state) {
   LOGDEBUG(
 
   if(state != a_state) {
@@ -153,7 +153,7 @@ void Session::setState(State::_v state) throw() {
 }
 
 
-void Session::activateActionTimer(const anna::diameter::comm::Timer::Type::_v type) throw() {
+void Session::activateActionTimer(const anna::diameter::comm::Timer::Type::_v type) {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "activateActionTimer", ANNA_FILE_LOCATION));
   cancelTimer(); // Session timer
 
@@ -169,7 +169,7 @@ void Session::activateActionTimer(const anna::diameter::comm::Timer::Type::_v ty
 }
 
 
-void Session::cancelActionTimer() throw() {
+void Session::cancelActionTimer() {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "cancelActionTimer", ANNA_FILE_LOCATION));
 
   if(a_actionTimer) {
@@ -188,7 +188,7 @@ void Session::cancelActionTimer() throw() {
 }
 
 
-void Session::activateTimer() throw() {
+void Session::activateTimer() {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "activateTimer", ANNA_FILE_LOCATION));
   cancelActionTimer();
 
@@ -209,7 +209,7 @@ void Session::activateTimer() throw() {
 }
 
 
-void Session::cancelTimer() throw() {
+void Session::cancelTimer() {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "cancelTimer", ANNA_FILE_LOCATION));
 
   if(isActive()) {
@@ -235,12 +235,11 @@ void Session::cancelTimer() throw() {
 // Se invoca desde diameter::comm::Timer
 //-------------------------------------------------------------------------
 void Session::expireResponse(diameter::comm::Response* response)
-throw() {
+{
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "expireResponse", ANNA_FILE_LOCATION));
   bool doUnbind = false;
   bool doRetransmission = false;
 
-  // Quitar el OnExpiry: no tiene sentido habiendo keep-alive (DWR)
   if(response->getClassCode() != ClassCode::Bind) {
     if(response->getRequest()->getOnExpiry() == Message::OnExpiry::Abandon) {
       a_onDisconnect = OnDisconnect::IgnorePendings; // Abandon is not graceful
@@ -270,19 +269,18 @@ throw() {
 
   if(doRetransmission) {
     diameter::comm::Message *request = const_cast<Message*>(response->getRequest());
-    eventRequestRetransmission(request);
-
     int retries = request->getRetries();
     if (retries > 0) {
       retries--;
       request->setRetries(retries);
       LOGDEBUG
       (
-        //std::string msg(asString());
-        std::string msg = anna::functions::asString("Retransmission initiated for request with HopByHop: %u; remaining %d retries", response->getHopByHop(), retries);
+        std::string msg(asString());
+        msg += anna::functions::asString(" | Retransmission initiated for request with HopByHop: %u; remaining %d retries", response->getHopByHop(), retries);
         anna::Logger::debug(msg, ANNA_FILE_LOCATION);
       );
       diameter::codec::functions::setPotentiallyReTransmittedMessageBit(*request);
+      eventRequestRetransmission(request);
       send(request);
     }
   }
@@ -292,7 +290,7 @@ throw() {
   if(doUnbind) unbind();
 }
 
-void Session::finalize() throw() {
+void Session::finalize() {
   LOGMETHOD(anna::TraceMethod traceMethod("anna::diameter::comm::Session", "finalize", ANNA_FILE_LOCATION));
   setState(State::Closed);
   cancelTimer(); // Session timer
@@ -355,7 +353,7 @@ void Session::finalize() throw() {
 }
 
 void Session::response_add(Response* response)
-throw() {
+{
   a_responses.add(response);
   response->setSession(this);
 
@@ -367,7 +365,7 @@ throw() {
 }
 
 void Session::response_erase(Response* response)
-throw() {
+{
   a_responses.erase(response);
   Response::release(response);
 
@@ -379,7 +377,7 @@ throw() {
 }
 
 Response* Session::response_find(const HopByHop hopByHop)
-throw(anna::RuntimeException) {
+noexcept(false) {
   diameter::comm::Response* result = a_responses.find(hopByHop);
 //   if (result == NULL) {
 //      string msg(asString());
@@ -391,7 +389,7 @@ throw(anna::RuntimeException) {
 }
 
 std::string Session::asString() const
-throw() {
+{
   string result(a_className);
   result += " { ";
   result += anna::timex::Timer::asString();
@@ -422,7 +420,7 @@ throw() {
 }
 
 anna::xml::Node* Session::asXML(anna::xml::Node* parent) const
-throw() {
+{
   //parent = anna::timex::Timer::asXML(parent);
   anna::xml::Node* result = parent->createChild("diameter.comm.Session");
   result->createAttribute("SocketId", anna::functions::asString(a_socketId));
@@ -441,7 +439,6 @@ throw() {
 
   // Messages
   anna::xml::Node* messages = result->createChild("diameter.comm.Messages");
-  const Response* response;
   const Message* message;
 
   for(const_response_iterator ii = response_begin(), maxii = response_end(); ii != maxii; ii ++) {
@@ -453,13 +450,13 @@ throw() {
 }
 
 const char* Session::asText(const State::_v state)
-throw() {
+{
   static const char* text [] = { "Closed", "WaitingBind", "Bound", "Failover", "Suspect", "WaitingDPA", "Disconnecting", "Closing" };
   return text [state];
 }
 
 const char* Session::asText(const OnDisconnect::_v onDisconnect)
-throw() {
+{
   static const char* text [] = { "IgnorePendings", "WaitPendings" };
   return text [onDisconnect];
 }
@@ -467,7 +464,7 @@ throw() {
 
 
 HopByHop Session::SortById::value(const Response* response)
-throw() {
+{
   return response->getHopByHop();
 }
 
@@ -475,7 +472,7 @@ throw() {
 //------------------------------------------------------------------------------
 //---------------------------------------- Session::updateIncomingActivityTime()
 //------------------------------------------------------------------------------
-void Session::updateIncomingActivityTime() throw() {
+void Session::updateIncomingActivityTime() {
   a_lastIncomingActivityTime = anna::functions::millisecond();
   LOGDEBUG
   (
@@ -489,7 +486,7 @@ void Session::updateIncomingActivityTime() throw() {
 //------------------------------------------------------------------------------
 //---------------------------------------- Session::updateOutgoingActivityTime()
 //------------------------------------------------------------------------------
-void Session::updateOutgoingActivityTime(void) throw() {
+void Session::updateOutgoingActivityTime(void) {
   a_lastOutgoingActivityTime = anna::functions::millisecond();
   LOGDEBUG
   (
@@ -498,4 +495,3 @@ void Session::updateOutgoingActivityTime(void) throw() {
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
   );
 }
-