* use the ARRAYSIZE macro everywhere
[olsrd.git] / lib / tas / test.c
1 /*
2  * The olsr.org Optimized Link-State Routing daemon (olsrd)
3  *
4  * Copyright (c) 2004, Thomas Lopatic (thomas@olsr.org)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without 
8  * modification, are permitted provided that the following conditions 
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright 
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright 
14  *   notice, this list of conditions and the following disclaimer in 
15  *   the documentation and/or other materials provided with the 
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its 
18  *   contributors may be used to endorse or promote products derived 
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 #include "src/link.h"
43 #include "src/plugin.h"
44 #include "src/lib.h"
45 #include "src/os_unix.h"
46 #include "src/http.h"
47 #include "src/glua.h"
48 #include "src/glua_ext.h"
49
50 #include <stdio.h>
51 #include <unistd.h>
52 #include <signal.h>
53 #include <stdlib.h>
54 #include <string.h>
55
56 static void sigHand(int sig) __attribute__((noreturn));
57 static void sigHand(int sig __attribute__((unused)))
58 {
59   httpShutdown();
60   exit(0);
61 }
62
63 static void usage(void)
64 {
65   fprintf(stderr, "usage: tas [--address ip-address] [--port port-number]\n");
66   fprintf(stderr, "           [--work-dir work-directory] [--root-dir root-directory]\n");
67   fprintf(stderr, "           [--password password] [--user user] [--sess-time session-timeout]\n");
68   fprintf(stderr, "           [--index-file index-file] [--pub-dir public-directory]\n");
69   fprintf(stderr, "           [--quantum quantum] [--mess-time message-timeout]\n");
70   fprintf(stderr, "           [--mess-limit message-queue-limit]\n");
71 }
72
73 int main(int ac, char *av[])
74 {
75   int i;
76
77   httpInit();
78
79   for (i = 1; i < ac; i++)
80   {
81     if (strcmp(av[i], "--address") == 0)
82     {
83       if (++i == ac)
84       {
85         fprintf(stderr, "missing address parameter\n");
86         usage();
87         return 1;
88       }
89
90       if (httpSetAddress(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
91       {
92         fprintf(stderr, "cannot set address\n");
93         return 1;
94       }
95     }
96
97     else if (strcmp(av[i], "--port") == 0)
98     {
99       if (++i == ac)
100       {
101         fprintf(stderr, "missing port parameter\n");
102         usage();
103         return 1;
104       }
105
106       if (httpSetPort(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
107       {
108         fprintf(stderr, "cannot set port\n");
109         return 1;
110       }
111     }
112
113     else if (strcmp(av[i], "--work-dir") == 0)
114     {
115       if (++i == ac)
116       {
117         fprintf(stderr, "missing work directory parameter\n");
118         usage();
119         return 1;
120       }
121
122       if (httpSetWorkDir(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
123       {
124         fprintf(stderr, "cannot set work directory\n");
125         return 1;
126       }
127     }
128
129     else if (strcmp(av[i], "--root-dir") == 0)
130     {
131       if (++i == ac)
132       {
133         fprintf(stderr, "missing root directory parameter\n");
134         usage();
135         return 1;
136       }
137
138       if (httpSetRootDir(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
139       {
140         fprintf(stderr, "cannot set root directory\n");
141         return 1;
142       }
143     }
144
145     else if (strcmp(av[i], "--index-file") == 0)
146     {
147       if (++i == ac)
148       {
149         fprintf(stderr, "missing index file parameter\n");
150         usage();
151         return 1;
152       }
153
154       httpSetIndexFile(av[i], NULL, (set_plugin_parameter_addon){0});
155     }
156
157     else if (strcmp(av[i], "--user") == 0)
158     {
159       if (++i == ac)
160       {
161         fprintf(stderr, "missing user parameter\n");
162         usage();
163         return 1;
164       }
165
166       httpSetUser(av[i], NULL, (set_plugin_parameter_addon){0});
167     }
168
169     else if (strcmp(av[i], "--password") == 0)
170     {
171       if (++i == ac)
172       {
173         fprintf(stderr, "missing password parameter\n");
174         usage();
175         return 1;
176       }
177
178       httpSetPassword(av[i], NULL, (set_plugin_parameter_addon){0});
179     }
180
181     else if (strcmp(av[i], "--sess-time") == 0)
182     {
183       if (++i == ac)
184       {
185         fprintf(stderr, "missing timeout parameter\n");
186         usage();
187         return 1;
188       }
189
190       if (httpSetSessTime(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
191       {
192         fprintf(stderr, "cannot set session timeout\n");
193         return 1;
194       }
195     }
196
197     else if (strcmp(av[i], "--pub-dir") == 0)
198     {
199       if (++i == ac)
200       {
201         fprintf(stderr, "missing public directory parameter\n");
202         usage();
203         return 1;
204       }
205
206       httpSetPubDir(av[i], NULL, (set_plugin_parameter_addon){0});
207     }
208
209     else if (strcmp(av[i], "--quantum") == 0)
210     {
211       if (++i == ac)
212       {
213         fprintf(stderr, "missing quantum parameter\n");
214         usage();
215         return 1;
216       }
217
218       if (httpSetQuantum(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
219       {
220         fprintf(stderr, "cannot set quantum\n");
221         return 1;
222       }
223     }
224
225     else if (strcmp(av[i], "--mess-time") == 0)
226     {
227       if (++i == ac)
228       {
229         fprintf(stderr, "missing timeout parameter\n");
230         usage();
231         return 1;
232       }
233
234       if (httpSetMessTime(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
235       {
236         fprintf(stderr, "cannot set message timeout\n");
237         return 1;
238       }
239     }
240
241     else if (strcmp(av[i], "--mess-limit") == 0)
242     {
243       if (++i == ac)
244       {
245         fprintf(stderr, "missing limit parameter\n");
246         usage();
247         return 1;
248       }
249
250       if (httpSetMessLimit(av[i], NULL, (set_plugin_parameter_addon){0}) < 0)
251       {
252         fprintf(stderr, "cannot set message queue limit\n");
253         return 1;
254       }
255     }
256
257     else
258     {
259       fprintf(stderr, "invalid argument: %s\n", av[i]);
260       usage();
261       return 1;
262     }
263   }
264
265   signal(SIGINT, sigHand);
266   signal(SIGTERM, sigHand);
267
268   if (httpSetup() < 0)
269   {
270     fprintf(stderr, "cannot set up HTTP server\n");
271     return 1;
272   }
273
274   while (1)
275   {
276     if (httpService(10) < 0)
277     {
278       fprintf(stderr, "cannot run HTTP server\n");
279       return 1;
280     }
281
282     usleep(100000);
283   }
284
285   return 0;
286 }
287
288 /*
289  * Local Variables:
290  * c-basic-offset: 2
291  * indent-tabs-mode: nil
292  * End:
293  */