1 | /***************************************
2 | $Revision: 1.15 $
3 |
4 | Constants module (co) - this _should_ eventually get merged in with the
5 | config module.
6 |
7 | Status: NOT REVUED, NOT TESTED
8 |
9 | +html+ <DL COMPACT>
10 | +html+ <DT>Online References:
11 | +html+ <DD><UL>
12 | +html+ </UL>
13 | +html+ </DL>
14 | +html+ <PRE>
15 | Instructions for use:
16 |
17 | To add a constant:
18 | 0. Add a default value for the constant. (string)
19 | 1. Add the constant declaration to the _Constants struct.
20 | 2. Add a CO_get_function()
21 | 3. Add initializing code to init_constants()
22 |
23 | To access the constant:
24 | use the CO_get<Constant>() function from your other code.
25 | +html+ </PRE>
26 |
27 | ******************/ /******************
28 | Filename : constants.c
29 | Author : ottrey@ripe.net
30 | OSs Tested : Solaris
31 | Related Modules : Used in conjunction with the properties module.
32 | Problems :
33 | To Do : Merge into a "config module"
34 | Comments :
35 | ******************/ /******************
36 | Copyright (c) 1999 RIPE NCC
37 |
38 | All Rights Reserved
39 |
40 | Permission to use, copy, modify, and distribute this software and its
41 | documentation for any purpose and without fee is hereby granted,
42 | provided that the above copyright notice appear in all copies and that
43 | both that copyright notice and this permission notice appear in
44 | supporting documentation, and that the name of the author not be
45 | used in advertising or publicity pertaining to distribution of the
46 | software without specific, written prior permission.
47 |
48 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
49 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
50 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
51 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
52 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
53 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
54 | ***************************************/
55 | #include <stdio.h>
56 | #include <stdlib.h>
57 | #include <string.h>
58 |
59 | #include "memwrap.h"
60 | #include "properties.h"
61 |
62 | #define STR_XL 4095
63 |
64 | /*+ Maximum number of constants. +*/
65 | #define MAX_CONSTS 100
66 |
67 | /*+ Default values for constants. +*/
68 | #define DEFLT_MAX_THREADS "10"
69 | #define DEFLT_WHOIS_PORT "0"
70 | #define DEFLT_CONFIG_PORT "0"
71 | #define DEFLT_MIRROR_PORT "0"
72 | #define DEFLT_UPDATE_PORT "0"
73 | #define DEFLT_HOST "mysql.database.net"
74 | #define DEFLT_USER "xxx"
75 | #define DEFLT_PASSWORD "xxx"
76 | #define DEFLT_DATABASE_PORT "3306"
77 | #define DEFLT_DATABASE "RIPE"
78 | #define DEFLT_QUERY "SHOW TABLES"
79 | #define DEFLT_IN_QUERY "SELECT * FROM inetnum"
80 | #define DEFLT_RT_QUERY "SELECT * FROM route"
81 | #define DEFLT_AUTHENTICATE "0"
82 | #define DEFLT_WHOIS_SUSPENDED "0"
83 | #define DEFLT_DO_SERVER "1"
84 | #define DEFLT_WELCOME "Welcome to the whois R.I.P. server.\n"
85 | #define DEFLT_PROMPT "whois R.I.P. config> "
86 | #define DEFLT_CLEAR_SCREEN "0"
87 | #define DEFLT_SLEEP_TIME "1"
88 | #define DEFLT_ACCOUNTING "0"
89 | #define DEFLT_QUERY_LOGGING "1"
90 | #define DEFLT_QUERY_LOGFILE "stdout"
91 | #define DEFLT_INSTR_LOGGING "1"
92 | #define DEFLT_INSTR_LOGFILE "stdout"
93 | #define DEFLT_COMND_LOGGING "1"
94 | #define DEFLT_COMND_LOGFILE "stdout"
95 | #define DEFLT_TESTS_LOGGING "1"
96 | #define DEFLT_TESTS_LOGFILE "stdout"
97 | #define DEFLT_THREAD_LOGGING "1"
98 | #define DEFLT_THREAD_LOGFILE "stdout"
99 | #define DEFLT_SOCKET_LOGGING "1"
100 | #define DEFLT_SOCKET_LOGFILE "stdout"
101 | #define DEFLT_CONFIG_LOGGING "1"
102 | #define DEFLT_CONFIG_LOGFILE "stdout"
103 | #define DEFLT_NRTM_HOST "nrtm.nowhere.xx"
104 | #define DEFLT_NRTM_VERSION "1"
105 | #define DEFLT_NRTM_DELAY "600"
106 | #define DEFLT_NRTM_CSERFILE "RIPE.CURRENTSERIAL"
107 | #define DEFLT_NRTM_LOGFILE "nrtm.log"
108 | #define DEFLT_UPDATE_MODE "0"
109 |
110 | /*+ Each constant has a +*/
111 | struct _constant {
112 | const char *token; /*+ Token to be found in properties file. +*/
113 | const char *deflt; /*+ Default value for the constant. +*/
114 | int (*set_func)(void *, char *); /*+ Function to set the constant. +*/
115 | void *constant_ptr; /*+ Pointer to the constant value +*/
116 | char *(*show_func)(void *); /*+ Function to show the constant. +*/
117 | };
118 |
119 |
120 | /*+ The Constants array has a +*/
121 | typedef struct _Constants {
122 | int max_threads[1]; /*+ Maximum number of server threads. +*/
123 | char whois_port[64]; /*+ Port for whois clients to rendezvous with. +*/
124 | char config_port[64]; /*+ Port for config clients to rendezvous with. +*/
125 | char mirror_port[64]; /*+ Port for mirror clients to rendezvous with. +*/
126 | char update_port[64]; /*+ Port for DBupdate clients to rendezvous with. +*/
127 | char host[64]; /*+ Host for the database. +*/
128 | char user[64]; /*+ User for the database. +*/
129 | char password[64]; /*+ Password for the database. +*/
130 | int database_port[1]; /*+ Port for the database. +*/
131 | char database[64]; /*+ Database name. +*/
132 | char query[1024]; /*+ Query for the database. +*/
133 | char in_query[1024]; /*+ Query for the radix tree initialization. +*/
134 | char rt_query[1024]; /*+ Query for the radix tree initialization. +*/
135 | int authenticate[1]; /*+ Authenticate users. +*/
136 | int whois_suspended[1]; /*+ Suspend the whois server. +*/
137 | char welcome[1024]; /*+ Welcome for config protocol. +*/
138 | char prompt[1024]; /*+ Prompt for config protocol. +*/
139 | int clear_screen[1]; /*+ Clear screen after config commands. +*/
140 | int sleep_time[1]; /*+ Sleep time (in sec) between config commands. +*/
141 | int accounting[1]; /*+ Conduct accounting on whois queries. +*/
142 | int query_logging[1]; /*+ Log the SQL queries. +*/
143 | char query_logfile[1024]; /*+ Query logfile for the database. +*/
144 | int instr_logging[1]; /*+ Log the whois instrucs. +*/
145 | char instr_logfile[1024]; /*+ Query logfile for the whois instrucs. +*/
146 | int comnd_logging[1]; /*+ Log the whois commands. +*/
147 | char comnd_logfile[1024]; /*+ Query logfile for the whois commands. +*/
148 | int tests_logging[1]; /*+ Log the whois tests. +*/
149 | char tests_logfile[1024]; /*+ Query logfile for the whois tests. +*/
150 | int thread_logging[1]; /*+ Log the whois threads. +*/
151 | char thread_logfile[1024]; /*+ Query logfile for the whois threads. +*/
152 | int socket_logging[1]; /*+ Log the socket. +*/
153 | char socket_logfile[1024]; /*+ Logfile for the socket. +*/
154 | int config_logging[1]; /*+ Log the config. +*/
155 | char config_logfile[1024]; /*+ Logfile for the config. +*/
156 | char nrtm_host[64];/*+ NRTM server +*/
157 | char nrtm_port[64];/*+ Port of NRTM server when we are acting as a client +*/
158 | int nrtm_version[1];/*+ NRTM protocol version +*/
159 | int nrtm_delay[1];/*+ delay between syncs +*/
160 | char nrtm_cserialfile[1024];/*+ name of the file containing current serial +*/
161 | char nrtm_logfile[1024];/*+ NRTM logfile for failure reports +*/
162 | int do_nrtm[1];
163 | int update_mode[1];/*+ protected/unprotected (==dummy_allowed) +*/
164 | int do_update[1]; /*+ switches on and off the updates +*/
165 | int do_server[1]; /*+ turns off execution of the all servers(threads) +*/
166 | } *Constants;
167 |
168 | /* in addition, we make a table of Sources here: */
169 | /*+ Source database mirrors +*/
170 | typedef struct {
171 | char src[32];
172 | char db[32];
173 | } source_info_t;
174 |
175 | source_info_t const Sources[] = {
176 | {"RIPE","RIPE6"}, /* the db part actually gets overwritten in
177 | init_constants */
178 |
179 | /* "ARIN",
180 | "APNIC",
181 | */
182 |
183 | {"",""}
184 | }; /* Sources */
185 |
186 | char * const Sources_vector[] = {
187 | "RIPE",
188 | NULL
189 | };
190 |
191 | /*
192 | * Global Variables
193 | */
194 | /*+ The array of Global Constants. +*/
195 | static Constants Global_constants=NULL;
196 |
197 | /*
198 | * Set Functions
199 | */
200 | static int set_string(void *constant, char *value) {
201 |
202 | strcpy((char *)constant, value);
203 |
204 | return 0;
205 | } /* set_string() */
206 |
207 | static int set_int(void *constant, char *value) {
208 | int i;
209 |
210 | i = atol(value);
211 | ((int *)constant)[0] = i;
212 |
213 | return 0;
214 | } /* set_int() */
215 |
216 | static int set_boolean(void *constant, char *value) {
217 | int result=1;
218 | int i;
219 |
220 | i = atol(value);
221 |
222 | /* If a valid boolean */
223 | if ( (i == 0) || (i == 1)) {
224 | ((int *)constant)[0] = i;
225 | result = 0;
226 | }
227 |
228 | return result;
229 | } /* set_boolean() */
230 |
231 |
232 | /*
233 | * Show Functions
234 | */
235 | /* AR. changed for unification with oter show funcs */
236 | static char *show_string(void *constant) {
237 | char *tmp;
238 |
239 | /* tmp = calloc(1, strlen((char *)constant)+1); */
240 | dieif( wr_malloc((void **)&tmp, strlen((char *)constant)+1) != UT_OK);
241 |
242 | strcpy(tmp, (char *)constant);
243 | /* return((char *)constant); */
244 | return tmp;
245 | } /* show_string() */
246 |
247 | static char *show_int(void *constant) {
248 | char *tmp;
249 |
250 | /* tmp = calloc(1, 64); */
251 | dieif( wr_malloc((void **)&tmp, 64) != UT_OK);
252 |
253 | sprintf(tmp, "%d", ((int *)constant)[0]);
254 | return tmp;
255 | } /* show_int() */
256 |
257 | static char *show_boolean(void *constant) {
258 | char *tmp;
259 |
260 | /* tmp = calloc(1, 64); */
261 | dieif( wr_malloc((void **)&tmp, 64) != UT_OK);
262 |
263 | sprintf(tmp, "%d", ((int *)constant)[0]);
264 | return tmp;
265 | } /* show_boolean() */
266 |
267 |
268 | /*
269 | * Get Functions
270 | */
271 | int CO_get_max_threads() {
272 | return Global_constants->max_threads[0];
273 | }
274 |
275 | char *CO_get_whois_port() {
276 | return Global_constants->whois_port;
277 | }
278 |
279 | char *CO_get_config_port() {
280 | return Global_constants->config_port;
281 | }
282 |
283 | char *CO_get_mirror_port() {
284 | return Global_constants->mirror_port;
285 | }
286 |
287 | char *CO_get_update_port() {
288 | return Global_constants->update_port;
289 | }
290 |
291 | char *CO_get_host() {
292 | return Global_constants->host;
293 | }
294 |
295 | char *CO_get_user() {
296 | return Global_constants->user;
297 | }
298 |
299 | char *CO_get_password() {
300 | return Global_constants->password;
301 | }
302 |
303 | int CO_get_database_port() {
304 | return Global_constants->database_port[0];
305 | }
306 |
307 | char *CO_get_database() {
308 | return Global_constants->database;
309 | }
310 |
311 | char *CO_get_query() {
312 | return Global_constants->query;
313 | }
314 |
315 | char *CO_get_in_query() {
316 | return Global_constants->in_query;
317 | }
318 |
319 | char *CO_get_rt_query() {
320 | return Global_constants->rt_query;
321 | }
322 |
323 | int CO_get_authenticate() {
324 | return Global_constants->authenticate[0];
325 | }
326 |
327 | int CO_get_whois_suspended() {
328 | return Global_constants->whois_suspended[0];
329 | }
330 |
331 | char *CO_get_welcome() {
332 | return Global_constants->welcome;
333 | }
334 |
335 | char *CO_get_prompt() {
336 | return Global_constants->prompt;
337 | }
338 |
339 | int CO_get_clear_screen() {
340 | return Global_constants->clear_screen[0];
341 | }
342 |
343 | int CO_get_sleep_time() {
344 | return Global_constants->sleep_time[0];
345 | }
346 |
347 | int CO_get_accounting() {
348 | return Global_constants->accounting[0];
349 | }
350 |
351 | int CO_get_query_logging() {
352 | return Global_constants->query_logging[0];
353 | }
354 |
355 | char *CO_get_query_logfile() {
356 | return Global_constants->query_logfile;
357 | }
358 |
359 | int CO_get_instr_logging() {
360 | return Global_constants->instr_logging[0];
361 | }
362 |
363 | char *CO_get_instr_logfile() {
364 | return Global_constants->instr_logfile;
365 | }
366 |
367 | int CO_get_comnd_logging() {
368 | return Global_constants->comnd_logging[0];
369 | }
370 |
371 | char *CO_get_comnd_logfile() {
372 | return Global_constants->comnd_logfile;
373 | }
374 |
375 | int CO_get_tests_logging() {
376 | return Global_constants->tests_logging[0];
377 | }
378 |
379 | char *CO_get_tests_logfile() {
380 | return Global_constants->tests_logfile;
381 | }
382 |
383 | int CO_get_thread_logging() {
384 | return Global_constants->thread_logging[0];
385 | }
386 |
387 | char *CO_get_thread_logfile() {
388 | return Global_constants->thread_logfile;
389 | }
390 |
391 | int CO_get_socket_logging() {
392 | return Global_constants->socket_logging[0];
393 | }
394 |
395 | char *CO_get_socket_logfile() {
396 | return Global_constants->socket_logfile;
397 | }
398 |
399 | int CO_get_config_logging() {
400 | return Global_constants->config_logging[0];
401 | }
402 |
403 | char *CO_get_config_logfile() {
404 | return Global_constants->config_logfile;
405 | }
406 |
407 | /*++++ NRTM stuff ++++*/
408 |
409 | char *CO_get_nrtm_host() {
410 | return Global_constants->nrtm_host;
411 | }
412 |
413 | char *CO_get_nrtm_port() {
414 | return Global_constants->nrtm_port;
415 | }
416 |
417 | int CO_get_nrtm_version() {
418 | return Global_constants->nrtm_version[0];
419 | }
420 |
421 | int CO_get_nrtm_delay() {
422 | return Global_constants->nrtm_delay[0];
423 | }
424 |
425 | char *CO_get_nrtm_cserialfile() {
426 | return Global_constants->nrtm_cserialfile;
427 | }
428 |
429 | char *CO_get_nrtm_logfile() {
430 | return Global_constants->nrtm_logfile;
431 | }
432 |
433 | int CO_get_do_nrtm() {
434 | return Global_constants->do_nrtm[0];
435 | }
436 |
437 | int CO_get_update_mode() {
438 | return Global_constants->update_mode[0];
439 | }
440 |
441 | int CO_get_do_update() {
442 | return Global_constants->do_update[0];
443 | }
444 |
445 | int CO_get_do_server() {
446 | return Global_constants->do_server[0];
447 | }
448 |
449 | /* source_foreach() */
450 | /*++++++++++++++++++++++++++++++++++++++
451 | Function to adds the source string to the created string from the Glist of sources.
452 | It is called via g_list_foreach().
453 |
454 | void *element_data The source name.
455 |
456 | void *result_buf_ptr The string to be populated.
457 |
458 | More:
459 | +html+ <PRE>
460 | Authors:
461 | ottrey
462 |
463 | +html+ </PRE><DL COMPACT>
464 | +html+ <DT>Online References:
465 | +html+ <DD><UL>
466 | +html+ </UL></DL>
467 |
468 | ++++++++++++++++++++++++++++++++++++++*/
469 | static void source_foreach(void *element_data, void *result_buf_ptr) {
470 | char *source = element_data;
471 | char *result_buf = (char *)result_buf_ptr;
472 |
473 | strcat(result_buf, source);
474 | strcat(result_buf, ",");
475 |
476 | } /* source_foreach() */
477 |
478 | /* CO_sources_to_string() */
479 | /*++++++++++++++++++++++++++++++++++++++
480 | Creates a string from Sources.
481 |
482 | char * CO_sources_to_string Returns a string of the Sources.
483 |
484 | More:
485 | +html+ <PRE>
486 | Authors:
487 | ottrey
488 |
489 | +html+ </PRE><DL COMPACT>
490 | +html+ <DT>Online References:
491 | +html+ <DD><UL>
492 | +html+ </UL></DL>
493 |
494 | ++++++++++++++++++++++++++++++++++++++*/
495 | char * CO_sources_to_string(void) {
496 | char *result=NULL;
497 | char result_buf[STR_XL];
498 | int result_len;
499 | int i;
500 |
501 | strcpy(result_buf, "{");
502 | for (i=0; Sources[i].src[0] != 0 ; i++) {
503 | strcat(result_buf, Sources[i].src);
504 | strcat(result_buf, ",");
505 | }
506 | result_len = strlen(result_buf);
507 | result_buf[result_len-1] = '}';
508 | result_buf[result_len] = '\0';
509 |
510 | /* result = (char *)calloc(1, result_len+1); */
511 | dieif( wr_malloc((void **)&result, result_len+1) != UT_OK);
512 | strcpy(result, result_buf);
513 |
514 | return result;
515 |
516 | } /* CO_sources_to_string() */
517 |
518 | /* CO_sources_list_to_string() */
519 | /*++++++++++++++++++++++++++++++++++++++
520 | Creates a string from the sources in the GList.
521 |
522 | GList *sources_list The GList of sources.
523 |
524 | More:
525 | +html+ <PRE>
526 | Authors:
527 | ottrey
528 |
529 | +html+ </PRE><DL COMPACT>
530 | +html+ <DT>Online References:
531 | +html+ <DD><UL>
532 | +html+ </UL></DL>
533 |
534 | ++++++++++++++++++++++++++++++++++++++*/
535 | char *CO_sources_list_to_string(GList *sources_list) {
536 | char *result=NULL;
537 | char result_buf[STR_XL];
538 | int result_len;
539 |
540 | strcpy(result_buf, "{");
541 | g_list_foreach(sources_list, source_foreach, &result_buf);
542 | result_len = strlen(result_buf);
543 | if (result_len == 1) {
544 | /* If an empty set */
545 | result_buf[1] = '}';
546 | result_buf[2] = '\0';
547 | }
548 | else {
549 | result_buf[result_len-1] = '}';
550 | result_buf[result_len] = '\0';
551 | }
552 |
553 | /* result = (char *)calloc(1, result_len+1); */
554 | dieif( wr_malloc((void **)&result, result_len+1) != UT_OK);
555 | strcpy(result, result_buf);
556 |
557 | return result;
558 |
559 | } /* CO_sources_list_to_string() */
560 |
561 |
562 | char * const *CO_get_sources(void) {
563 | return Sources_vector;
564 | } /* CO_get_sources() */
565 |
566 | const char *CO_get_source(int index) {
567 | const char *s = Sources[index].src;
568 |
569 | return (*s == 0)
570 | ? NULL
571 | : s;
572 |
573 | } /* CO_get_source() */
574 |
575 | const char *CO_get_source_database(int index) {
576 | const char *s = Sources[index].db;
577 |
578 | return (*s == 0)
579 | ? NULL
580 | : s;
581 |
582 | } /* CO_get_database() */
583 |
584 |
585 |
586 | /*+
587 | * Contains the constant definitions for the Token, set_function, show_function.
588 | * (See: _constant)
589 | +*/
590 | static struct _constant constant[MAX_CONSTS];
591 |
592 | /* init_constants() */
593 | /*++++++++++++++++++++++++++++++++++++++
594 | Initialize all the constants.
595 |
596 | More:
597 | +html+ <PRE>
598 | Authors:
599 | ottrey
600 |
601 | +html+ </PRE><DL COMPACT>
602 | +html+ <DT>Online References:
603 | +html+ <DD><UL>
604 | +html+ </UL></DL>
605 |
606 | ++++++++++++++++++++++++++++++++++++++*/
607 | static void init_constants(void) {
608 | int n=0;
609 |
610 | constant[n].token="SV.max_threads";
611 | constant[n].deflt=DEFLT_MAX_THREADS;
612 | constant[n].set_func=set_int;
613 | constant[n].constant_ptr=Global_constants->max_threads;
614 | constant[n].show_func=show_int;
615 | n++;
616 |
617 | constant[n].token="SV.whois_port";
618 | constant[n].deflt=DEFLT_WHOIS_PORT;
619 | constant[n].set_func=set_string;
620 | constant[n].constant_ptr=Global_constants->whois_port;
621 | constant[n].show_func=show_string;
622 | n++;
623 |
624 | constant[n].token="SV.config_port";
625 | constant[n].deflt=DEFLT_CONFIG_PORT;
626 | constant[n].set_func=set_string;
627 | constant[n].constant_ptr=Global_constants->config_port;
628 | constant[n].show_func=show_string;
629 | n++;
630 |
631 | constant[n].token="SV.mirror_port";
632 | constant[n].deflt=DEFLT_MIRROR_PORT;
633 | constant[n].set_func=set_string;
634 | constant[n].constant_ptr=Global_constants->mirror_port;
635 | constant[n].show_func=show_string;
636 | n++;
637 |
638 | constant[n].token="SV.update_port";
639 | constant[n].deflt=DEFLT_UPDATE_PORT;
640 | constant[n].set_func=set_string;
641 | constant[n].constant_ptr=Global_constants->update_port;
642 | constant[n].show_func=show_string;
643 | n++;
644 |
645 | constant[n].token="DB.host";
646 | constant[n].deflt=DEFLT_HOST;
647 | constant[n].set_func=set_string;
648 | constant[n].constant_ptr=Global_constants->host;
649 | constant[n].show_func=show_string;
650 | n++;
651 |
652 | constant[n].token="DB.user";
653 | constant[n].deflt=DEFLT_USER;
654 | constant[n].set_func=set_string;
655 | constant[n].constant_ptr=Global_constants->user;
656 | constant[n].show_func=show_string;
657 | n++;
658 |
659 | constant[n].token="DB.password";
660 | constant[n].deflt=DEFLT_PASSWORD;
661 | constant[n].set_func=set_string;
662 | constant[n].constant_ptr=Global_constants->password;
663 | constant[n].show_func=show_string;
664 | n++;
665 |
666 | constant[n].token="DB.database_port";
667 | constant[n].deflt=DEFLT_DATABASE_PORT;
668 | constant[n].set_func=set_int;
669 | constant[n].constant_ptr=Global_constants->database_port;
670 | constant[n].show_func=show_int;
671 | n++;
672 |
673 | constant[n].token="DB.database";
674 | constant[n].deflt=DEFLT_DATABASE;
675 | constant[n].set_func=set_string;
676 | constant[n].constant_ptr=Global_constants->database;
677 | constant[n].show_func=show_string;
678 | n++;
679 |
680 | constant[n].token="DB.query";
681 | constant[n].deflt=DEFLT_QUERY;
682 | constant[n].set_func=set_string;
683 | constant[n].constant_ptr=Global_constants->query;
684 | constant[n].show_func=show_string;
685 | n++;
686 |
687 | constant[n].token="RX.in_query";
688 | constant[n].deflt=DEFLT_IN_QUERY;
689 | constant[n].set_func=set_string;
690 | constant[n].constant_ptr=Global_constants->in_query;
691 | constant[n].show_func=show_string;
692 | n++;
693 |
694 | constant[n].token="RX.rt_query";
695 | constant[n].deflt=DEFLT_RT_QUERY;
696 | constant[n].set_func=set_string;
697 | constant[n].constant_ptr=Global_constants->rt_query;
698 | constant[n].show_func=show_string;
699 | n++;
700 |
701 | constant[n].token="SV.authenticate";
702 | constant[n].deflt=DEFLT_AUTHENTICATE;
703 | constant[n].set_func=set_boolean;
704 | constant[n].constant_ptr=Global_constants->authenticate;
705 | constant[n].show_func=show_boolean;
706 | n++;
707 |
708 | constant[n].token="SV.whois_suspended";
709 | constant[n].deflt=DEFLT_WHOIS_SUSPENDED;
710 | constant[n].set_func=set_boolean;
711 | constant[n].constant_ptr=Global_constants->whois_suspended;
712 | constant[n].show_func=show_boolean;
713 | n++;
714 |
715 | constant[n].token="SV.do_server";
716 | constant[n].deflt=DEFLT_DO_SERVER;
717 | constant[n].set_func=set_boolean;
718 | constant[n].constant_ptr=Global_constants->do_server;
719 | constant[n].show_func=show_boolean;
720 | n++;
721 |
722 | constant[n].token="PC.welcome";
723 | constant[n].deflt=DEFLT_WELCOME;
724 | constant[n].set_func=set_string;
725 | constant[n].constant_ptr=Global_constants->welcome;
726 | constant[n].show_func=show_string;
727 | n++;
728 |
729 | constant[n].token="PC.prompt";
730 | constant[n].deflt=DEFLT_PROMPT;
731 | constant[n].set_func=set_string;
732 | constant[n].constant_ptr=Global_constants->prompt;
733 | constant[n].show_func=show_string;
734 | n++;
735 |
736 | constant[n].token="PC.clear_screen";
737 | constant[n].deflt=DEFLT_CLEAR_SCREEN;
738 | constant[n].set_func=set_boolean;
739 | constant[n].constant_ptr=Global_constants->clear_screen;
740 | constant[n].show_func=show_boolean;
741 | n++;
742 |
743 | constant[n].token="PC.sleep_time";
744 | constant[n].deflt=DEFLT_SLEEP_TIME;
745 | constant[n].set_func=set_int;
746 | constant[n].constant_ptr=Global_constants->sleep_time;
747 | constant[n].show_func=show_int;
748 | n++;
749 |
750 | constant[n].token="WQ.accounting";
751 | constant[n].deflt=DEFLT_ACCOUNTING;
752 | constant[n].set_func=set_boolean;
753 | constant[n].constant_ptr=Global_constants->accounting;
754 | constant[n].show_func=show_boolean;
755 | n++;
756 |
757 | constant[n].token="LO.query_logging";
758 | constant[n].deflt=DEFLT_QUERY_LOGGING;
759 | constant[n].set_func=set_boolean;
760 | constant[n].constant_ptr=Global_constants->query_logging;
761 | constant[n].show_func=show_boolean;
762 | n++;
763 |
764 | constant[n].token="LO.query_logfile";
765 | constant[n].deflt=DEFLT_QUERY_LOGFILE;
766 | constant[n].set_func=set_string;
767 | constant[n].constant_ptr=Global_constants->query_logfile;
768 | constant[n].show_func=show_string;
769 | n++;
770 |
771 | constant[n].token="LO.instr_logging";
772 | constant[n].deflt=DEFLT_INSTR_LOGGING;
773 | constant[n].set_func=set_boolean;
774 | constant[n].constant_ptr=Global_constants->instr_logging;
775 | constant[n].show_func=show_boolean;
776 | n++;
777 |
778 | constant[n].token="LO.insrt_logfile";
779 | constant[n].deflt=DEFLT_INSTR_LOGFILE;
780 | constant[n].set_func=set_string;
781 | constant[n].constant_ptr=Global_constants->instr_logfile;
782 | constant[n].show_func=show_string;
783 | n++;
784 |
785 | constant[n].token="LO.comnd_logging";
786 | constant[n].deflt=DEFLT_COMND_LOGGING;
787 | constant[n].set_func=set_boolean;
788 | constant[n].constant_ptr=Global_constants->comnd_logging;
789 | constant[n].show_func=show_boolean;
790 | n++;
791 |
792 | constant[n].token="LO.comnd_logfile";
793 | constant[n].deflt=DEFLT_COMND_LOGFILE;
794 | constant[n].set_func=set_string;
795 | constant[n].constant_ptr=Global_constants->comnd_logfile;
796 | constant[n].show_func=show_string;
797 | n++;
798 |
799 | constant[n].token="LO.tests_logging";
800 | constant[n].deflt=DEFLT_TESTS_LOGGING;
801 | constant[n].set_func=set_boolean;
802 | constant[n].constant_ptr=Global_constants->tests_logging;
803 | constant[n].show_func=show_boolean;
804 | n++;
805 |
806 | constant[n].token="LO.tests_logfile";
807 | constant[n].deflt=DEFLT_TESTS_LOGFILE;
808 | constant[n].set_func=set_string;
809 | constant[n].constant_ptr=Global_constants->tests_logfile;
810 | constant[n].show_func=show_string;
811 | n++;
812 |
813 | constant[n].token="LO.thread_logging";
814 | constant[n].deflt=DEFLT_THREAD_LOGGING;
815 | constant[n].set_func=set_boolean;
816 | constant[n].constant_ptr=Global_constants->thread_logging;
817 | constant[n].show_func=show_boolean;
818 | n++;
819 |
820 | constant[n].token="LO.thread_logfile";
821 | constant[n].deflt=DEFLT_THREAD_LOGFILE;
822 | constant[n].set_func=set_string;
823 | constant[n].constant_ptr=Global_constants->thread_logfile;
824 | constant[n].show_func=show_string;
825 | n++;
826 |
827 | constant[n].token="LO.socket_logging";
828 | constant[n].deflt=DEFLT_SOCKET_LOGGING;
829 | constant[n].set_func=set_boolean;
830 | constant[n].constant_ptr=Global_constants->socket_logging;
831 | constant[n].show_func=show_boolean;
832 | n++;
833 |
834 | constant[n].token="LO.socket_logfile";
835 | constant[n].deflt=DEFLT_SOCKET_LOGFILE;
836 | constant[n].set_func=set_string;
837 | constant[n].constant_ptr=Global_constants->socket_logfile;
838 | constant[n].show_func=show_string;
839 | n++;
840 |
841 | constant[n].token="LO.config_logging";
842 | constant[n].deflt=DEFLT_CONFIG_LOGGING;
843 | constant[n].set_func=set_boolean;
844 | constant[n].constant_ptr=Global_constants->config_logging;
845 | constant[n].show_func=show_boolean;
846 | n++;
847 |
848 | constant[n].token="LO.config_logfile";
849 | constant[n].deflt=DEFLT_CONFIG_LOGFILE;
850 | constant[n].set_func=set_string;
851 | constant[n].constant_ptr=Global_constants->config_logfile;
852 | constant[n].show_func=show_string;
853 | n++;
854 |
855 | constant[n].token="MI.nrtm_host";
856 | constant[n].deflt=DEFLT_NRTM_HOST;
857 | constant[n].set_func=set_string;
858 | constant[n].constant_ptr=Global_constants->nrtm_host;
859 | constant[n].show_func=show_string;
860 | n++;
861 |
862 | constant[n].token="MI.nrtm_port";
863 | constant[n].deflt=DEFLT_MIRROR_PORT;
864 | constant[n].set_func=set_string;
865 | constant[n].constant_ptr=Global_constants->nrtm_port;
866 | constant[n].show_func=show_string;
867 | n++;
868 |
869 | constant[n].token="MI.nrtm_version";
870 | constant[n].deflt=DEFLT_NRTM_VERSION;
871 | constant[n].set_func=set_int;
872 | constant[n].constant_ptr=Global_constants->nrtm_version;
873 | constant[n].show_func=show_int;
874 | n++;
875 |
876 | constant[n].token="MI.nrtm_delay";
877 | constant[n].deflt=DEFLT_NRTM_DELAY;
878 | constant[n].set_func=set_int;
879 | constant[n].constant_ptr=Global_constants->nrtm_delay;
880 | constant[n].show_func=show_int;
881 | n++;
882 |
883 | constant[n].token="MI.nrtm_cserialfile";
884 | constant[n].deflt=DEFLT_NRTM_CSERFILE;
885 | constant[n].set_func=set_string;
886 | constant[n].constant_ptr=Global_constants->nrtm_cserialfile;
887 | constant[n].show_func=show_string;
888 | n++;
889 |
890 | constant[n].token="MI.nrtm_logfile";
891 | constant[n].deflt=DEFLT_NRTM_LOGFILE;
892 | constant[n].set_func=set_string;
893 | constant[n].constant_ptr=Global_constants->nrtm_logfile;
894 | constant[n].show_func=show_string;
895 | n++;
896 |
897 | constant[n].token="MI.do_nrtm";
898 | constant[n].deflt="1";
899 | constant[n].set_func=set_int;
900 | constant[n].constant_ptr=Global_constants->do_nrtm;
901 | constant[n].show_func=show_int;
902 | n++;
903 |
904 | constant[n].token="UD.update_mode";
905 | constant[n].deflt=DEFLT_UPDATE_MODE;
906 | constant[n].set_func=set_int;
907 | constant[n].constant_ptr=Global_constants->update_mode;
908 | constant[n].show_func=show_int;
909 | n++;
910 |
911 | constant[n].token="UD.do_update";
912 | constant[n].deflt="1";
913 | constant[n].set_func=set_int;
914 | constant[n].constant_ptr=Global_constants->do_update;
915 | constant[n].show_func=show_int;
916 | n++;
917 |
918 | constant[n].token=NULL;
919 |
920 | } /* init_constants() */
921 |
922 |
923 | /* CO_to_string() */
924 | /*++++++++++++++++++++++++++++++++++++++
925 | Returns the constants as a string.
926 |
927 | More:
928 | +html+ <PRE>
929 | Authors:
930 | ottrey
931 |
932 | +html+ </PRE><DL COMPACT>
933 | +html+ <DT>Online References:
934 | +html+ <DD><UL>
935 | +html+ </UL></DL>
936 |
937 | ++++++++++++++++++++++++++++++++++++++*/
938 | char *CO_to_string(void) {
939 | char *consts;
940 | const char *token;
941 | char *value;
942 | char tmp_consts[2048];
943 | char tmp_const[1024];
944 | int i=0;
945 |
946 | sprintf(tmp_consts, "Constants = { ");
947 | while(constant[i].token != NULL) {
948 | token = constant[i].token;
949 | value = constant[i].show_func(constant[i].constant_ptr);
950 | sprintf(tmp_const, "\n[%s]=\"%s\"", token, value);
951 | wr_free(value); /* Otherwise we have memory leaks */
952 | strcat(tmp_consts, tmp_const);
953 | i++;
954 | }
955 | strcat(tmp_consts, "}");
956 |
957 | /* consts = calloc(1, strlen(tmp_consts)+1); */
958 | dieif( wr_malloc((void **)&consts, strlen(tmp_consts)+1) != UT_OK);
959 |
960 | strcpy(consts, tmp_consts);
961 |
962 | return consts;
963 | } /* CO_to_string() */
964 |
965 |
966 | char *CO_const_to_string(char *name) {
967 | char *result=NULL;
968 | int i;
969 |
970 | for (i=0; constant[i].token != NULL; i++) {
971 | if (strcmp(constant[i].token, name) == 0) {
972 | result = constant[i].show_func(constant[i].constant_ptr);
973 | break;
974 | }
975 | }
976 |
977 | return result;
978 | } /* CO_const_to_string() */
979 |
980 | /* CO_set_const() */
981 | /*++++++++++++++++++++++++++++++++++++++
982 | Sets the value of one constant. Returns 0 if no error.
983 |
984 | More:
985 | +html+ <PRE>
986 | Authors:
987 | ottrey
988 |
989 | +html+ </PRE><DL COMPACT>
990 | +html+ <DT>Online References:
991 | +html+ <DD><UL>
992 | +html+ </UL></DL>
993 |
994 | ++++++++++++++++++++++++++++++++++++++*/
995 | int CO_set_const(char *name, char *value) {
996 | int result=1;
997 | int i;
998 |
999 | for (i=0; constant[i].token != NULL; i++) {
1000 | if (strcmp(constant[i].token, name) == 0) {
1001 | result = constant[i].set_func((void *)constant[i].constant_ptr, value);
1002 | break;
1003 | }
1004 | }
1005 |
1006 | return result;
1007 | } /* CO_set_const() */
1008 |
1009 |
1010 | /* CO_set() */
1011 | /*++++++++++++++++++++++++++++++++++++++
1012 | Sets the constants from the properties module.
1013 | Returns the number of constants set.
1014 |
1015 | More:
1016 | +html+ <PRE>
1017 | Authors:
1018 | ottrey
1019 | +html+ </PRE><DL COMPACT>
1020 | +html+ <DT>Online References:
1021 | +html+ <DD><UL>
1022 | +html+ <LI><A HREF="../src/.properties">.properties</A>
1023 | +html+ </UL></DL>
1024 |
1025 | ++++++++++++++++++++++++++++++++++++++*/
1026 | char *CO_set(void) {
1027 | int i;
1028 | int set_count=0;
1029 | int set;
1030 | char result_buff[256];
1031 | char *result;
1032 | char *property;
1033 |
1034 | /* Initialize if necessary */
1035 | if (Global_constants == NULL) {
1036 | /* Global_constants = (Constants)calloc(1, sizeof(struct _Constants)); */
1037 | dieif( wr_calloc((void **)&Global_constants, 1,
1038 | sizeof(struct _Constants)) != UT_OK);
1039 |
1040 | init_constants();
1041 | }
1042 |
1043 | for (i=0; constant[i].token != NULL; i++) {
1044 | property = PR_get_property(constant[i].token, constant[i].deflt);
1045 | set = constant[i].set_func((void *)constant[i].constant_ptr, property);
1046 | wr_free(property);
1047 | if (set == 0) {
1048 | set_count++;
1049 | }
1050 | }
1051 |
1052 | sprintf(result_buff, "%d out of %d constant(s) set.", set_count, i);
1053 |
1054 | /* result = (char *)calloc(1, strlen(result_buff)+1); */
1055 | dieif( wr_malloc((void **)&result, strlen(result_buff)+1) != UT_OK);
1056 | strcpy(result, result_buff);
1057 |
1058 | return result;
1059 | } /* CO_set() */
1060 |