]> git.sur5r.net Git - ngadmin/blobdiff - cli/com_stormfilter.c
Cli: fix infinite loop in automatic login in case of network errors
[ngadmin] / cli / com_stormfilter.c
index 76076bfe517c0838be0d556b5ea6643ef5c0ffd1..dbd91f82f4bfec47d32755519194e8f97151bea7 100644 (file)
@@ -2,84 +2,97 @@
 #include "commands.h"
 
 
-bool do_stormfilter_enable (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
+int do_stormfilter_enable (int argc, const char **argv UNUSED, struct ngadmin *nga)
 {
        int i;
        const struct swi_attr *sa;
        
        
+       if (argc > 0) {
+               printf("this command takes no argument\n");
+               return 1;
+       }
+       
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa == NULL) {
                printf("must be logged\n");
-               return false;
+               return 1;
        }
        
        i = ngadmin_setStormFilterState(nga, 1);
        printErrCode(i);
        
        
-       return true;
+       return 0;
 }
 
 
-bool do_stormfilter_disable (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
+int do_stormfilter_disable (int argc, const char **argv UNUSED, struct ngadmin *nga)
 {
        int i;
        const struct swi_attr *sa;
        
        
+       if (argc > 0) {
+               printf("this command takes no argument\n");
+               return 1;
+       }
+       
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa == NULL) {
                printf("must be logged\n");
-               return false;
+               return 1;
        }
        
        i = ngadmin_setStormFilterState(nga, 0);
        printErrCode(i);
        
        
-       return true;
+       return 0;
 }
 
 
-bool do_stormfilter_set (int nb, const char **com, struct ngadmin *nga)
+int do_stormfilter_set (int argc, const char **argv, struct ngadmin *nga)
 {
-       int i, d = BITRATE_UNSPEC, p, *ports = NULL;
+       int i, d = BITRATE_UNSPEC, p, *ports = NULL, ret = 0;
        const struct swi_attr *sa;
-       bool ret = true;
        
        
-       if (nb < 2) {
-               printf("Usage: stormfilt set (all <speed0>)|(<port1> <speed1> [<port2> <speed2> ...])\n");
-               ret = false;
+       if (argc < 2) {
+               printf("usage: stormfilt set (all <speed0>)|(<port1> <speed1> [<port2> <speed2> ...])\n");
+               ret = 1;
                goto end;
        }
        
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa == NULL) {
                printf("must be logged\n");
-               ret = false;
+               ret = 1;
                goto end;
        }
        
-       ports=malloc(sa->ports * sizeof(int));
+       ports = malloc(sa->ports * sizeof(int));
        
-       if (strcmp(com[0], "all") == 0) {
-               d = parseBitrate(com[1]);
-               com += 2;
-               nb -= 2;
+       /* read defaults */
+       if (strcmp(argv[0], "all") == 0) {
+               d = parseBitrate(argv[1]);
+               argv += 2;
+               argc -= 2;
        }
        
+       /* apply defaults */
        for (i = 0; i < sa->ports; i++)
                ports[i] = d;
        
-       for (i = 0; i < nb; i += 2) {
-               p = strtol(com[i], NULL, 0);
+       /* read and apply port specifics */
+       for (i = 0; i < argc - 1; i += 2) {
+               p = strtol(argv[i], NULL, 0);
                if (p < 1 || p > sa->ports)
                        continue;
-               ports[p - 1] = parseBitrate(com[i + 1]);
+               ports[p - 1] = parseBitrate(argv[i + 1]);
        }
        
+       /* send the new configuration to the switch */
        i = ngadmin_setStormFilterValues(nga, ports);
        printErrCode(i);
        
@@ -90,23 +103,29 @@ end:
 }
 
 
-bool do_stormfilter_show (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
+int do_stormfilter_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
 {
-       int i, s, ret = true, *ports = NULL;
+       int i, s, ret = 0, *ports = NULL;
        const struct swi_attr *sa;
        
        
+       if (argc > 0) {
+               printf("this command takes no argument\n");
+               ret = 1;
+               goto end;
+       }
+       
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa == NULL) {
                printf("must be logged\n");
-               ret = false;
+               ret = 1;
                goto end;
        }
        
        i = ngadmin_getStormFilterState(nga, &s);
        if (i != ERR_OK) {
                printErrCode(i);
-               ret = false;
+               ret = 1;
                goto end;
        }
        
@@ -121,7 +140,7 @@ bool do_stormfilter_show (int nb UNUSED, const char **com UNUSED, struct ngadmin
        i = ngadmin_getStormFilterValues(nga, ports);
        if (i != ERR_OK) {
                printErrCode(i);
-               ret = false;
+               ret = 1;
                goto end;
        }