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>