]> git.sur5r.net Git - gsconf/blob - shell.c
A bunch of fixes for various compiler warnings
[gsconf] / shell.c
1 #include "shell.h"
2
3
4 unsigned int countTokens(char * data, char * deli) {
5         unsigned int n = 0;
6         char * lp;
7         
8         char * da = malloc(sizeof(char) * strlen(data));
9         strcpy(da, data);
10         
11         lp = strtok(da, deli);
12         while (lp != NULL) {
13                 lp = strtok(NULL, deli);
14                 n++;
15         }
16         
17         return n;
18 }
19
20 unsigned int split(char *** _data, char * text, char * deli) {
21
22         
23         
24         unsigned int elements = countTokens(text, deli);
25         
26         *_data = malloc( sizeof(char *) * (elements + 1));
27         
28         char ** data = (char **)*_data;
29         
30         char * lp = strtok(text, deli);
31         
32         unsigned int n = 0;
33         
34         data[elements - 1] = NULL;
35         
36         while (lp != NULL) {
37                 data[n] = (char*)malloc( sizeof(char *) * (strlen(lp) + 1));
38                 strcpy(data[n], lp);
39                 data[n][strlen(lp)] = 0;
40                 lp = strtok(NULL, deli);
41                 n++;
42         }
43         return elements;
44 }
45
46 void printIp(char * data) {
47         printf("\033[92m%u.%u.%u.%u\033[0m\n",data[0]&0xff, data[1]&0xff, data[2]&0xff, data[3]&0xff);
48 }
49 void printError(int errCode) {
50         switch (errCode) {
51                 case 0x00:;
52                         printf("\033[92mSuccess!\033[0m\n");
53                         gs105e_queryAll();
54                         break;
55                 case -1:;
56                         printf("\033[91mSwitch does not answer!\033[0m\n");
57                         break;
58                 case 0x07:;
59                         printf("\033[91mWrong Password, try again!\033[0m\n");
60                         settings.password = NULL;
61                         break;
62                 default:;
63                         printf("\033[91mUups, unknown Error!?\033[0m\n");
64                         break;
65         }
66 }
67
68 void shell_set(char ** argv, int elem) {
69
70         if (strncmp(argv[1], "name", 4) == 0) {
71                 if (elem != 3) {
72                         printf("set name [name]\n");
73                         return;
74                 }
75                 printError(gs105e_setName(argv[2]));
76         }
77 }
78
79 char * copyString(char * data) {
80         char * ret = (char * )malloc(strlen(data) + 1);
81         memcpy(ret, data, strlen(data) + 1);
82         ret[strlen(data)] = 0;
83         return ret;
84 }
85
86 void password(void) {
87         if (settings.password == NULL) {
88                printf("\033[91mWarning: As the protocol of the switch wants it that way, all configuration packets are send as broadcasts. Even though Netgear is 'encrypting' the password it, the encryption used, is one step away from plaintext.\033[0m\n");
89                 settings.password = copyString((char *)getpass("Password: "));
90         }
91 }
92
93
94
95
96 int shell (void) {
97
98         char cmd[300];
99         int elem = 0;
100         char **argv;
101         int n;
102         
103         struct gs105e_discovered * ddev;
104         
105         char * dev = "nodev";
106         
107         n = gs105e_discover();
108         printf("Discovered \033[92m%i\033[0m devices\n", n);
109
110         ddev = gs105e_devs;
111
112         printf("ID\tName\t\tMAC\t\tIP\n");
113
114         while (ddev != NULL) {
115                 printf("%i\t%s\t\t%X:%X:%X:%X:%X:%X\t%u.%u.%u.%u\n", ddev->id, ddev->name, ddev->mac[0]&0xff, ddev->mac[1]&0xff, ddev->mac[2]&0xff, ddev->mac[3]&0xff, ddev->mac[4]&0xff, ddev->mac[5]&0xff, ddev->ip[0]&0xff, ddev->ip[1]&0xff, ddev->ip[2]&0xff, ddev->ip[3]&0xff);
116                 ddev = ddev->next;
117         }
118
119         if (n == 1) {
120                 printf("only one switch, selecting 1\n");
121
122                 memcpy(settings.mac, gs105e_devs->mac, 6);
123                 gs105e_queryAll();
124                 dev = gs105e_devs->name;
125         }
126         
127         while (1) {
128                 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
129                 cmd[0] = 0;
130                 fflush(0);
131                 if (fgets(cmd, 300, stdin) == NULL) {   //STRG + D
132                                 printf("\nExiting ...\n");
133                                 return 0;
134                         
135                 }
136                 
137                 
138                 
139                 cmd[strlen(cmd) - 1] = 0;
140                 
141                 //Check for an empty command line
142                 if (strlen(cmd) == 0) {
143                         continue;
144                 }
145                 
146                 
147                 //Check for the exit Command
148                 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
149                         return 0;
150                 
151                 elem = split(&argv, cmd, " ");
152                 
153
154                 
155                 if (strncmp(argv[0], "discover", 8) == 0) {
156                         n = gs105e_discover();
157                         printf("Discovered \033[92m%i\033[0m devices\n", n);
158                         
159                         ddev = gs105e_devs;
160                         
161                         printf("ID\tName\t\tMAC\t\tIP\n");
162                         
163                         while (ddev != NULL) {
164                                 printf("%i\t%s\t\t%X:%X:%X:%X:%X:%X\t%u.%u.%u.%u\n", ddev->id, ddev->name, ddev->mac[0]&0xff, ddev->mac[1]&0xff, ddev->mac[2]&0xff, ddev->mac[3]&0xff, ddev->mac[4]&0xff, ddev->mac[5]&0xff, ddev->ip[0]&0xff, ddev->ip[1]&0xff, ddev->ip[2]&0xff, ddev->ip[3]&0xff);
165                                 ddev = ddev->next;
166                         }
167                         
168                         if (n == 1) {
169                                 printf("only one switch, selecting 1\n");
170                                 
171                                 memcpy(settings.mac, gs105e_devs->mac, 6);
172                                 gs105e_queryAll();
173                                 dev = gs105e_devs->name;
174                         }
175                 }
176                 
177
178                 
179                 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
180                         n = atoi(argv[1]);
181                         if (n == 0){
182                                 printf("Please select a valid ID\n");
183                                 continue;
184                         }
185                         ddev = gs105e_devs;
186                         while (ddev != NULL) {
187                                 if (n == ddev->id)
188                                         break;
189                                 ddev = ddev->next;
190                         }
191                         
192                         if (ddev == NULL){
193                                 printf("Please select a valid ID\n");
194                                 continue;
195                         }
196                         
197                         memcpy(settings.mac, ddev->mac, 6);
198                         gs105e_queryAll();
199                         dev = ddev->name;
200                         
201                 }
202
203                 if (strncmp(dev, "nodev", 6) == 0){
204                         printf("Discover and select device first!\n");
205                         continue;
206                 }
207                                 
208                 if (strncmp(argv[0], "ip", 2) == 0) {
209                         shell_ip(argv, elem);
210                 }
211                 if (strncmp(argv[0], "vlan", 4) == 0) {
212                         shell_vlan(argv, elem);
213                 }
214                 if (strncmp(argv[0], "port", 4) == 0) {
215                         shell_port(argv, elem);
216                 }
217                 
218                 if (strncmp(argv[0], "sys", 3) == 0) {
219                         shell_sys(argv, elem);
220                 }
221                 
222                 if (strncmp(argv[0], "help", 4) == 0) {
223                         printf("Available commands: \n");
224                         printf("[discover|select|nodev|ip|vlan|port|sys] \n");
225                 }
226
227                 
228                 
229         }
230 }
231