1    | /***************************************
2    |   $Revision: 1.11 $
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   | /*+ Maximum number of constants. +*/
63   | #define MAX_CONSTS 100
64   | 
65   | /*+ Default values for constants. +*/
66   | #define DEFLT_MAX_THREADS     "10"
67   | #define DEFLT_WHOIS_PORT      "0"
68   | #define DEFLT_CONFIG_PORT     "0"
69   | #define DEFLT_MIRROR_PORT     "0"
70   | #define DEFLT_UPDATE_PORT     "0"
71   | #define DEFLT_HOST            "mysql.database.net"
72   | #define DEFLT_USER            "xxx"
73   | #define DEFLT_PASSWORD        "xxx"
74   | #define DEFLT_DATABASE_PORT   "3306"
75   | #define DEFLT_DATABASE        "RIPE"
76   | #define DEFLT_QUERY           "SHOW TABLES"
77   | #define DEFLT_IN_QUERY        "SELECT * FROM inetnum"
78   | #define DEFLT_RT_QUERY        "SELECT * FROM route"
79   | #define DEFLT_AUTHENTICATE    "0"
80   | #define DEFLT_WHOIS_SUSPENDED "0"
81   | #define DEFLT_WELCOME         "Welcome to the whois R.I.P. server.\n"
82   | #define DEFLT_PROMPT          "whois R.I.P. config> "
83   | #define DEFLT_CLEAR_SCREEN    "0"
84   | #define DEFLT_SLEEP_TIME      "1"
85   | #define DEFLT_ACCOUNTING      "0"
86   | #define DEFLT_QUERY_LOGGING   "1"
87   | #define DEFLT_QUERY_LOGFILE   "stdout"
88   | #define DEFLT_INSTR_LOGGING   "1"
89   | #define DEFLT_INSTR_LOGFILE   "stdout"
90   | #define DEFLT_COMND_LOGGING   "1"
91   | #define DEFLT_COMND_LOGFILE   "stdout"
92   | #define DEFLT_TESTS_LOGGING   "1"
93   | #define DEFLT_TESTS_LOGFILE   "stdout"
94   | #define DEFLT_THREAD_LOGGING  "1"
95   | #define DEFLT_THREAD_LOGFILE  "stdout"
96   | #define DEFLT_SOCKET_LOGGING  "1"
97   | #define DEFLT_SOCKET_LOGFILE  "stdout"
98   | #define DEFLT_CONFIG_LOGGING  "1"
99   | #define DEFLT_CONFIG_LOGFILE  "stdout"
100  | #define DEFLT_NRTM_HOST       "nrtm.nowhere.xx"
101  | #define DEFLT_NRTM_VERSION    "1"
102  | #define DEFLT_NRTM_DELAY      "600"
103  | #define DEFLT_NRTM_CSERFILE   "RIPE.CURRENTSERIAL"
104  | #define DEFLT_NRTM_LOGFILE    "nrtm.log"
105  | #define DEFLT_UPDATE_MODE     "0"
106  | 
107  | /*+ Each constant has a +*/
108  | struct _constant {
109  |   const char *token;              /*+ Token to be found in properties file. +*/
110  |   const char *deflt;                    /*+ Default value for the constant. +*/
111  |   int (*set_func)(void *, char *);        /*+ Function to set the constant. +*/
112  |   void *constant_ptr;                     /*+ Pointer to the constant value +*/
113  |   char *(*show_func)(void *);            /*+ Function to show the constant. +*/
114  | };
115  | 
116  | 
117  | /*+ The Constants array has a +*/
118  | typedef struct _Constants {
119  |   int  max_threads[1];             /*+ Maximum number of server threads. +*/ 
120  |   char  whois_port[64];   /*+ Port for whois clients to rendezvous with. +*/
121  |   char  config_port[64]; /*+ Port for config clients to rendezvous with. +*/
122  |   char  mirror_port[64]; /*+ Port for mirror clients to rendezvous with. +*/
123  |   char  update_port[64]; /*+ Port for DBupdate clients to rendezvous with. +*/  
124  |   char  host[64];                             /*+ Host for the database. +*/
125  |   char  user[64];                             /*+ User for the database. +*/
126  |   char  password[64];                     /*+ Password for the database. +*/
127  |   int  database_port[1];                      /*+ Port for the database. +*/
128  |   char  database[64];                                 /*+ Database name. +*/
129  |   char  query[1024];                         /*+ Query for the database. +*/
130  |   char  in_query[1024];     /*+ Query for the radix tree initialization. +*/
131  |   char  rt_query[1024];     /*+ Query for the radix tree initialization. +*/
132  |   int   authenticate[1];                         /*+ Authenticate users. +*/
133  |   int   whois_suspended[1];                /*+ Suspend the whois server. +*/
134  |   char  welcome[1024];                  /*+ Welcome for config protocol. +*/
135  |   char  prompt[1024];                    /*+ Prompt for config protocol. +*/
136  |   int   clear_screen[1];         /*+ Clear screen after config commands. +*/
137  |   int   sleep_time[1];  /*+ Sleep time (in sec) between config commands. +*/
138  |   int   accounting[1];          /*+ Conduct accounting on whois queries. +*/
139  |   int   query_logging[1];                       /*+ Log the SQL queries. +*/
140  |   char  query_logfile[1024];         /*+ Query logfile for the database. +*/
141  |   int   instr_logging[1];                    /*+ Log the whois instrucs. +*/
142  |   char  instr_logfile[1024];   /*+ Query logfile for the whois instrucs. +*/
143  |   int   comnd_logging[1];                    /*+ Log the whois commands. +*/
144  |   char  comnd_logfile[1024];   /*+ Query logfile for the whois commands. +*/
145  |   int   tests_logging[1];                       /*+ Log the whois tests. +*/
146  |   char  tests_logfile[1024];      /*+ Query logfile for the whois tests. +*/
147  |   int   thread_logging[1];                    /*+ Log the whois threads. +*/
148  |   char  thread_logfile[1024];   /*+ Query logfile for the whois threads. +*/
149  |   int   socket_logging[1];                           /*+ Log the socket. +*/
150  |   char  socket_logfile[1024];                /*+ Logfile for the socket. +*/
151  |   int   config_logging[1];                           /*+ Log the config. +*/
152  |   char  config_logfile[1024];                /*+ Logfile for the config. +*/
153  |   char  nrtm_host[64];/*+ NRTM server +*/
154  |   char	nrtm_port[64];/*+ Port of NRTM server when we are acting as a client +*/
155  |   int	nrtm_version[1];/*+ NRTM protocol version +*/
156  |   int	nrtm_delay[1];/*+ delay between syncs +*/
157  |   char	nrtm_cserialfile[1024];/*+ name of the file containing current serial +*/
158  |   char	nrtm_logfile[1024];/*+ NRTM logfile for failure reports +*/
159  |   int	do_nrtm[1]; 
160  |   int	update_mode[1];/*+ protected/unprotected (==dummy_allowed) +*/
161  |   int	do_update[1];
162  | } *Constants;
163  | 
164  | 
165  | /*
166  |  * Global Variables
167  |  */
168  | /*+ The array of Global Constants. +*/
169  | static Constants  Global_constants=NULL;
170  | 
171  | /* 
172  |  * Set Functions
173  |  */
174  | static int set_string(void *constant, char *value) {
175  | 
176  |   strcpy((char *)constant, value);
177  | 
178  |   return 0;
179  | } /* set_string() */
180  | 
181  | static int set_int(void *constant, char *value) {
182  |   int i;
183  |   
184  |   i = atol(value);
185  |   ((int *)constant)[0] = i;
186  | 
187  |   return 0;
188  | } /* set_int() */
189  | 
190  | static int set_boolean(void *constant, char *value) {
191  |   int result=1;
192  |   int i;
193  |   
194  |   i = atol(value);
195  | 
196  |   /* If a valid boolean */
197  |   if ( (i == 0) || (i == 1)) {
198  |     ((int *)constant)[0] = i;
199  |     result = 0;
200  |   }
201  | 
202  |   return result;
203  | } /* set_boolean() */
204  | 
205  | 
206  | /* 
207  |  * Show Functions
208  |  */
209  | /* AR. changed for unification with oter show funcs */
210  | static char *show_string(void *constant) {
211  |   char *tmp;
212  |   
213  |   //  tmp = calloc(1, strlen((char *)constant)+1);
214  |   dieif( wr_malloc((void **)&tmp, strlen((char *)constant)+1) != UT_OK);  
215  |   
216  |   strcpy(tmp, (char *)constant);
217  | /*  return((char *)constant); */
218  |   return tmp;
219  | } /* show_string() */
220  | 
221  | static char *show_int(void *constant) {
222  |   char *tmp;
223  | 
224  |   // tmp = calloc(1, 64);
225  |   dieif( wr_malloc((void **)&tmp, 64) != UT_OK); 
226  | 
227  |   sprintf(tmp, "%d", ((int *)constant)[0]);
228  |   return tmp;
229  | } /* show_int() */
230  | 
231  | static char *show_boolean(void *constant) {
232  |   char *tmp;
233  | 
234  |   //  tmp = calloc(1, 64);
235  |   dieif( wr_malloc((void **)&tmp, 64) != UT_OK); 
236  | 
237  |   sprintf(tmp, "%d", ((int *)constant)[0]);
238  |   return tmp;
239  | } /* show_boolean() */
240  | 
241  | 
242  | /* 
243  |  * Get Functions
244  |  */
245  | int CO_get_max_threads() {
246  |   return Global_constants->max_threads[0];
247  | }
248  | 
249  | const char *CO_get_whois_port() {
250  |   return Global_constants->whois_port;
251  | }
252  | 
253  | const char *CO_get_config_port() {
254  |   return Global_constants->config_port;
255  | }
256  | 
257  | const char *CO_get_mirror_port() {
258  |   return Global_constants->mirror_port;
259  | }
260  | 
261  | const char *CO_get_update_port() {
262  |   return Global_constants->update_port;
263  | }
264  | 
265  | const char *CO_get_host() {
266  |   return Global_constants->host;
267  | }
268  | 
269  | const char *CO_get_user() {
270  |   return Global_constants->user;
271  | }
272  | 
273  | const char *CO_get_password() {
274  |   return Global_constants->password;
275  | }
276  | 
277  | int CO_get_database_port() {
278  |   return Global_constants->database_port[0];
279  | }
280  | 
281  | const char *CO_get_database() {
282  |   return Global_constants->database;
283  | }
284  | 
285  | const char *CO_get_query() {
286  |   return Global_constants->query;
287  | }
288  | 
289  | const char *CO_get_in_query() {
290  |   return Global_constants->in_query;
291  | }
292  | 
293  | const char *CO_get_rt_query() {
294  |   return Global_constants->rt_query;
295  | }
296  | 
297  | int CO_get_authenticate() {
298  |   return Global_constants->authenticate[0];
299  | }
300  | 
301  | int CO_get_whois_suspended() {
302  |   return Global_constants->whois_suspended[0];
303  | }
304  | 
305  | const char *CO_get_welcome() {
306  |   return Global_constants->welcome;
307  | }
308  | 
309  | const char *CO_get_prompt() {
310  |   return Global_constants->prompt;
311  | }
312  | 
313  | int CO_get_clear_screen() {
314  |   return Global_constants->clear_screen[0];
315  | }
316  | 
317  | int CO_get_sleep_time() {
318  |   return Global_constants->sleep_time[0];
319  | }
320  | 
321  | int CO_get_accounting() {
322  |   return Global_constants->accounting[0];
323  | }
324  | 
325  | int CO_get_query_logging() {
326  |   return Global_constants->query_logging[0];
327  | }
328  | 
329  | const char *CO_get_query_logfile() {
330  |   return Global_constants->query_logfile;
331  | }
332  | 
333  | int CO_get_instr_logging() {
334  |   return Global_constants->instr_logging[0];
335  | }
336  | 
337  | const char *CO_get_instr_logfile() {
338  |   return Global_constants->instr_logfile;
339  | }
340  | 
341  | int CO_get_comnd_logging() {
342  |   return Global_constants->comnd_logging[0];
343  | }
344  | 
345  | const char *CO_get_comnd_logfile() {
346  |   return Global_constants->comnd_logfile;
347  | }
348  | 
349  | int CO_get_tests_logging() {
350  |   return Global_constants->tests_logging[0];
351  | }
352  | 
353  | const char *CO_get_tests_logfile() {
354  |   return Global_constants->tests_logfile;
355  | }
356  | 
357  | int CO_get_thread_logging() {
358  |   return Global_constants->thread_logging[0];
359  | }
360  | 
361  | const char *CO_get_thread_logfile() {
362  |   return Global_constants->thread_logfile;
363  | }
364  | 
365  | int CO_get_socket_logging() {
366  |   return Global_constants->socket_logging[0];
367  | }
368  | 
369  | const char *CO_get_socket_logfile() {
370  |   return Global_constants->socket_logfile;
371  | }
372  | 
373  | int CO_get_config_logging() {
374  |   return Global_constants->config_logging[0];
375  | }
376  | 
377  | const char *CO_get_config_logfile() {
378  |   return Global_constants->config_logfile;
379  | }
380  | 
381  | /*++++ NRTM stuff ++++*/
382  | 
383  | const char *CO_get_nrtm_host() {
384  |   return Global_constants->nrtm_host;
385  | }
386  |   
387  | const char *CO_get_nrtm_port() {
388  |   return Global_constants->nrtm_port;
389  | }
390  |   
391  | int CO_get_nrtm_version() {
392  |   return Global_constants->nrtm_version[0];
393  | }  
394  | 
395  | int CO_get_nrtm_delay() {
396  |   return Global_constants->nrtm_delay[0];
397  | }  
398  |     
399  | const char *CO_get_nrtm_cserialfile() {
400  |   return Global_constants->nrtm_cserialfile;
401  | }  
402  | 
403  | const char *CO_get_nrtm_logfile() {
404  |   return Global_constants->nrtm_logfile;
405  | }  
406  | 
407  | int CO_get_do_nrtm() {
408  |   return Global_constants->do_nrtm[0];
409  | }
410  | 
411  | int CO_get_update_mode() {
412  |   return Global_constants->update_mode[0];
413  | }
414  | 
415  | 
416  | 
417  | int CO_get_do_update() {
418  |   return Global_constants->do_update[0];
419  | }
420  |   
421  | 
422  | 
423  | /*+
424  |  * Contains the constant definitions for the Token, set_function, show_function.
425  |  * (See: _constant)
426  | +*/
427  | static struct _constant constant[MAX_CONSTS];
428  | 
429  | /* init_constants() */
430  | /*++++++++++++++++++++++++++++++++++++++
431  |   Initialize all the constants.
432  | 
433  |   More:
434  |   +html+ <PRE>
435  |   Authors:
436  |         ottrey
437  | 
438  |   +html+ </PRE><DL COMPACT>
439  |   +html+ <DT>Online References:
440  |   +html+ <DD><UL>
441  |   +html+ </UL></DL>
442  | 
443  |   ++++++++++++++++++++++++++++++++++++++*/
444  | static void init_constants(void) {
445  |   int n=0;
446  | 
447  |   constant[n].token="SV.max_threads";
448  |   constant[n].deflt=DEFLT_MAX_THREADS;
449  |   constant[n].set_func=set_int;
450  |   constant[n].constant_ptr=Global_constants->max_threads;
451  |   constant[n].show_func=show_int;
452  |   n++;
453  | 
454  |   constant[n].token="SV.whois_port";
455  |   constant[n].deflt=DEFLT_WHOIS_PORT;
456  |   constant[n].set_func=set_string;
457  |   constant[n].constant_ptr=Global_constants->whois_port;
458  |   constant[n].show_func=show_string;
459  |   n++;
460  | 
461  |   constant[n].token="SV.config_port";
462  |   constant[n].deflt=DEFLT_CONFIG_PORT;
463  |   constant[n].set_func=set_string;
464  |   constant[n].constant_ptr=Global_constants->config_port;
465  |   constant[n].show_func=show_string;
466  |   n++;
467  | 
468  |   constant[n].token="SV.mirror_port";
469  |   constant[n].deflt=DEFLT_MIRROR_PORT;
470  |   constant[n].set_func=set_string;
471  |   constant[n].constant_ptr=Global_constants->mirror_port;
472  |   constant[n].show_func=show_string;
473  |   n++;
474  | 
475  |   constant[n].token="SV.update_port";
476  |   constant[n].deflt=DEFLT_UPDATE_PORT;
477  |   constant[n].set_func=set_string;
478  |   constant[n].constant_ptr=Global_constants->update_port;
479  |   constant[n].show_func=show_string;
480  |   n++;
481  | 
482  |   constant[n].token="DB.host";
483  |   constant[n].deflt=DEFLT_HOST;
484  |   constant[n].set_func=set_string;
485  |   constant[n].constant_ptr=Global_constants->host;
486  |   constant[n].show_func=show_string;
487  |   n++;
488  | 
489  |   constant[n].token="DB.user";
490  |   constant[n].deflt=DEFLT_USER;
491  |   constant[n].set_func=set_string;
492  |   constant[n].constant_ptr=Global_constants->user;
493  |   constant[n].show_func=show_string;
494  |   n++;
495  | 
496  |   constant[n].token="DB.password";
497  |   constant[n].deflt=DEFLT_PASSWORD;
498  |   constant[n].set_func=set_string;
499  |   constant[n].constant_ptr=Global_constants->password;
500  |   constant[n].show_func=show_string;
501  |   n++;
502  | 
503  |   constant[n].token="DB.database_port";
504  |   constant[n].deflt=DEFLT_DATABASE_PORT;
505  |   constant[n].set_func=set_int;
506  |   constant[n].constant_ptr=Global_constants->database_port;
507  |   constant[n].show_func=show_int;
508  |   n++;
509  | 
510  |   constant[n].token="DB.database";
511  |   constant[n].deflt=DEFLT_DATABASE;
512  |   constant[n].set_func=set_string;
513  |   constant[n].constant_ptr=Global_constants->database;
514  |   constant[n].show_func=show_string;
515  |   n++;
516  | 
517  |   constant[n].token="DB.query";
518  |   constant[n].deflt=DEFLT_QUERY;
519  |   constant[n].set_func=set_string;
520  |   constant[n].constant_ptr=Global_constants->query;
521  |   constant[n].show_func=show_string;
522  |   n++;
523  | 
524  |   constant[n].token="RX.in_query";
525  |   constant[n].deflt=DEFLT_IN_QUERY;
526  |   constant[n].set_func=set_string;
527  |   constant[n].constant_ptr=Global_constants->in_query;
528  |   constant[n].show_func=show_string;
529  |   n++;
530  | 
531  |   constant[n].token="RX.rt_query";
532  |   constant[n].deflt=DEFLT_RT_QUERY;
533  |   constant[n].set_func=set_string;
534  |   constant[n].constant_ptr=Global_constants->rt_query;
535  |   constant[n].show_func=show_string;
536  |   n++;
537  | 
538  |   constant[n].token="SV.authenticate";
539  |   constant[n].deflt=DEFLT_AUTHENTICATE;
540  |   constant[n].set_func=set_boolean;
541  |   constant[n].constant_ptr=Global_constants->authenticate;
542  |   constant[n].show_func=show_boolean;
543  |   n++;
544  | 
545  |   constant[n].token="SV.whois_suspended";
546  |   constant[n].deflt=DEFLT_WHOIS_SUSPENDED;
547  |   constant[n].set_func=set_boolean;
548  |   constant[n].constant_ptr=Global_constants->whois_suspended;
549  |   constant[n].show_func=show_boolean;
550  |   n++;
551  | 
552  |   constant[n].token="PC.welcome";
553  |   constant[n].deflt=DEFLT_WELCOME;
554  |   constant[n].set_func=set_string;
555  |   constant[n].constant_ptr=Global_constants->welcome;
556  |   constant[n].show_func=show_string;
557  |   n++;
558  | 
559  |   constant[n].token="PC.prompt";
560  |   constant[n].deflt=DEFLT_PROMPT;
561  |   constant[n].set_func=set_string;
562  |   constant[n].constant_ptr=Global_constants->prompt;
563  |   constant[n].show_func=show_string;
564  |   n++;
565  | 
566  |   constant[n].token="PC.clear_screen";
567  |   constant[n].deflt=DEFLT_CLEAR_SCREEN;
568  |   constant[n].set_func=set_boolean;
569  |   constant[n].constant_ptr=Global_constants->clear_screen;
570  |   constant[n].show_func=show_boolean;
571  |   n++;
572  | 
573  |   constant[n].token="PC.sleep_time";
574  |   constant[n].deflt=DEFLT_SLEEP_TIME;
575  |   constant[n].set_func=set_int;
576  |   constant[n].constant_ptr=Global_constants->sleep_time;
577  |   constant[n].show_func=show_int;
578  |   n++;
579  | 
580  |   constant[n].token="WQ.accounting";
581  |   constant[n].deflt=DEFLT_ACCOUNTING;
582  |   constant[n].set_func=set_boolean;
583  |   constant[n].constant_ptr=Global_constants->accounting;
584  |   constant[n].show_func=show_boolean;
585  |   n++;
586  | 
587  |   constant[n].token="LO.query_logging";
588  |   constant[n].deflt=DEFLT_QUERY_LOGGING;
589  |   constant[n].set_func=set_boolean;
590  |   constant[n].constant_ptr=Global_constants->query_logging;
591  |   constant[n].show_func=show_boolean;
592  |   n++;
593  | 
594  |   constant[n].token="LO.query_logfile";
595  |   constant[n].deflt=DEFLT_QUERY_LOGFILE;
596  |   constant[n].set_func=set_string;
597  |   constant[n].constant_ptr=Global_constants->query_logfile;
598  |   constant[n].show_func=show_string;
599  |   n++;
600  | 
601  |   constant[n].token="LO.instr_logging";
602  |   constant[n].deflt=DEFLT_INSTR_LOGGING;
603  |   constant[n].set_func=set_boolean;
604  |   constant[n].constant_ptr=Global_constants->instr_logging;
605  |   constant[n].show_func=show_boolean;
606  |   n++;
607  | 
608  |   constant[n].token="LO.insrt_logfile";
609  |   constant[n].deflt=DEFLT_INSTR_LOGFILE;
610  |   constant[n].set_func=set_string;
611  |   constant[n].constant_ptr=Global_constants->instr_logfile;
612  |   constant[n].show_func=show_string;
613  |   n++;
614  | 
615  |   constant[n].token="LO.comnd_logging";
616  |   constant[n].deflt=DEFLT_COMND_LOGGING;
617  |   constant[n].set_func=set_boolean;
618  |   constant[n].constant_ptr=Global_constants->comnd_logging;
619  |   constant[n].show_func=show_boolean;
620  |   n++;
621  | 
622  |   constant[n].token="LO.comnd_logfile";
623  |   constant[n].deflt=DEFLT_COMND_LOGFILE;
624  |   constant[n].set_func=set_string;
625  |   constant[n].constant_ptr=Global_constants->comnd_logfile;
626  |   constant[n].show_func=show_string;
627  |   n++;
628  | 
629  |   constant[n].token="LO.tests_logging";
630  |   constant[n].deflt=DEFLT_TESTS_LOGGING;
631  |   constant[n].set_func=set_boolean;
632  |   constant[n].constant_ptr=Global_constants->tests_logging;
633  |   constant[n].show_func=show_boolean;
634  |   n++;
635  | 
636  |   constant[n].token="LO.tests_logfile";
637  |   constant[n].deflt=DEFLT_TESTS_LOGFILE;
638  |   constant[n].set_func=set_string;
639  |   constant[n].constant_ptr=Global_constants->tests_logfile;
640  |   constant[n].show_func=show_string;
641  |   n++;
642  | 
643  |   constant[n].token="LO.thread_logging";
644  |   constant[n].deflt=DEFLT_THREAD_LOGGING;
645  |   constant[n].set_func=set_boolean;
646  |   constant[n].constant_ptr=Global_constants->thread_logging;
647  |   constant[n].show_func=show_boolean;
648  |   n++;
649  | 
650  |   constant[n].token="LO.thread_logfile";
651  |   constant[n].deflt=DEFLT_THREAD_LOGFILE;
652  |   constant[n].set_func=set_string;
653  |   constant[n].constant_ptr=Global_constants->thread_logfile;
654  |   constant[n].show_func=show_string;
655  |   n++;
656  | 
657  |   constant[n].token="LO.socket_logging";
658  |   constant[n].deflt=DEFLT_SOCKET_LOGGING;
659  |   constant[n].set_func=set_boolean;
660  |   constant[n].constant_ptr=Global_constants->socket_logging;
661  |   constant[n].show_func=show_boolean;
662  |   n++;
663  | 
664  |   constant[n].token="LO.socket_logfile";
665  |   constant[n].deflt=DEFLT_SOCKET_LOGFILE;
666  |   constant[n].set_func=set_string;
667  |   constant[n].constant_ptr=Global_constants->socket_logfile;
668  |   constant[n].show_func=show_string;
669  |   n++;
670  | 
671  |   constant[n].token="LO.config_logging";
672  |   constant[n].deflt=DEFLT_CONFIG_LOGGING;
673  |   constant[n].set_func=set_boolean;
674  |   constant[n].constant_ptr=Global_constants->config_logging;
675  |   constant[n].show_func=show_boolean;
676  |   n++;
677  | 
678  |   constant[n].token="LO.config_logfile";
679  |   constant[n].deflt=DEFLT_CONFIG_LOGFILE;
680  |   constant[n].set_func=set_string;
681  |   constant[n].constant_ptr=Global_constants->config_logfile;
682  |   constant[n].show_func=show_string;
683  |   n++;
684  | 
685  |   constant[n].token="MI.nrtm_host";
686  |   constant[n].deflt=DEFLT_NRTM_HOST;
687  |   constant[n].set_func=set_string;
688  |   constant[n].constant_ptr=Global_constants->nrtm_host;
689  |   constant[n].show_func=show_string;
690  |   n++;
691  | 
692  |   constant[n].token="MI.nrtm_port";
693  |   constant[n].deflt=DEFLT_MIRROR_PORT;
694  |   constant[n].set_func=set_string;
695  |   constant[n].constant_ptr=Global_constants->nrtm_port;
696  |   constant[n].show_func=show_string;
697  |   n++;
698  | 
699  |   constant[n].token="MI.nrtm_version";
700  |   constant[n].deflt=DEFLT_NRTM_VERSION;
701  |   constant[n].set_func=set_int;
702  |   constant[n].constant_ptr=Global_constants->nrtm_version;
703  |   constant[n].show_func=show_int;
704  |   n++;
705  | 
706  |   constant[n].token="MI.nrtm_delay";
707  |   constant[n].deflt=DEFLT_NRTM_DELAY;
708  |   constant[n].set_func=set_int;
709  |   constant[n].constant_ptr=Global_constants->nrtm_delay;
710  |   constant[n].show_func=show_int;
711  |   n++;
712  | 
713  |   constant[n].token="MI.nrtm_cserialfile";
714  |   constant[n].deflt=DEFLT_NRTM_CSERFILE;
715  |   constant[n].set_func=set_string;
716  |   constant[n].constant_ptr=Global_constants->nrtm_cserialfile;
717  |   constant[n].show_func=show_string;
718  |   n++;
719  | 
720  |   constant[n].token="MI.nrtm_logfile";
721  |   constant[n].deflt=DEFLT_NRTM_LOGFILE;
722  |   constant[n].set_func=set_string;
723  |   constant[n].constant_ptr=Global_constants->nrtm_logfile;
724  |   constant[n].show_func=show_string;
725  |   n++;
726  | 
727  |   constant[n].token="MI.do_nrtm";
728  |   constant[n].deflt="1";
729  |   constant[n].set_func=set_int;
730  |   constant[n].constant_ptr=Global_constants->do_nrtm;
731  |   constant[n].show_func=show_int;
732  |   n++;
733  | 
734  |   constant[n].token="UD.update_mode";
735  |   constant[n].deflt=DEFLT_UPDATE_MODE;
736  |   constant[n].set_func=set_int;
737  |   constant[n].constant_ptr=Global_constants->update_mode;
738  |   constant[n].show_func=show_int;
739  |   n++;
740  | 
741  |   constant[n].token="UD.do_update";
742  |   constant[n].deflt="1";
743  |   constant[n].set_func=set_int;
744  |   constant[n].constant_ptr=Global_constants->do_update;
745  |   constant[n].show_func=show_int;
746  |   n++;
747  | 
748  |   constant[n].token=NULL;
749  | 
750  | } /* init_constants() */
751  | 
752  | 
753  | /* CO_to_string() */
754  | /*++++++++++++++++++++++++++++++++++++++
755  |   Returns the constants as a string.
756  | 
757  |   More:
758  |   +html+ <PRE>
759  |   Authors:
760  |         ottrey
761  | 
762  |   +html+ </PRE><DL COMPACT>
763  |   +html+ <DT>Online References:
764  |   +html+ <DD><UL>
765  |   +html+ </UL></DL>
766  | 
767  |   ++++++++++++++++++++++++++++++++++++++*/
768  | char *CO_to_string(void) {
769  |   char *consts;
770  |   const char *token;
771  |   char *value;
772  |   char tmp_consts[2048];
773  |   char tmp_const[128];
774  |   int i=0;
775  | 
776  |   sprintf(tmp_consts, "Constants = { ");
777  |   while(constant[i].token != NULL) {
778  |     token = constant[i].token;
779  |     value = constant[i].show_func(constant[i].constant_ptr);
780  |     sprintf(tmp_const, "\n[%s]=\"%s\"", token, value);
781  |     wr_free(value); /* Otherwise we have memory leaks */
782  |     strcat(tmp_consts, tmp_const);
783  |     i++;
784  |   }
785  |   strcat(tmp_consts, "}");
786  | 
787  |   //consts = calloc(1, strlen(tmp_consts)+1);
788  |   dieif(  wr_malloc((void **)&consts, strlen(tmp_consts)+1) != UT_OK);
789  | 
790  |   strcpy(consts, tmp_consts);
791  | 
792  |   return consts;
793  | } /* CO_to_string() */
794  | 
795  | 
796  | char *CO_const_to_string(char *name) {
797  |   char *result=NULL;
798  |   int i;
799  |   
800  |   for (i=0; constant[i].token != NULL; i++) {
801  |     if (strcmp(constant[i].token, name) == 0) {
802  |       result = constant[i].show_func(constant[i].constant_ptr);
803  |       break;
804  |     }
805  |   }
806  | 
807  |   return result;
808  | } /* CO_const_to_string() */
809  | 
810  |  /* CO_set_const() */
811  | /*++++++++++++++++++++++++++++++++++++++
812  |   Sets the value of one constant.  Returns 0 if no error.
813  | 
814  |   More:
815  |   +html+ <PRE>
816  |   Authors:
817  |         ottrey
818  | 
819  |   +html+ </PRE><DL COMPACT>
820  |   +html+ <DT>Online References:
821  |   +html+ <DD><UL>
822  |   +html+ </UL></DL>
823  | 
824  |   ++++++++++++++++++++++++++++++++++++++*/
825  | int CO_set_const(char *name, char *value) {
826  |   int result=1;
827  |   int i;
828  |   
829  |   for (i=0; constant[i].token != NULL; i++) {
830  |     if (strcmp(constant[i].token, name) == 0) {
831  |       result = constant[i].set_func((void *)constant[i].constant_ptr, value);
832  |       break;
833  |     }
834  |   }
835  | 
836  |   return result;
837  | } /* CO_set_const() */
838  | 
839  | 
840  | /* CO_set() */
841  | /*++++++++++++++++++++++++++++++++++++++
842  |   Sets the constants from the properties module.
843  |   Returns the number of constants set.
844  | 
845  |   More:
846  |   +html+ <PRE>
847  |   Authors:
848  |         ottrey
849  |   +html+ </PRE><DL COMPACT>
850  |   +html+ <DT>Online References:
851  |   +html+ <DD><UL>
852  |   +html+   <LI><A HREF="../src/.properties">.properties</A>
853  |   +html+ </UL></DL>
854  | 
855  |   ++++++++++++++++++++++++++++++++++++++*/
856  | char *CO_set(void) {
857  |   int i;
858  |   int set_count=0;
859  |   int set;
860  |   char result_buff[256];
861  |   char *result;
862  |   char *property;
863  | 
864  |   /* Initialize if necessary */
865  |   if (Global_constants == NULL) {
866  |     //    Global_constants = (Constants)calloc(1, sizeof(struct _Constants));
867  |     dieif( wr_calloc((void **)&Global_constants, 1, 
868  | 		     sizeof(struct _Constants)) != UT_OK);  
869  |     
870  |     init_constants();
871  |   }
872  | 
873  |   for (i=0; constant[i].token != NULL; i++) {
874  |     property = PR_get_property(constant[i].token, constant[i].deflt);
875  |     set = constant[i].set_func((void *)constant[i].constant_ptr, property);
876  |     wr_free(property);
877  |     if (set == 0) {
878  |       set_count++;
879  |     }
880  |   }
881  | 
882  |   sprintf(result_buff, "%d out of %d constant(s) set.", set_count, i);
883  | 
884  |   //  result = (char *)calloc(1, strlen(result_buff)+1);
885  |   dieif( wr_malloc((void **)&result, strlen(result_buff)+1) != UT_OK);  
886  |   strcpy(result, result_buff);
887  | 
888  |   return result;
889  | } /* CO_set() */
890  |