Module: sems
Branch: master
Commit: 63d5b66d3173ad3be638478acfc548b7e04f2beb
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=63d5b66d3173ad3be638478acfc548b7e04f2beb

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Fri Dec  3 03:22:24 2010 +0100

DSM: sys.getTimestamp() and sys.subTimestamp()

development of this was sponsored by TelTech Systems Inc

---

 apps/dsm/mods/mod_sys/ModSys.cpp |   61 +++++++++++++++++++++++++++++++++++++-
 apps/dsm/mods/mod_sys/ModSys.h   |    3 ++
 doc/dsm/mods/Readme.mod_sys.txt  |    6 +++-
 3 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/apps/dsm/mods/mod_sys/ModSys.cpp b/apps/dsm/mods/mod_sys/ModSys.cpp
index 715b9c2..ea0b77f 100644
--- a/apps/dsm/mods/mod_sys/ModSys.cpp
+++ b/apps/dsm/mods/mod_sys/ModSys.cpp
@@ -47,6 +47,10 @@ MOD_ACTIONEXPORT_BEGIN(MOD_CLS_NAME) {
   DEF_CMD("sys.unlinkArray", SCUnlinkArrayAction);
   DEF_CMD("sys.tmpnam", SCTmpNamAction);
   DEF_CMD("sys.popen", SCPopenAction);
+
+  DEF_CMD("sys.getTimestamp", SCSysGetTimestampAction);
+  DEF_CMD("sys.subTimestamp", SCSysSubTimestampAction);
+
 } MOD_ACTIONEXPORT_END;
 
 MOD_CONDITIONEXPORT_BEGIN(MOD_CLS_NAME) {
@@ -258,7 +262,6 @@ EXEC_ACTION_START(SCTmpNamAction) {
   }
 } EXEC_ACTION_END;
 
-
 CONST_ACTION_2P(SCPopenAction, '=', false);
 EXEC_ACTION_START(SCPopenAction) {
   string dst_var = par1;
@@ -300,3 +303,59 @@ EXEC_ACTION_START(SCPopenAction) {
   DBG("child process returned status %d\n", status);
 
 } EXEC_ACTION_END;
+
+EXEC_ACTION_START(SCSysGetTimestampAction) {
+  string varname = resolveVars(arg, sess, sc_sess, event_params);
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+
+  // long unsigned msecs = tv.tv_sec * 1000 + tv.tv_usec / 1000;
+
+  char ms_buf[40];
+  snprintf(ms_buf, 40, "%lu", tv.tv_sec);
+  sc_sess->var[varname+".tv_sec"] = ms_buf;
+
+  snprintf(ms_buf, 40, "%lu", tv.tv_usec);
+  sc_sess->var[varname+".tv_usec"] = ms_buf;
+
+  DBG("got timestamp $%s=%s, $%s=%s, \n",
+      (varname+".tv_sec").c_str(), sc_sess->var[varname+".tv_sec"].c_str(),
+      (varname+".tv_usec").c_str(), sc_sess->var[varname+".tv_usec"].c_str()
+      );
+
+} EXEC_ACTION_END;
+
+CONST_ACTION_2P(SCSysSubTimestampAction, ',', false);
+EXEC_ACTION_START(SCSysSubTimestampAction) {
+  string t1 = resolveVars(par1, sess, sc_sess, event_params);
+  string t2 = resolveVars(par2, sess, sc_sess, event_params);
+
+  struct timeval tv1;
+  struct timeval tv2;
+
+  tv1.tv_sec = atol(sc_sess->var[t1+".tv_sec"].c_str());
+  tv1.tv_usec = atol(sc_sess->var[t1+".tv_usec"].c_str());
+
+  tv2.tv_sec = atol(sc_sess->var[t2+".tv_sec"].c_str());
+  tv2.tv_usec = atol(sc_sess->var[t2+".tv_usec"].c_str());
+
+  struct timeval diff;
+  timersub(&tv1,&tv2,&diff);
+
+  char ms_buf[40];
+  snprintf(ms_buf, 40, "%lu", diff.tv_sec);
+  sc_sess->var[t1+".tv_sec"] = ms_buf;
+
+  snprintf(ms_buf, 40, "%lu", diff.tv_usec);
+  sc_sess->var[t1+".tv_usec"] = ms_buf;
+
+  // may be overflowing - use only if timestamps known
+  snprintf(ms_buf, 40, "%lu", diff.tv_sec * 1000 + diff.tv_usec / 1000);
+  sc_sess->var[t1+".msec"] = ms_buf;
+
+  DBG("sub $%s = %s,  $%s = %s,  $%s = %s\n",
+      (t1+".tv_sec").c_str(), sc_sess->var[t1+".tv_sec"].c_str(),
+      (t1+".tv_usec").c_str(), sc_sess->var[t1+".tv_usec"].c_str(),
+      (t1+".msec").c_str(), sc_sess->var[t1+".msec"].c_str()
+      );
+} EXEC_ACTION_END;
diff --git a/apps/dsm/mods/mod_sys/ModSys.h b/apps/dsm/mods/mod_sys/ModSys.h
index c640090..d7b1310 100644
--- a/apps/dsm/mods/mod_sys/ModSys.h
+++ b/apps/dsm/mods/mod_sys/ModSys.h
@@ -40,4 +40,7 @@ DEF_ACTION_1P(SCUnlinkAction);
 DEF_ACTION_2P(SCUnlinkArrayAction);
 DEF_ACTION_1P(SCTmpNamAction);
 DEF_ACTION_2P(SCPopenAction);
+
+DEF_ACTION_1P(SCSysGetTimestampAction);
+DEF_ACTION_2P(SCSysSubTimestampAction);
 #endif
diff --git a/doc/dsm/mods/Readme.mod_sys.txt b/doc/dsm/mods/Readme.mod_sys.txt
index 5e10c1d..f48047b 100644
--- a/doc/dsm/mods/Readme.mod_sys.txt
+++ b/doc/dsm/mods/Readme.mod_sys.txt
@@ -7,7 +7,6 @@ Actions:
     Array version of unlink (prefix/filename_0 .. 
prefix/filename_$filename_size) 
  sys.tmpnam(string varname)
 
-
  sys.popen($var="command")
    execute a command (using popen) and save result in $var
    example:
@@ -16,7 +15,12 @@ Actions:
     #type=="popen", #cause==reason if fails to exec
     #type=="pclose", #cause==reason if fails to close pipe
  
+ sys.getTimestamp(string varname) - get timestamp in 
varname.tv_sec/varname.tv_usec
+ sys.subTimestamp(ts1, ts2)  - subtract $ts2 from $ts1, save result in
+                               $ts1.sec, $ts1.msec and $ts1.usec
 
 Conditions: 
  sys.file_exists(string fname)
  sys.file_not_exists(string fname)
+
+

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

Reply via email to