Hi,

I need testers to test the throttling patch of EMI/UCP smsc.
You need to configure the throughput option for the SMSC in order to make it 
work.

Please find in attachement, the patch.
Then apply it to the current CVS sources.

You should now see in your logfiles :
2006-04-07 18:08:24.554 [31695] [42] DEBUG: EMI2[EMI-SMSC]: QOS: Traffic Policy 
exceeded, we need to sleep <0.198170>sec 
2006-04-07 18:08:24.567 [31695] [42] DEBUG: EMI2[EMI-SMSC]: QOS: Traffic Policy 
exceeded, we need to sleep <0.185829>sec 
2006-04-07 18:08:24.591 [31695] [42] DEBUG: EMI2[EMI-SMSC]: QOS: Traffic Policy 
exceeded, we need to sleep <0.161633>sec 

cf (Throttling is not obeyed due to gwthread_wakup of sender thread)
http://bugs.kannel.org/view_bug_page.php?f_id=0000332

Please repport any bugs/comments to this list or/and directly to me.

regards

Vincent

--
Telemaque - NICE - (FR)
Service Technique - Developpement
http://www.telemaque.fr/
[EMAIL PROTECTED]
Tel : +33 4 93 97 71 64 (fax 68)
diff -rau /gateway-cvs/gw/smsc/smsc_emi.c /gateway/gw/smsc/smsc_emi.c
--- /gateway-cvs/gw/smsc/smsc_emi.c     2006-04-07 14:54:06.000000000 +0200
+++ /gateway/gw/smsc/smsc_emi.c 2006-04-07 17:12:38.000000000 +0200
@@ -122,6 +122,7 @@
     int         priv_nexttrn;   /* next TRN, this should never be accessed 
directly.
                                 * use int emi2_next_trn (SMSCConn *conn) 
instead.
                                 */
+    struct timeval last_mt_microtime;  /* the last microtime a MT was sent 
over the SMSC */
     time_t     last_activity_time; /* the last time something was sent over 
the main
                                     * SMSC connection
                                     */
@@ -168,6 +169,9 @@
 
     if (result >= 0 && emimsg->or == 'O' && ( emimsg->ot == 31 || emimsg->ot 
== 51)) {
        PRIVDATA(conn)->last_activity_time = time (NULL);
+        if (emimsg->ot == 51) {                                    
+            gettimeofday(&PRIVDATA(conn)->last_mt_microtime, 0);
+        }
     }
 
     return result;
@@ -988,9 +990,13 @@
  */
 static int emi2_do_send(SMSCConn *conn, Connection *server)
 {
+    PrivData *privdata = conn->data;
     struct emimsg *emimsg;
+    struct timeval tv;
     Msg *msg;
     double delay = 0;
+    double mt_microtime = 0;
+    double microtime = 0;
 
     if (conn->throughput > 0) {
         delay = 1.0 / conn->throughput;
@@ -1001,8 +1007,32 @@
            (msg = gw_prioqueue_remove(PRIVDATA(conn)->outgoing_queue)) != 
NULL) {
         int nexttrn = emi2_next_trn(conn);
 
+        gettimeofday(&tv, 0);
+
+        mt_microtime = (double) PRIVDATA(conn)->last_mt_microtime.tv_sec + 
(double) PRIVDATA(conn)->last_mt_microtime.tv_usec / 1000000;
+        microtime = (double) tv.tv_sec + (double) tv.tv_usec / 1000000;
+
+        debug("smsc.emi2", 0, "EMI2[%s]: QOS: last_mt_microtime:<%f> now:<%f>",
+            octstr_get_cstr(conn->id), mt_microtime, microtime);
+
         if (conn->throughput > 0)
+        {
+            debug("smsc.emi2", 0, "EMI2[%s]: QOS: Sleeping <%f>sec", 
octstr_get_cstr(conn->id), delay);
             gwthread_sleep(delay);
+            debug("smsc.emi2", 0, "EMI2[%s]: QOS: Sleeping Done.", 
octstr_get_cstr(conn->id));
+            while (mt_microtime + delay > microtime)
+            {
+                debug("smsc.emi2", 0, "EMI2[%s]: QOS: Traffic Policy exceeded, 
we need to sleep <%f>sec",
+                    octstr_get_cstr(conn->id), (mt_microtime + delay) - 
microtime);
+                /* Sleeping rest of time */
+                gwthread_sleep((mt_microtime + delay) - microtime);
+
+                /* Refreshing time */
+                gettimeofday(&tv, 0);
+                mt_microtime = (double) 
PRIVDATA(conn)->last_mt_microtime.tv_sec + (double) 
PRIVDATA(conn)->last_mt_microtime.tv_usec / 1000000;
+                microtime = (double) tv.tv_sec + (double) tv.tv_usec / 1000000;
+            }
+        }
 
         /* convert the generic Kannel message into an EMI type message */
         emimsg = msg_to_emimsg(msg, nexttrn, PRIVDATA(conn));

Reply via email to