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