read multiple packets off cluster_sockfd as well as udpfd, tunfd
[l2tpns.git] / cli.c
diff --git a/cli.c b/cli.c
index 5815658..515185f 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -2,7 +2,7 @@
 // vim: sw=8 ts=8
 
 char const *cvs_name = "$Name:  $";
 // vim: sw=8 ts=8
 
 char const *cvs_name = "$Name:  $";
-char const *cvs_id_cli = "$Id: cli.c,v 1.37 2004/11/29 12:36:54 bodea Exp $";
+char const *cvs_id_cli = "$Id: cli.c,v 1.39 2004/12/03 06:41:11 bodea Exp $";
 
 #include <stdio.h>
 #include <stdarg.h>
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -1003,7 +1003,7 @@ static int cmd_show_radius(struct cli_def *cli, char *command, char **argv, int
                        NULL);
        }
 
                        NULL);
        }
 
-       cli_print(cli, "%6s%6s%5s%6s%9s%9s%4s", "ID", "Radius", "Sock", "State", "Session", "Retry", "Try");
+       cli_print(cli, "%6s%7s%5s%6s%9s%9s%4s", "ID", "Radius", "Sock", "State", "Session", "Retry", "Try");
 
        time(&time_now);
 
 
        time(&time_now);
 
@@ -1019,7 +1019,7 @@ static int cmd_show_radius(struct cli_def *cli, char *command, char **argv, int
 
                if (!show_all && radius[i].state == RADIUSNULL) continue;
 
 
                if (!show_all && radius[i].state == RADIUSNULL) continue;
 
-               cli_print(cli, "%6d%6d%5d%6s%9d%9u%4d",
+               cli_print(cli, "%6d%7d%5d%6s%9d%9u%4d",
                                i,
                                i >> RADIUS_SHIFT,
                                i & RADIUS_MASK,
                                i,
                                i >> RADIUS_SHIFT,
                                i & RADIUS_MASK,
@@ -1861,42 +1861,44 @@ static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc)
 
 int regular_stuff(struct cli_def *cli)
 {
 
 int regular_stuff(struct cli_def *cli)
 {
-       int i = debug_rb_tail;
-       int reprompt = 0;
+       int out = 0;
+       int i;
 
 #ifdef RINGBUFFER
 
 #ifdef RINGBUFFER
-       while (i != ringbuffer->tail)
+       for (i = debug_rb_tail; i != ringbuffer->tail; i = (i + 1) % RINGBUFFER_SIZE)
        {
        {
-               int show_message = 0;
+               char *m = ringbuffer->buffer[i].message;
+               char *p;
+               int show = 0;
+
+               if (!*m) continue;
 
 
-               if (*ringbuffer->buffer[i].message)
+               switch (ringbuffer->buffer[i].level)
                {
                {
-                       // Always show messages if we are doing general debug
-                       if (ringbuffer->buffer[i].level == 0 && debug_flags.critical) show_message = 1;
-                       if (ringbuffer->buffer[i].level == 1 && debug_flags.error)    show_message = 1;
-                       if (ringbuffer->buffer[i].level == 2 && debug_flags.warning)  show_message = 1;
-                       if (ringbuffer->buffer[i].level == 3 && debug_flags.info)     show_message = 1;
-                       if (ringbuffer->buffer[i].level == 4 && debug_flags.calls)    show_message = 1;
-                       if (ringbuffer->buffer[i].level == 5 && debug_flags.data)     show_message = 1;
+               case 0: show = debug_flags.critical;    break;
+               case 1: show = debug_flags.error;       break;
+               case 2: show = debug_flags.warning;     break;
+               case 3: show = debug_flags.info;        break;
+               case 4: show = debug_flags.calls;       break;
+               case 5: show = debug_flags.data;        break;
                }
 
                }
 
-               if (show_message)
-               {
-                       cli_print(cli, "\r%s-%u-%u %s",
-                                       debug_levels[(int)ringbuffer->buffer[i].level],
-                                       ringbuffer->buffer[i].tunnel,
-                                       ringbuffer->buffer[i].session,
-                                       ringbuffer->buffer[i].message);
+               if (!show) continue;
 
 
-                       reprompt = 1;
-               }
+               if (!(p = strchr(m, '\n')))
+                       p = m + strlen(p);
+
+               cli_print(cli, "\r%s-%u-%u %.*s",
+                       debug_levels[(int)ringbuffer->buffer[i].level],
+                       ringbuffer->buffer[i].tunnel,
+                       ringbuffer->buffer[i].session,
+                       p - m, m);
 
 
-               if (++i == ringbuffer->tail) break;
-               if (i == RINGBUFFER_SIZE) i = 0;
+               out++;
        }
 
        debug_rb_tail = ringbuffer->tail;
        }
 
        debug_rb_tail = ringbuffer->tail;
-       if (reprompt)
+       if (out)
                cli_reprompt(cli);
 #endif
        return CLI_OK;
                cli_reprompt(cli);
 #endif
        return CLI_OK;