Improve name for setProxied. Better updateEndToEnd because have any other application...
authorEduardo Ramos Testillano <eduardo.ramos.testillano@ericsson.com>
Sun, 26 Apr 2015 15:53:04 +0000 (17:53 +0200)
committerEduardo Ramos Testillano <eduardo.ramos.testillano@ericsson.com>
Sun, 26 Apr 2015 15:53:04 +0000 (17:53 +0200)
example/diameter/launcher/main.cpp
include/anna/diameter.comm/Message.hpp
source/diameter.comm/Message.cpp

index 7907a47..dde2f7c 100644 (file)
@@ -2330,7 +2330,7 @@ throw(anna::RuntimeException) {
   if(localServer && (cid != anna::diameter::helpers::base::COMMANDID__Capabilities_Exchange_Request) /* don't forward CER */) {
     try {
       anna::diameter::comm::Message *msg = G_commMessages.create();
-      msg->setProxied(); // end-to-end will be kept
+      msg->updateEndToEnd(false); // end-to-end will be kept
       msg->setBody(message);
       msg->setRequestClientSessionKey(clientSession->getKey());
       bool success = localServer->send(msg);
@@ -2413,7 +2413,7 @@ throw(anna::RuntimeException) {
 
     if(localServer && (request_cid != anna::diameter::helpers::base::COMMANDID__Capabilities_Exchange_Request) /* don't forward CEA */) {
       try {
-        G_commMsgFwd2c.setProxied(); // end-to-end will be kept
+        G_commMsgFwd2c.updateEndToEnd(false); // end-to-end will be kept
         G_commMsgFwd2c.setBody(*message);
         bool success = localServer->send(&G_commMsgFwd2c, request->getRequestServerSessionKey());
         G_commMessages.release(request);
@@ -2512,7 +2512,7 @@ throw(anna::RuntimeException) {
   anna::diameter::comm::Entity *entity = my_app.getEntity();
   if(!programmed && entity) {  // forward condition (no programmed answer + entity available)
     anna::diameter::comm::Message *msg = G_commMessages.create();
-    msg->setProxied(); // end-to-end will be kept
+    msg->updateEndToEnd(false); // end-to-end will be kept
     msg->setBody(message);
     msg->setRequestServerSessionKey(serverSession->getKey());
     bool success = entity->send(msg, cl.exists("balance"));
@@ -2640,7 +2640,7 @@ throw(anna::RuntimeException) {
       if(my_app.logEnabled()) detail = usedClientSession ? usedClientSession->asString() : "<null client session>";  // esto no deberia ocurrir
 
       try {
-        G_commMsgFwd2e.setProxied(); // end-to-end will be kept
+        G_commMsgFwd2e.updateEndToEnd(false); // end-to-end will be kept
         G_commMsgFwd2e.setBody(*message);
 
         // Metodo 1:
index 7e007ca..7532771 100644 (file)
@@ -108,11 +108,20 @@ public:
 
   bool fixRequestSequence(HopByHop hbh, EndToEnd ete) throw();
 
-  /** Diameter agents CANNOT modify the end-to-end. True value stands for intermediate agents, false for request originators */
-  bool isProxied() const throw() { return a_proxied; }
+  /**
+   * In general, diameter agents CANNOT modify the end-to-end value during sending the message to the peer.
+   * That 'true' value stands for intermediate agents and also for retransmissions (must keep end-to-end
+   * during 4 minutes even upon reboots). False is used for new request created from end points (originators)
+   * as diameter clients.
+   */
+  bool updateEndToEnd() const throw() { return a_updateEndToEnd; }
 
-  /** Diameter agents CANNOT modify the end-to-end. True value stands for intermediate agents, false for request originators */
-  void setProxied(bool proxied = true) throw() { a_proxied = proxied; }
+  /**
+   * In general, diameter agents CANNOT modify the end-to-end value during sending the message to the peer.
+   * The appropiate behaviour must be configured before sending the message. By default, the diameter::comm
+   * message will sequence the end-to-end increasing the initial value created during session establishment.
+   */
+  void updateEndToEnd(bool update) throw() { a_updateEndToEnd = update; }
 
 
   // Statistics
@@ -140,7 +149,7 @@ public:
     a_requestClientSessionKey = ""; // means unknown/unset
     a_requestHopByHop = 0;
     a_requestEndToEnd = 0;
-    a_proxied = false;
+    a_updateEndToEnd = true;
   }
 
 
@@ -164,7 +173,7 @@ private:
   std::string a_requestClientSessionKey;    // idem for request which was received from servers
   HopByHop a_requestHopByHop; // application backup for hop-by-hop in order to restore on answer receive
   EndToEnd a_requestEndToEnd; // application backup for end-to-end in order to restore on answer receive
-  bool a_proxied; // end-to-end will be kept
+  bool a_updateEndToEnd; // end-to-end will be updated
 
   void send(ClientSession&) const throw(anna::RuntimeException);
   void send(ServerSession&) const throw(anna::RuntimeException);
index 2b6331c..0eef96c 100644 (file)
@@ -71,7 +71,7 @@ bool Message::fixRequestSequence(HopByHop hbh, EndToEnd ete) throw() {
     result = true;
   }
 
-  if(!a_proxied) {
+  if(a_updateEndToEnd) {
     if(ete != getRequestEndToEnd()) {
       codec::functions::setEndToEnd((anna::DataBlock&)getBody(), ete);
       result = true;
@@ -85,7 +85,7 @@ bool Message::fixRequestSequence(HopByHop hbh, EndToEnd ete) throw() {
     msg += " (original) -> ";
     msg += anna::functions::asString(hbh);
     msg += " (session)";
-    msg += a_proxied ? " | End to end [proxied]: " : " | End to end: ";
+    msg += a_updateEndToEnd ? " | End to end: " : " | End to end [end-to-end unchanged]: ";
     msg += anna::functions::asString(getRequestEndToEnd());
     msg += " (original) -> ";
     msg += anna::functions::asString(ete);