Oops! Pretty obvious and straightforward, too. Guess too tired to read the code 
(or just testing if anyone was watching) 
Anyway please disregard previous patch. This one seems to work for both 
interactive and batch modes:

1) fakesmsc will wait for input if interactive, else will run messages and when 
receives all responses prints stats and exits.
2) Statistics only in batch mode. Meaningless in interactive mode.
3) Rudimentary matching of messages by comparing the to: field to the returned 
text. It is very primitive, but better than nothing.
4) No more errors like sending 10 messages and getting 24 responses.
5) Better logging. from: and to: fields are displayed in the Sent msg.

Overall more "polished" behaviour. Try it out to get the feel.
I am good for what I said. Is there interest for the multithreaded version? 
It should take me less than a day to whip up one.

BR Nikos

*** fakesmsc.c Thu Nov 20 03:22:30 2008
--- fakesmsc.c.orig Thu Nov 20 03:24:31 2008
***************
*** 230,236 ****
      double first_received_at, last_received_at;
      double first_sent_at, last_sent_at;
      double start_time, end_time;
!     double delta = 0;
      int interactive, maxfd;
      char *cptr;
      char buffer[IN_BUFSIZE];
--- 230,236 ----
      double first_received_at, last_received_at;
      double first_sent_at, last_sent_at;
      double start_time, end_time;
!     double delta;
      int interactive, maxfd;
      char *cptr;
      char buffer[IN_BUFSIZE];
***************
*** 237,243 ****
      fd_set rset;
      struct timeval alarm;
      FILE *fp;
-  char *p, from[25], to[11];
  
      gwlib_init();
      setup_signal_handlers();
--- 237,242 ----
***************
*** 246,252 ****
  
      mptr = get_and_set_debugs(argc, argv, check_args);
      num_msgs = argc - mptr;
! 
      interactive = 0;
      msgs = NULL;
      fp = NULL;
--- 245,251 ----
  
      mptr = get_and_set_debugs(argc, argv, check_args);
      num_msgs = argc - mptr;
!   
      interactive = 0;
      msgs = NULL;
      fp = NULL;
***************
*** 283,289 ****
      last_sent_at = 0;
  
      /* infinitely loop */
!     while (interactive || delta >= 0) {
          /* Are we on interactive mode? */ 
          if (interactive == 1) {
              /* Check if we need to clean things up beforehand */
--- 282,288 ----
      last_sent_at = 0;
  
      /* infinitely loop */
!     while (1) {
          /* Are we on interactive mode? */ 
          if (interactive == 1) {
              /* Check if we need to clean things up beforehand */
***************
*** 326,340 ****
                  panic(0, "write failed");
  
              ++num_sent;
-     strncpy(from, octstr_get_cstr(msg), 24);
-     p = strchr(from, ' ');
-     *p = '\0';
-     strncpy(to, ++p, 10);
-     if ((p = strchr(to, ' '))) *p = '\0';
              if (num_sent == max_send)
!                 info(0, "fakesmsc: Sent msg %ld <%s %s>", num_sent, to, from);
              else
!                 debug("send", 0, "fakesmsc: Sent msg %ld <%s %s>", num_sent, 
to, from);
              if (rnd > 0)
                  octstr_destroy(msg);
  
--- 325,335 ----
                  panic(0, "write failed");
  
              ++num_sent;
              if (num_sent == max_send)
!                 info(0, "fakesmsc: sent message %ld", num_sent);
              else
!                 debug("send", 0, "fakesmsc: sent message %ld", num_sent);
!       
              if (rnd > 0)
                  octstr_destroy(msg);
  
***************
*** 349,355 ****
                  delta = 0;
              if (num_sent >= max_send)
                  delta = -1;
!     if (delta > 0 || interactive) conn_wait(server, delta);
              if (conn_error(server) || conn_eof(server) || sigint_received)
                  goto over;
  
--- 344,350 ----
                  delta = 0;
              if (num_sent >= max_send)
                  delta = -1;
!             conn_wait(server, delta);
              if (conn_error(server) || conn_eof(server) || sigint_received)
                  goto over;
  
***************
*** 358,378 ****
                  last_received_at = get_current_time();
                  if (first_received_at == 0)
                      first_received_at = last_received_at;
!       if (strstr(octstr_get_cstr(line), to))
!       {
!        ++num_received;
!        if (num_received == max_send) {
!          info(0, "Got message %ld: <%s>", num_received,
!           octstr_get_cstr(line));
!           if (!interactive) break;
!        } else {
!          debug("receive", 0, "fakesmsc: Got msg %ld: <%s>", num_received,
!            octstr_get_cstr(line));
!        }
!       }
                  octstr_destroy(line);
              }
!         } while (delta > 0 || num_received < num_sent);
      }
  
  over:
--- 353,369 ----
                  last_received_at = get_current_time();
                  if (first_received_at == 0)
                      first_received_at = last_received_at;
!                 ++num_received;
!                 if (num_received == max_send) {
!                     info(0, "Got message %ld: <%s>", num_received,
!                            octstr_get_cstr(line));
!                 } else {
!                     debug("receive", 0, "Got message %ld: <%s>", num_received,
!                           octstr_get_cstr(line));
!                 }
                  octstr_destroy(line);
              }
!         } while (delta > 0 || num_sent >= max_send);
      }
  
  over:
***************
*** 385,408 ****
  
      end_time = get_current_time();
  
!   if (!interactive)
!   {
!    info(0, "fakesmsc: %ld messages sent and %ld received", num_sent, 
num_received);
!    info(0, "fakesmsc: total running time %.1f seconds", end_time - 
start_time);
!    delta = last_sent_at - first_sent_at;
!    if (delta == 0)
!      delta = .01;
!    if (num_sent > 1)
!      info(0, "fakesmsc: from first to last sent message %.1f s, "
!        "%.1f msgs/s", delta, (num_sent - 1) / delta);
!    delta = last_received_at - first_received_at;
!    if (delta == 0)
!      delta = .01;
!    if (num_received > 1)
!      info(0, "fakesmsc: from first to last received message %.1f s, "
!        "%.1f msgs/s", delta, (num_received - 1) / delta);
!   }
      info(0, "fakesmsc: terminating");
      
      return 0;
  }
--- 376,397 ----
  
      end_time = get_current_time();
  
!     info(0, "fakesmsc: %ld messages sent and %ld received", num_sent, 
num_received);
!     info(0, "fakesmsc: total running time %.1f seconds", end_time - 
start_time);
!     delta = last_sent_at - first_sent_at;
!     if (delta == 0)
!         delta = .01;
!     if (num_sent > 1)
!         info(0, "fakesmsc: from first to last sent message %.1f s, "
!                 "%.1f msgs/s", delta, (num_sent - 1) / delta);
!     delta = last_received_at - first_received_at;
!     if (delta == 0)
!         delta = .01;
!     if (num_received > 1)
!         info(0, "fakesmsc: from first to last received message %.1f s, "
!                 "%.1f msgs/s", delta, (num_received - 1) / delta);
      info(0, "fakesmsc: terminating");
      
      return 0;
  }
  ----- Original Message ----- 
  From: Alejandro Guerrieri 
  To: Nikos Balkanas 
  Cc: [email protected] 
  Sent: Thursday, November 20, 2008 1:32 AM
  Subject: Re: fakesmsmc.c patch


  Nikos,


  The interactive mechanism allows you to type messages from the command line 
(one per line). Each time enter is pressed a new message is sent.


  Regards,


  Alejandro Guerrieri


  El 19/11/2008, a las 07:20 p.m., Nikos Balkanas escribiσ:


    Dear list,

    This patch will address the following issues in test/fakesmsc.c

    1) fakesmsc will no longer hangup on conn_wait when delta == -1 (end) and 
will exit as soon as messages are finished.
    2) Rudimentary matching of messages by comparing the to: field to the 
returned text. It is very simple, but better than nothing.
    3) Better logging. Now from: and to: fields are displayed in the Sent msg.

    If someone would care to explain me the logic behind interactive, I could 
also provide a serious multithreaded matrix tool able to grind the CPU to dust.

    Fakesmsc.c.orig is the 1 month old CVS version.

    BR,
    Nikos

    *** fakesmsc.c.orig Wed Nov 19 22:56:43 2008
    --- fakesmsc.c Wed Nov 19 18:31:12 2008
    ***************
    *** 230,236 ****
          double first_received_at, last_received_at;
          double first_sent_at, last_sent_at;
          double start_time, end_time;
    !     double delta;
          int interactive, maxfd;
          char *cptr;
          char buffer[IN_BUFSIZE];
    --- 230,236 ----
          double first_received_at, last_received_at;
          double first_sent_at, last_sent_at;
          double start_time, end_time;
    !     double delta = 0;
          int interactive, maxfd;
          char *cptr;
          char buffer[IN_BUFSIZE];
    ***************
    *** 237,242 ****
    --- 237,243 ----
          fd_set rset;
          struct timeval alarm;
          FILE *fp;
    +  char *p, from[25], to[11];
      
          gwlib_init();
          setup_signal_handlers();
    ***************
    *** 245,251 ****
      
          mptr = get_and_set_debugs(argc, argv, check_args);
          num_msgs = argc - mptr;
    !   
          interactive = 0;
          msgs = NULL;
          fp = NULL;
    --- 246,252 ----
      
          mptr = get_and_set_debugs(argc, argv, check_args);
          num_msgs = argc - mptr;
    ! 
          interactive = 0;
          msgs = NULL;
          fp = NULL;
    ***************
    *** 282,288 ****
          last_sent_at = 0;
      
          /* infinitely loop */
    !     while (1) {
              /* Are we on interactive mode? */ 
              if (interactive == 1) {
                  /* Check if we need to clean things up beforehand */
    --- 283,289 ----
          last_sent_at = 0;
      
          /* infinitely loop */
    !     while (interactive || delta >= 0) {
              /* Are we on interactive mode? */ 
              if (interactive == 1) {
                  /* Check if we need to clean things up beforehand */
    ***************
    *** 325,335 ****
                      panic(0, "write failed");
      
                  ++num_sent;
                  if (num_sent == max_send)
    !                 info(0, "fakesmsc: sent message %ld", num_sent);
                  else
    !                 debug("send", 0, "fakesmsc: sent message %ld", num_sent);
    !       
                  if (rnd > 0)
                      octstr_destroy(msg);
      
    --- 326,340 ----
                      panic(0, "write failed");
      
                  ++num_sent;
    +     strncpy(from, octstr_get_cstr(msg), 24);
    +     p = strchr(from, ' ');
    +     *p = '\0';
    +     strncpy(to, ++p, 10);
    +     if ((p = strchr(to, ' '))) *p = '\0';
                  if (num_sent == max_send)
    !                 info(0, "fakesmsc: Sent msg %ld <%s %s>", num_sent, to, 
from);
                  else
    !                 debug("send", 0, "fakesmsc: Sent msg %ld <%s %s>", 
num_sent, to, from);
                  if (rnd > 0)
                      octstr_destroy(msg);
      
    ***************
    *** 344,350 ****
                      delta = 0;
                  if (num_sent >= max_send)
                      delta = -1;
    !             conn_wait(server, delta);
                  if (conn_error(server) || conn_eof(server) || sigint_received)
                      goto over;
      
    --- 349,355 ----
                      delta = 0;
                  if (num_sent >= max_send)
                      delta = -1;
    !     if (delta > 0) conn_wait(server, delta);
                  if (conn_error(server) || conn_eof(server) || sigint_received)
                      goto over;
      
    ***************
    *** 353,369 ****
                      last_received_at = get_current_time();
                      if (first_received_at == 0)
                          first_received_at = last_received_at;
    !                 ++num_received;
    !                 if (num_received == max_send) {
    !                     info(0, "Got message %ld: <%s>", num_received,
    !                            octstr_get_cstr(line));
    !                 } else {
    !                     debug("receive", 0, "Got message %ld: <%s>", 
num_received,
    !                           octstr_get_cstr(line));
    !                 }
                      octstr_destroy(line);
                  }
    !         } while (delta > 0 || num_sent >= max_send);
          }
      
      over:
    --- 358,378 ----
                      last_received_at = get_current_time();
                      if (first_received_at == 0)
                          first_received_at = last_received_at;
    !       if (strstr(octstr_get_cstr(line), to))
    !       {
    !        ++num_received;
    !        if (num_received == max_send) {
    !          info(0, "Got message %ld: <%s>", num_received,
    !           octstr_get_cstr(line));
    !           break;
    !        } else {
    !          debug("receive", 0, "fakesmsc: Got msg %ld: <%s>", num_received,
    !            octstr_get_cstr(line));
    !        }
    !       }
                      octstr_destroy(line);
                  }
    !         } while (delta > 0 || num_received < num_sent);
          }
      
      over:
    ***************
    *** 394,397 ****
          
          return 0;
      }
    <fakesmsc.diff>

Attachment: fakesmsc.diff
Description: Binary data

Reply via email to