1/*
2	bwdpi.c for TrendMicro DPI engine / iQoS / WRS / APP partol
3
4	DPI engine 	: applications and devices identify engine
5	iQoS 		: tc control rule and qosd.conf
6	WRS 		: web protector or web content filter
7	APP partol	: apps filter
8	C&C		: C&C
9	VP		: virtual patch
10	DC		: data collection
11*/
12
13#include <rc.h>
14
15static void show_help(char *base)
16{
17	printf("%s Usage :\n", base);
18	printf("  bwdpi stat -m [mode] -n [name] -u [dura] -d [date]\n");
19	printf("  mode: traffic / traffic_wan / app / client_apps / client_web\n");
20	printf("  name: NULL / MAC / APP_NAME\n");
21	printf("  dura: realtime / month / week / day\n");
22	printf("  date: NULL / date\n");
23}
24
25int bwdpi_main(int argc, char **argv)
26{
27	//dbg("[bwdpi] argc=%d, argv[0]=%s, argv[1]=%s, argv[2]=%s\n", argc, argv[0], argv[1], argv[2]);
28	int c;
29	char *mode = NULL, *name = NULL, *dura = NULL, *date = NULL;
30	char *MAC = NULL;
31	char *page = NULL;
32	int clean_flag = 0;
33
34	if (argc == 1){
35		printf("Usage :\n");
36		printf("  bwdpi [iqos/qosd/wrs] [start/stop/restart]\n");
37		printf("  bwdpi dc [start/stop/restart] [ptah]\n");
38		printf("  bwdpi stat -m [mode] -n [name] -u [dura] -d [date]\n");
39		printf("  bwpdi history -m [MAC] -z -p [page]\n");
40		printf("  bwpdi app [0/1]\n");
41		printf("  bwpdi cc [0/1]\n");
42		printf("  bwpdi vp [0/1]\n");
43		printf("  bwpdi device -m [MAC]\n");
44		printf("  bwpdi device_info -m [MAC]\n");
45		printf("  bwpdi get_vp [0/2]\n");
46		printf("  bwpdi wrs_url\n");
47		printf("  bwpdi rewrite path1 path2 path3\n");
48		printf("  bwpdi checksize path size\n");
49		printf("  bwpdi extract path\n");
50		printf("  bwpdi get_app_patrol\n");
51		printf("  bwpdi get_anomaly [0/2]\n");
52		return 0;
53	}
54
55	if (!strcmp(argv[1], "iqos")){
56		if(argc != 3)
57		{
58			printf("  bwdpi iqos [start/stop/restart]\n");
59			return 0;
60		}
61		else
62		{
63			return tm_qos_main(argv[2]);
64		}
65	}
66	else if (!strcmp(argv[1], "qosd")){
67		if(argc != 3)
68		{
69			printf("  bwdpi qosd [start/stop/restart]\n");
70			return 0;
71		}
72		else
73		{
74			return qosd_main(argv[2]);
75		}
76	}
77	else if (!strcmp(argv[1], "wrs")){
78		if(argc != 3)
79		{
80			printf("  bwdpi wrs [start/stop/restart]\n");
81			return 0;
82		}
83		else
84		{
85			return wrs_main(argv[2]);
86		}
87
88	}
89	else if (!strcmp(argv[1], "stat")){
90		while ((c = getopt(argc, argv, "m:n:u:d:h")) != -1)
91		{
92			switch(c)
93			{
94				case 'm':
95					mode = optarg;
96					break;
97				case 'n':
98					name = optarg;
99					break;
100				case 'u':
101					dura = optarg;
102					break;
103				case 'd':
104					date = optarg;
105					break;
106				case 'h':
107					show_help(argv[1]);
108					break;
109				default:
110					printf("ERROR: unknown option %c\n", c);
111					break;
112			}
113		}
114		//dbg("[bwdpi] mode=%s, name=%s, dura=%s, date=%s\n", mode, name, dura, date);
115		return stat_main(mode, name, dura, date);
116	}
117	else if (!strcmp(argv[1], "history")){
118		while ((c = getopt(argc, argv, "m:zp:")) != -1)
119		{
120			switch(c)
121			{
122				case 'm':
123					MAC = optarg;
124					clean_flag = 0;
125					break;
126				case 'z':
127					printf("clear web history\n");
128					clean_flag = 1;
129					break;
130				case 'p':
131					page = optarg;
132					break;
133				default:
134					printf("  bwpdi history -m [MAC] -z -p [page]\n");
135					break;
136			}
137		}
138
139		if(clean_flag)
140		{
141			return clear_user_domain();
142		}
143		else
144		{
145			return web_history_main(MAC, page);
146		}
147	}
148	else if (!strcmp(argv[1], "app")){
149		if(argc != 3)
150		{
151			printf("  bwpdi app [0/1]\n");
152			return 0;
153		}
154		else
155		{
156			return wrs_app_main(argv[2]);
157		}
158	}
159	else if (!strcmp(argv[1], "cc")){
160		if(argc != 3)
161		{
162			printf("  bwpdi cc [0/1]\n");
163			return 0;
164		}
165		else
166		{
167			return set_cc(argv[2]);
168		}
169	}
170	else if (!strcmp(argv[1], "vp")){
171		if(argc != 3)
172		{
173			printf("  bwpdi vp [0/1]\n");
174			return 0;
175		}
176		else
177		{
178			return set_vp(argv[2]);
179		}
180	}
181	else if (!strcmp(argv[1], "dc")){
182		if(argc == 3)
183		{
184			return data_collect_main(argv[2], NULL);
185		}
186		else if(argc == 4)
187		{
188			return data_collect_main(argv[2], argv[3]);
189		}
190		else
191		{
192			printf("  bwpdi dc [start/stop/restart] [path]\n");
193			return 0;
194		}
195	}
196	else if (!strcmp(argv[1], "device")){
197		while ((c = getopt(argc, argv, "m:")) != -1)
198		{
199			switch(c)
200			{
201				case 'm':
202					name = optarg;
203					break;
204				default:
205					printf("  bwpdi device -m [MAC]\n");
206					break;
207			}
208		}
209		return device_main(name);
210	}
211	else if (!strcmp(argv[1], "device_info")){
212		while ((c = getopt(argc, argv, "m:")) != -1)
213		{
214			switch(c)
215			{
216				case 'm':
217					name = optarg;
218					break;
219				default:
220					printf("  bwpdi device_info -m [MAC]\n");
221					break;
222			}
223		}
224		return device_info_main(name);
225	}
226	else if (!strcmp(argv[1], "get_vp")){
227		if(argc != 3)
228		{
229			printf("  bwpdi get_vp [0/2]\n");
230			return 0;
231		}
232		else
233		{
234			return get_vp(argv[2]);
235		}
236	}
237	else if (!strcmp(argv[1], "wrs_url")){
238		if(argc != 2)
239		{
240			printf("  bwpdi wrs_url\n");
241			return 0;
242		}
243		else
244		{
245			return wrs_url_main();
246		}
247	}
248	else if (!strcmp(argv[1], "rewrite")){
249		if(argc != 5)
250		{
251			printf("  bwpdi rewrite path1 path2 path3\n");
252			return 0;
253		}
254		else
255		{
256			return rewrite_main(argv[2], argv[3], argv[4]);
257		}
258	}
259	else if (!strcmp(argv[1], "checksize")){
260		if(argc != 4)
261		{
262			printf("  bwpdi checksize path size\n");
263			return 0;
264		}
265		else
266		{
267			return check_filesize_main(argv[2], argv[3]);
268		}
269	}
270	else if (!strcmp(argv[1], "extract")){
271		if(argc != 3)
272		{
273			printf("  bwpdi extract path\n");
274			return 0;
275		}
276		else
277		{
278			return extract_data_main(argv[2]);
279		}
280	}
281	else if (!strcmp(argv[1], "get_app_patrol")){
282		if(argc != 2)
283		{
284			printf("  bwpdi get_app_patrol\n");
285			return 0;
286		}
287		else
288		{
289			return get_app_patrol_main();
290		}
291	}
292	else if (!strcmp(argv[1], "get_anomaly")){
293		if(argc != 3)
294		{
295			printf("  bwpdi get_anomaly [0/2]\n");
296			return 0;
297		}
298		else
299		{
300			return get_anomaly_main(argv[2]);
301		}
302	}
303	else{
304		printf("Usage :\n");
305		printf("  bwdpi [iqos/qosd/wrs] [start/stop/restart]\n");
306		printf("  bwdpi dc [start/stop/restart] [ptah]\n");
307		printf("  bwdpi stat -m [mode] -n [name] -u [dura] -d [date]\n");
308		printf("  bwpdi history -m [MAC] -z -p [page]\n");
309		printf("  bwpdi app [0/1]\n");
310		printf("  bwpdi cc [0/1]\n");
311		printf("  bwpdi vp [0/1]\n");
312		printf("  bwpdi device -m [MAC]\n");
313		printf("  bwpdi device_info -m [MAC]\n");
314		printf("  bwpdi get_vp [0/2]\n");
315		printf("  bwpdi wrs_url\n");
316		printf("  bwpdi rewrite path1 path2 path3\n");
317		printf("  bwpdi checksize path size\n");
318		printf("  bwpdi extract path\n");
319		printf("  bwpdi get_app_patrol\n");
320		printf("  bwpdi get_anomaly [0/2]\n");
321		return 0;
322	}
323
324	return 1;
325}
326