]> git.sur5r.net Git - gsconf/blob - shell.c
284acc0528ff39baf070facf15116127a7ea74d8
[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         int n;
71         if (strncmp(argv[1], "name", 4) == 0) {
72                 if (elem != 3) {
73                         printf("set name [name]\n");
74                         return;
75                 }
76                 printError(gs105e_setName(argv[2]));
77         }
78 }
79
80 void password(void) {
81         if (settings.password == NULL) {
82                printf("\033[91mWarning: As the protocol of the switch wants it that way, all configuration packets are send as broadcasts, meaning everyone on this net can sniff your password!\033[0m\n");
83                 settings.password = getpass("Password: ");
84         }
85 }
86
87
88
89
90 int shell (void) {
91
92         char cmd[300];
93         int elem = 0;
94         char **argv;
95         int n;
96         
97         struct gs105e_discovered * ddev;
98         
99         char * dev = "nodev";
100         while (1) {
101                 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
102                 cmd[0] = 0;
103                 fflush(0);
104                 if (fgets(cmd, 300, stdin) == NULL) {   //STRG + D
105                                 printf("\nExiting ...\n");
106                                 return 0;
107                         
108                 }
109                 
110                 
111                 
112                 cmd[strlen(cmd) - 1] = 0;
113                 
114                 //Check for an empty command line
115                 if (strlen(cmd) == 0) {
116                         continue;
117                 }
118                 
119                 
120                 //Check for the exit Command
121                 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
122                         return 0;
123                 
124                 elem = split(&argv, cmd, " ");
125                 
126
127                 
128                 if (strncmp(argv[0], "discover", 8) == 0) {
129                         n = gs105e_discover();
130                         printf("Discovered \033[92m%i\033[0m devices\n", n);
131                         
132                         ddev = gs105e_devs;
133                         
134                         printf("ID\tName\t\tMAC\t\tIP\n");
135                         
136                         while (ddev != NULL) {
137                                 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);
138                                 ddev = ddev->next;
139                         }
140                         
141                         if (n == 1) {
142                                 printf("only one switch, selecting 1\n");
143                                 
144                                 memcpy(settings.mac, gs105e_devs->mac, 6);
145                                 gs105e_queryAll();
146                                 dev = gs105e_devs->name;
147                         }
148                 }
149                 
150
151                 
152                 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
153                         n = atoi(argv[1]);
154                         if (n == 0){
155                                 printf("Please select a valid ID\n");
156                                 continue;
157                         }
158                         ddev = gs105e_devs;
159                         while (ddev != NULL) {
160                                 if (n == ddev->id)
161                                         break;
162                                 ddev = ddev->next;
163                         }
164                         
165                         if (ddev == NULL){
166                                 printf("Please select a valid ID\n");
167                                 continue;
168                         }
169                         
170                         memcpy(settings.mac, ddev->mac, 6);
171                         gs105e_queryAll();
172                         dev = ddev->name;
173                         
174                 }
175
176                 if (strncmp(dev, "nodev", 6) == 0){
177                         printf("Discover and select device first!\n");
178                         continue;
179                 }
180                                 
181                 if (strncmp(argv[0], "ip", 2) == 0) {
182                         shell_ip(argv, elem);
183                 }
184                 if (strncmp(argv[0], "vlan", 4) == 0) {
185                         shell_vlan(argv, elem);
186                 }
187                 if (strncmp(argv[0], "port", 4) == 0) {
188                         shell_port(argv, elem);
189                 }
190                 
191
192                 
193                 
194         }
195 }
196