Author: sayer
Date: 2009-03-13 19:10:53 +0100 (Fri, 13 Mar 2009)
New Revision: 1319

Modified:
   trunk/apps/dsm/DSM.cpp
   trunk/apps/dsm/DSM.h
Log:
adding variables to outgoing calls as struct

Modified: trunk/apps/dsm/DSM.cpp
===================================================================
--- trunk/apps/dsm/DSM.cpp      2009-03-13 18:09:48 UTC (rev 1318)
+++ trunk/apps/dsm/DSM.cpp      2009-03-13 18:10:53 UTC (rev 1319)
@@ -226,9 +226,13 @@
 
 void DSMFactory::prepareSession(DSMDialog* s) {
   s->setPromptSets(prompt_sets);
+}
+
+void DSMFactory::addVariables(DSMDialog* s, const string& prefix,
+                             map<string, string>& vars) {
   for (map<string, string>::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,15 +268,43 @@
   }
 
   UACAuthCred* cred = NULL;
+  map<string, string> vars;
+  // Creds
   if (session_params.getType() == AmArg::AObject) {
     ArgObject* cred_obj = session_params.asObject();
     if (cred_obj)
       cred = dynamic_cast<UACAuthCred*>(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<UACAuthCred*>(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");
   } else {

Modified: trunk/apps/dsm/DSM.h
===================================================================
--- trunk/apps/dsm/DSM.h        2009-03-13 18:09:48 UTC (rev 1318)
+++ trunk/apps/dsm/DSM.h        2009-03-13 18:10:53 UTC (rev 1319)
@@ -63,7 +63,10 @@
 
   map<string, AmPromptCollection*> prompt_sets; 
   void prepareSession(DSMDialog* s);
+  void addVariables(DSMDialog* s, const string& prefix,
+                   map<string, string>& vars);
 
+
   vector<DSMModule*> preloaded_mods;
 public:
   static DSMFactory* instance();

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

Reply via email to