diff --git a/apps/dsm/DSMDialog.cpp b/apps/dsm/DSMDialog.cpp index 46cd230b..b46cdb22 100644 --- a/apps/dsm/DSMDialog.cpp +++ b/apps/dsm/DSMDialog.cpp @@ -36,7 +36,8 @@ DSMDialog::DSMDialog(AmPromptCollection* prompts, UACAuthCred* credentials) : prompts(prompts), default_prompts(prompts), diags(diags), startDiagName(startDiagName), playlist(this), cred(credentials), - rec_file(NULL) + rec_file(NULL), + process_invite(true), process_sessionstart(true) { diags.addToEngine(&engine); set_sip_relay_only(false); @@ -72,6 +73,13 @@ bool DSMDialog::checkVar(const string& var_name, const string& var_val) { } void DSMDialog::onInvite(const AmSipRequest& req) { + if (!process_invite) { + // re-INVITEs + AmB2BCallerSession::onInvite(req); + return; + } + process_invite = false; + bool run_session_invite = engine.onInvite(req, this); if (DSMFactory::RunInviteEvent) { @@ -88,17 +96,24 @@ void DSMDialog::onInvite(const AmSipRequest& req) { void DSMDialog::onSessionStart(const AmSipRequest& req) { - AmB2BCallerSession::onSessionStart(req); - DBG("DSMDialog::onSessionStart\n"); - startSession(); + if (process_sessionstart) { + process_sessionstart = false; + AmB2BCallerSession::onSessionStart(req); + + DBG("DSMDialog::onSessionStart\n"); + startSession(); + } } void DSMDialog::onSessionStart(const AmSipReply& rep) { - DBG("DSMDialog::onSessionStart (SEMS originator mode)\n"); - invite_req.body = rep.body; + if (process_sessionstart) { + process_sessionstart = false; + DBG("DSMDialog::onSessionStart (SEMS originator mode)\n"); + invite_req.body = rep.body; - startSession(); + startSession(); + } } void DSMDialog::startSession(){ diff --git a/apps/dsm/DSMDialog.h b/apps/dsm/DSMDialog.h index 6adabf99..b3738da0 100644 --- a/apps/dsm/DSMDialog.h +++ b/apps/dsm/DSMDialog.h @@ -50,6 +50,9 @@ class DSMDialog : public AmB2BCallerSession, string startDiagName; AmPlaylist playlist; + bool process_invite; + bool process_sessionstart; + vector audiofiles; AmAudioFile* rec_file; map prompt_sets;