]> git.sur5r.net Git - ngadmin/blob - raw/src/str.c
Raw: fix bug in isStringPrintable()
[ngadmin] / raw / src / str.c
1
2 #include <string.h>
3 #include <ctype.h>
4
5 #include <nsdp/str.h>
6
7
8 const char passwordKey[] = "NtgrSmartSwitchRock";
9
10
11 const char* const speed_str_tab[] = {
12         [SPEED_DOWN] = "down",
13         [SPEED_10_HD] = "10M half-duplex",
14         [SPEED_10_FD] = "10M full-duplex",
15         [SPEED_100_HD] = "100M half-duplex",
16         [SPEED_100_FD] = "100M full-duplex",
17         [SPEED_1000_FD] = "1000M full-duplex",
18         NULL
19 };
20
21
22 const char* const vlan_type_str_tab[] = {
23         [VLAN_DISABLED] = "disabled",
24         [VLAN_PORT_BASIC] = "basic port based",
25         [VLAN_PORT_ADV] = "advanced port based",
26         [VLAN_DOT_BASIC] = "basic 802.1Q",
27         [VLAN_DOT_ADV] = "advanced 802.1Q",
28         NULL
29 };
30
31
32 const char* const vlan_code_str_tab[] = {
33         [VLAN_NO] = "no",
34         [VLAN_UNTAGGED] = "untagged",
35         [VLAN_TAGGED] = "tagged",
36         NULL
37 };
38
39
40 const char* const qos_type_str_tab[] = {
41         [QOS_PORT] = "port",
42         [QOS_DOT] = "802.1p",
43         NULL
44 };
45
46
47 const char* const qos_prio_str_tab[] = {
48         [PRIO_HIGH] = "high",
49         [PRIO_MED] = "medium",
50         [PRIO_NORM] = "normal",
51         [PRIO_LOW] = "low",
52         NULL
53 };
54
55
56 const char* const bitrate_str_tab[] = {
57         [BITRATE_NOLIMIT] = "nl",
58         [BITRATE_512K] = "512K",
59         [BITRATE_1M] = "1M",
60         [BITRATE_2M] = "2M",
61         [BITRATE_4M] = "4M",
62         [BITRATE_8M] = "8M",
63         [BITRATE_16M] = "16M",
64         [BITRATE_32M] = "32M",
65         [BITRATE_64M] = "64M",
66         [BITRATE_128M] = "128M",
67         [BITRATE_256M] = "256M",
68         [BITRATE_512M] = "512M",
69         NULL
70 };
71
72
73 const char* const code_str_tab[] = {
74         [CODE_READ_REQ] = "read request",
75         [CODE_READ_REP] = "read reply",
76         [CODE_WRITE_REQ] = "write request",
77         [CODE_WRITE_REP] = "write reply",
78         NULL
79 };
80
81
82 const char* const error_str_tab[] = {
83         [ERROR_NONE] = "none",
84         [ERROR_READONLY] = "read only",
85         [ERROR_INVALID_VALUE] = "invalid value",
86         [ERROR_DENIED] = "access denied",
87         NULL
88 };
89
90
91 int parseValueStr (const char* const* tab, unsigned char mini, unsigned char maxi, const char *str)
92 {
93         unsigned char i;
94         
95         for (i = mini; i <= maxi; i++) {
96                 if (tab[i] != NULL && strcasecmp(str, tab[i]) == 0)
97                         return (int)i;
98         }
99         
100         return -1;
101 }
102
103
104 bool isStringPrintable (const char *str, unsigned int len)
105 {
106         const char *p;
107         
108         for (p = str; len > 0; len--) {
109                 if (!isprint(*p++))
110                         return false;
111         }
112         
113         return true;
114 }
115
116
117 void passwordEndecode (char *buf, unsigned int len)
118 {
119         const char *k = passwordKey;
120         unsigned int i;
121         
122         if (buf == NULL || len <= 0)
123                 return;
124         
125         for (i = 0; i < len; i++) {
126                 if (*k == '\0')
127                         k = passwordKey;
128                 buf[i] ^= *k++;
129         }
130 }
131
132
133 int trim (char *txt, int start)
134 {
135         char *p;
136         
137         if (txt == NULL)
138                 return 0;
139         
140         p = txt + start;
141         for (p--; p >= txt && (*p == ' ' || *p == '\n'); *p-- = '\0');
142         
143         return p - txt + 1;
144 }
145
146