[NET] Move COMPUTER, CONFIG and CONTINUE command syntax and help texts into a message...
[reactos.git] / base / applications / network / net / cmdConfig.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS net command
4 * FILE: base/applications/network/net/cmdConfig.c
5 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org>
6 */
7
8 #include "net.h"
9
10 static
11 INT
12 DisplayServerConfig(
13 PSERVER_INFO_102 ServerInfo)
14 {
15 PSERVER_TRANSPORT_INFO_0 TransportInfo = NULL;
16 DWORD dwRead, dwTotal, i;
17 INT nPaddedLength = 38;
18 NET_API_STATUS Status;
19
20 Status = NetServerTransportEnum(NULL, 0, (PBYTE*)&TransportInfo,
21 MAX_PREFERRED_LENGTH,
22 &dwRead,
23 &dwTotal,
24 NULL);
25 if (Status != NERR_Success)
26 goto done;
27
28 PrintPaddedResourceString(IDS_CONFIG_SERVER_NAME, nPaddedLength);
29 ConPrintf(StdOut, L"\\\\%s\n", ServerInfo->sv102_name);
30
31 PrintPaddedResourceString(IDS_CONFIG_SERVER_COMMENT, nPaddedLength);
32 ConPrintf(StdOut, L"%s\n\n", ServerInfo->sv102_comment);
33
34 PrintPaddedResourceString(IDS_CONFIG_SERVER_VERSION, nPaddedLength);
35 ConPrintf(StdOut, L"%lu.%lu\n",
36 ServerInfo->sv102_version_major,
37 ServerInfo->sv102_version_minor);
38
39 ConResPuts(StdOut, IDS_CONFIG_SERVER_ACTIVE);
40 ConPuts(StdOut, L"\n");
41 for (i = 0; i < dwRead; i++)
42 {
43 ConPrintf(StdOut, L" %s (%s)\n",
44 &TransportInfo[i].svti0_transportname[8],
45 TransportInfo[i].svti0_networkaddress);
46 }
47 ConPuts(StdOut, L"\n");
48
49 PrintPaddedResourceString(IDS_CONFIG_SERVER_HIDDEN, nPaddedLength);
50 ConResPuts(StdOut, (ServerInfo->sv102_hidden == SV_HIDDEN) ? IDS_GENERIC_YES : IDS_GENERIC_NO);
51 ConPuts(StdOut, L"\n");
52
53 PrintPaddedResourceString(IDS_CONFIG_SERVER_USERS, nPaddedLength);
54 ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_users);
55
56 PrintPaddedResourceString(IDS_CONFIG_SERVER_FILES, nPaddedLength);
57 ConPuts(StdOut, L"...\n\n");
58
59 PrintPaddedResourceString(IDS_CONFIG_SERVER_IDLE, nPaddedLength);
60 if (ServerInfo->sv102_disc == SV_NODISC)
61 ConResPuts(StdOut, IDS_GENERIC_UNLIMITED);
62 else
63 ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_disc);
64
65 done:
66 if (TransportInfo != NULL)
67 NetApiBufferFree(TransportInfo);
68
69 return 0;
70 }
71
72
73 static
74 INT
75 DisplayWorkstationConfig(VOID)
76 {
77 PWKSTA_INFO_100 WorkstationInfo = NULL;
78 PWKSTA_USER_INFO_1 UserInfo = NULL;
79 PWKSTA_TRANSPORT_INFO_0 TransportInfo = NULL;
80 DWORD dwRead = 0, dwTotal = 0, i;
81 INT nPaddedLength = 38;
82 NET_API_STATUS Status;
83
84 Status = NetWkstaGetInfo(NULL, 100, (PBYTE*)&WorkstationInfo);
85 if (Status != NERR_Success)
86 goto done;
87
88 Status = NetWkstaUserGetInfo(NULL, 1, (PBYTE*)&UserInfo);
89 if (Status != NERR_Success)
90 goto done;
91
92 Status = NetWkstaTransportEnum(NULL,
93 0,
94 (PBYTE*)&TransportInfo,
95 MAX_PREFERRED_LENGTH,
96 &dwRead,
97 &dwTotal,
98 NULL);
99 if (Status != NERR_Success)
100 goto done;
101
102 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_NAME, nPaddedLength);
103 ConPrintf(StdOut, L"\\\\%s\n", WorkstationInfo->wki100_computername);
104
105 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_FULLNAME, nPaddedLength);
106 ConPuts(StdOut, L"...\n");
107
108 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_USERNAME, nPaddedLength);
109 ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_username);
110
111 ConPuts(StdOut, L"\n");
112
113 ConResPuts(StdOut, IDS_CONFIG_WORKSTATION_ACTIVE);
114 ConPuts(StdOut, L"\n");
115 for (i = 0; i < dwRead; i++)
116 {
117 ConPrintf(StdOut, L" %s (%s)\n",
118 &TransportInfo[i].wkti0_transport_name[8],
119 TransportInfo[i].wkti0_transport_address);
120 }
121 ConPuts(StdOut, L"\n");
122
123 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_VERSION, nPaddedLength);
124 ConPrintf(StdOut, L"%lu.%lu\n",
125 WorkstationInfo->wki100_ver_major,
126 WorkstationInfo->wki100_ver_minor);
127
128 ConPuts(StdOut, L"\n");
129
130 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_DOMAIN, nPaddedLength);
131 ConPrintf(StdOut, L"%s\n", WorkstationInfo->wki100_langroup);
132
133 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_LOGON, nPaddedLength);
134 ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_logon_domain);
135
136 done:
137 if (TransportInfo != NULL)
138 NetApiBufferFree(TransportInfo);
139
140 if (UserInfo != NULL)
141 NetApiBufferFree(UserInfo);
142
143 if (WorkstationInfo != NULL)
144 NetApiBufferFree(WorkstationInfo);
145
146 return 0;
147 }
148
149
150 INT
151 cmdConfig(
152 INT argc,
153 WCHAR **argv)
154 {
155 INT i, result = 0;
156 BOOL bServer = FALSE;
157 BOOL bWorkstation = FALSE;
158 PWSTR p, endptr;
159 BOOL bModify = FALSE;
160 LONG lValue;
161 PSERVER_INFO_102 ServerInfo = NULL;
162 NET_API_STATUS Status;
163
164 for (i = 2; i < argc; i++)
165 {
166 if (_wcsicmp(argv[i], L"server") == 0)
167 {
168 if (bWorkstation == FALSE)
169 bServer = TRUE;
170 continue;
171 }
172
173 if (_wcsicmp(argv[i], L"workstation") == 0)
174 {
175 if (bServer == FALSE)
176 bWorkstation = TRUE;
177 continue;
178 }
179
180 if (_wcsicmp(argv[i], L"help") == 0)
181 {
182 /* Print short syntax help */
183 if (bServer == TRUE)
184 {
185 ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
186 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX);
187 }
188 else
189 {
190 ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
191 PrintNetMessage(MSG_CONFIG_SYNTAX);
192 }
193 return 0;
194 }
195
196 if (_wcsicmp(argv[i], L"/help") == 0)
197 {
198 /* Print full help text*/
199 if (bServer == TRUE)
200 {
201 ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
202 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX);
203 PrintNetMessage(MSG_CONFIG_SERVER_HELP);
204 ConResPuts(StdOut, IDS_GENERIC_PAGE);
205 }
206 else
207 {
208 ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
209 PrintNetMessage(MSG_CONFIG_SYNTAX);
210 PrintNetMessage(MSG_CONFIG_HELP);
211 }
212 return 0;
213 }
214 }
215
216 if (bServer)
217 {
218 Status = NetServerGetInfo(NULL, 102, (PBYTE*)&ServerInfo);
219 if (Status != NERR_Success)
220 goto done;
221
222 for (i = 2; i < argc; i++)
223 {
224 if (argv[i][0] != L'/')
225 continue;
226
227 if (_wcsnicmp(argv[i], L"/autodisconnect:", 16) == 0)
228 {
229 p = &argv[i][16];
230 lValue = wcstol(p, &endptr, 10);
231 if (*endptr != 0)
232 {
233 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/AUTODISCONNECT");
234 result = 1;
235 goto done;
236 }
237
238 if (lValue < -1 || lValue > 65535)
239 {
240 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/AUTODISCONNECT");
241 result = 1;
242 goto done;
243 }
244
245 ServerInfo->sv102_disc = lValue;
246 bModify = TRUE;
247 }
248 else if (_wcsnicmp(argv[i], L"/srvcomment:", 12) == 0)
249 {
250 ServerInfo->sv102_comment = &argv[i][12];
251 bModify = TRUE;
252 }
253 else if (_wcsnicmp(argv[i], L"/hidden:", 8) == 0)
254 {
255 p = &argv[i][8];
256 if (_wcsicmp(p, L"yes") != 0 && _wcsicmp(p, L"no") != 0)
257 {
258 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/HIDDEN");
259 result = 1;
260 goto done;
261 }
262
263 ServerInfo->sv102_hidden = (_wcsicmp(p, L"yes") == 0) ? TRUE : FALSE;
264 bModify = TRUE;
265 }
266 else
267 {
268 ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
269 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX);
270 result = 1;
271 goto done;
272 }
273 }
274
275 if (bModify)
276 {
277 Status = NetServerSetInfo(NULL, 102, (PBYTE)&ServerInfo, NULL);
278 if (Status != NERR_Success)
279 result = 1;
280 }
281 else
282 {
283 result = DisplayServerConfig(ServerInfo);
284 }
285 }
286 else if (bWorkstation)
287 {
288 result = DisplayWorkstationConfig();
289 }
290 else
291 {
292 ConResPuts(StdOut, IDS_CONFIG_TEXT);
293 }
294
295 done:
296 if (ServerInfo != NULL)
297 NetApiBufferFree(ServerInfo);
298
299 if (result == 0)
300 PrintErrorMessage(ERROR_SUCCESS);
301
302 return result;
303 }