Author: sayer
Date: 2008-04-30 17:44:13 +0200 (Wed, 30 Apr 2008)
New Revision: 924

Modified:
   trunk/apps/early_announce/EarlyAnnounce.cpp
   trunk/apps/early_announce/EarlyAnnounce.h
   trunk/apps/early_announce/etc/early_announce.conf
Log:
SEMS-30: continue_b2b=[yes|no|app-param] 


Modified: trunk/apps/early_announce/EarlyAnnounce.cpp
===================================================================
--- trunk/apps/early_announce/EarlyAnnounce.cpp 2008-04-30 15:02:22 UTC (rev 
923)
+++ trunk/apps/early_announce/EarlyAnnounce.cpp 2008-04-30 15:44:13 UTC (rev 
924)
@@ -54,7 +54,8 @@
 string EarlyAnnounceFactory::AnnounceFile;
 #endif
 
-bool EarlyAnnounceFactory::ContinueB2B = false;
+EarlyAnnounceFactory::ContB2B EarlyAnnounceFactory::ContinueB2B = 
+  EarlyAnnounceFactory::Never;
 
 EarlyAnnounceFactory::EarlyAnnounceFactory(const string& _app_name)
   : AmSessionFactory(_app_name)
@@ -140,10 +141,18 @@
   // get application specific global parameters
   configureModule(cfg);
 
-  if (cfg.hasParameter("continue_b2b") &&
-      cfg.getParameter("continue_b2b") == "yes") {
-    ContinueB2B = true;
-    DBG("early_announce in b2bua mode.\n");
+  if (cfg.hasParameter("continue_b2b")) { 
+    if (cfg.getParameter("continue_b2b") == "yes") {
+      ContinueB2B = Always;
+      DBG("early_announce in b2bua mode.\n");
+    }
+    else if (cfg.getParameter("continue_b2b") == "app-param") {
+      ContinueB2B = AppParam;
+      DBG("early_announce in b2bua/final reply mode "
+         "(depends on app-param).\n");
+    } else {
+      DBG("early_announce sends final reply.\n");
+    }
   }
 
 #ifdef USE_MYSQL
@@ -354,11 +363,25 @@
 
   AmAudioEvent* audio_event = dynamic_cast<AmAudioEvent*>(event);
   if(audio_event && 
-     (audio_event->event_id == AmAudioEvent::cleared))
-    {
+     (audio_event->event_id == AmAudioEvent::cleared)) {
       DBG("AmAudioEvent::cleared\n");
 
-      if (!EarlyAnnounceFactory::ContinueB2B) {
+      bool continue_b2b = false;
+      if (EarlyAnnounceFactory::ContinueB2B == 
+         EarlyAnnounceFactory::Always) {
+       continue_b2b = true;
+      } else if (EarlyAnnounceFactory::ContinueB2B == 
+                EarlyAnnounceFactory::AppParam) {
+       string iptel_app_param = getHeader(localreq.hdrs, PARAM_HDR);
+       if (iptel_app_param.length()) {
+         continue_b2b = get_header_keyvalue(iptel_app_param,"B2B")=="yes";
+       } else {
+         continue_b2b = getHeader(localreq.hdrs,"P-B2B")=="yes";
+       }
+      }
+      DBG("determined: continue_b2b = %s\n", continue_b2b?"true":"false");
+
+      if (!continue_b2b) {
        unsigned int code_i = 404;
        string reason = "Not Found";
        
@@ -369,6 +392,8 @@
            ERROR("while parsing Final-Reply-Code parameter\n");
          }
          reason = get_header_keyvalue(iptel_app_param,"Final-Reply-Reason");
+         if (!reason.length())
+           reason = "Not Found";
        } else {
          string code = getHeader(localreq.hdrs,"P-Final-Reply-Code");
          if (code.length() && str2i(code, code_i)) {

Modified: trunk/apps/early_announce/EarlyAnnounce.h
===================================================================
--- trunk/apps/early_announce/EarlyAnnounce.h   2008-04-30 15:02:22 UTC (rev 
923)
+++ trunk/apps/early_announce/EarlyAnnounce.h   2008-04-30 15:44:13 UTC (rev 
924)
@@ -53,9 +53,13 @@
   static string AnnouncePath;
   static string AnnounceFile;
 #endif
+  enum ContB2B {
+    Always = 0,
+    Never,
+    AppParam
+  };
+  static ContB2B ContinueB2B;
 
-  static bool ContinueB2B;
-
   EarlyAnnounceFactory(const string& _app_name);
 
   int onLoad();

Modified: trunk/apps/early_announce/etc/early_announce.conf
===================================================================
--- trunk/apps/early_announce/etc/early_announce.conf   2008-04-30 15:02:22 UTC 
(rev 923)
+++ trunk/apps/early_announce/etc/early_announce.conf   2008-04-30 15:44:13 UTC 
(rev 924)
@@ -7,7 +7,9 @@
 #ENDCFGOPTION
 
 #
-# continue the call in B2BUA mode ? [yes | no]
-#
+# continue the call in B2BUA mode ? [yes | no | app-param]
+#  if continue_b2b=app-param, continuation is controlled by 
+#  'B2B' app param, e.g. P-App-Param: B2B=yes
+# 
 # default:
 # continue_b2b=no

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to