SEMS-30: continue_b2b=[yes|no|app-param]

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@924 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 18 years ago
parent 39131cb061
commit 94a0733f4e

@ -54,7 +54,8 @@ string EarlyAnnounceFactory::AnnouncePath;
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 @@ int EarlyAnnounceFactory::onLoad()
// 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 @@ void EarlyAnnounceDialog::process(AmEvent* event)
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 @@ void EarlyAnnounceDialog::process(AmEvent* event)
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)) {

@ -53,8 +53,12 @@ public:
static string AnnouncePath;
static string AnnounceFile;
#endif
static bool ContinueB2B;
enum ContB2B {
Always = 0,
Never,
AppParam
};
static ContB2B ContinueB2B;
EarlyAnnounceFactory(const string& _app_name);

@ -7,7 +7,9 @@ default_announce=default_en.wav
#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

Loading…
Cancel
Save