diff --git a/apps/dsm/DSM.cpp b/apps/dsm/DSM.cpp index b14f296a..aa4a0ee9 100644 --- a/apps/dsm/DSM.cpp +++ b/apps/dsm/DSM.cpp @@ -226,9 +226,13 @@ int DSMFactory::onLoad() void DSMFactory::prepareSession(DSMDialog* s) { s->setPromptSets(prompt_sets); +} + +void DSMFactory::addVariables(DSMDialog* s, const string& prefix, + map& vars) { for (map::iterator it = - config.begin(); it != config.end(); it++) - s->var["config."+it->first] = it->second; + vars.begin(); it != vars.end(); it++) + s->var[prefix+it->first] = it->second; } AmSession* DSMFactory::onInvite(const AmSipRequest& req) @@ -264,14 +268,42 @@ AmSession* DSMFactory::onInvite(const AmSipRequest& req, } UACAuthCred* cred = NULL; + map vars; + // Creds if (session_params.getType() == AmArg::AObject) { ArgObject* cred_obj = session_params.asObject(); if (cred_obj) cred = dynamic_cast(cred_obj); + } else if (session_params.getType() == AmArg::Array) { + DBG("session params is array - size %d\n", session_params.size()); + // Creds + if (session_params.get(0).getType() == AmArg::AObject) { + ArgObject* cred_obj = session_params.get(0).asObject(); + if (cred_obj) + cred = dynamic_cast(cred_obj); + } + // Creds + vars + if (session_params.size()>1 && + session_params.get(1).getType() == AmArg::Struct) { + for (AmArg::ValueStruct::const_iterator it=session_params.get(1).begin(); + it != session_params.get(1).end(); it++) { + vars[it->first] = it->second.asCStr(); + } + } + } else if (session_params.getType() == AmArg::Struct) { + // vars + for (AmArg::ValueStruct::const_iterator it=session_params.begin(); + it != session_params.end(); it++) { + vars[it->first] = it->second.asCStr(); + } } DSMDialog* s = new DSMDialog(&prompts, diags, start_diag, cred); - prepareSession(s); + prepareSession(s); + + addVariables(s, "config.", config); + if (!vars.empty()) + addVariables(s, "", vars); if (NULL == cred) { WARN("discarding unknown session parameters.\n"); diff --git a/apps/dsm/DSM.h b/apps/dsm/DSM.h index 03a304ca..d098fc6a 100644 --- a/apps/dsm/DSM.h +++ b/apps/dsm/DSM.h @@ -63,6 +63,9 @@ class DSMFactory map prompt_sets; void prepareSession(DSMDialog* s); + void addVariables(DSMDialog* s, const string& prefix, + map& vars); + vector preloaded_mods; public: