modules/co/constants.c

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. set_string
  2. set_int
  3. set_boolean
  4. show_string
  5. show_int
  6. show_boolean
  7. CO_get_max_threads
  8. CO_get_whois_port
  9. CO_get_config_port
  10. CO_get_mirror_port
  11. CO_get_update_port
  12. CO_get_host
  13. CO_get_user
  14. CO_get_password
  15. CO_get_database_port
  16. CO_get_database
  17. CO_get_query
  18. CO_get_in_query
  19. CO_get_rt_query
  20. CO_get_authenticate
  21. CO_get_whois_suspended
  22. CO_get_welcome
  23. CO_get_prompt
  24. CO_get_clear_screen
  25. CO_get_sleep_time
  26. CO_get_accounting
  27. CO_get_query_logging
  28. CO_get_query_logfile
  29. CO_get_instr_logging
  30. CO_get_instr_logfile
  31. CO_get_comnd_logging
  32. CO_get_comnd_logfile
  33. CO_get_tests_logging
  34. CO_get_tests_logfile
  35. CO_get_thread_logging
  36. CO_get_thread_logfile
  37. CO_get_socket_logging
  38. CO_get_socket_logfile
  39. CO_get_config_logging
  40. CO_get_config_logfile
  41. CO_get_nrtm_host
  42. CO_get_nrtm_port
  43. CO_get_nrtm_version
  44. CO_get_nrtm_delay
  45. CO_get_nrtm_cserialfile
  46. CO_get_nrtm_logfile
  47. CO_get_do_nrtm
  48. CO_get_update_mode
  49. CO_get_do_update
  50. CO_get_do_server
  51. source_foreach
  52. CO_sources_to_string
  53. CO_sources_list_to_string
  54. CO_get_sources
  55. CO_get_source
  56. CO_get_source_database
  57. init_constants
  58. CO_to_string
  59. CO_const_to_string
  60. CO_set_const
  61. CO_set

   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) {
     /* [<][>][^][v][top][bottom][index][help] */
 201 
 202   strcpy((char *)constant, value);
 203 
 204   return 0;
 205 } /* set_string() */
 206 
 207 static int set_int(void *constant, char *value) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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() {
     /* [<][>][^][v][top][bottom][index][help] */
 272   return Global_constants->max_threads[0];
 273 }
 274 
 275 char *CO_get_whois_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 276   return Global_constants->whois_port;
 277 }
 278 
 279 char *CO_get_config_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 280   return Global_constants->config_port;
 281 }
 282 
 283 char *CO_get_mirror_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 284   return Global_constants->mirror_port;
 285 }
 286 
 287 char *CO_get_update_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 288   return Global_constants->update_port;
 289 }
 290 
 291 char *CO_get_host() {
     /* [<][>][^][v][top][bottom][index][help] */
 292   return Global_constants->host;
 293 }
 294 
 295 char *CO_get_user() {
     /* [<][>][^][v][top][bottom][index][help] */
 296   return Global_constants->user;
 297 }
 298 
 299 char *CO_get_password() {
     /* [<][>][^][v][top][bottom][index][help] */
 300   return Global_constants->password;
 301 }
 302 
 303 int CO_get_database_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 304   return Global_constants->database_port[0];
 305 }
 306 
 307 char *CO_get_database() {
     /* [<][>][^][v][top][bottom][index][help] */
 308   return Global_constants->database;
 309 }
 310 
 311 char *CO_get_query() {
     /* [<][>][^][v][top][bottom][index][help] */
 312   return Global_constants->query;
 313 }
 314 
 315 char *CO_get_in_query() {
     /* [<][>][^][v][top][bottom][index][help] */
 316   return Global_constants->in_query;
 317 }
 318 
 319 char *CO_get_rt_query() {
     /* [<][>][^][v][top][bottom][index][help] */
 320   return Global_constants->rt_query;
 321 }
 322 
 323 int CO_get_authenticate() {
     /* [<][>][^][v][top][bottom][index][help] */
 324   return Global_constants->authenticate[0];
 325 }
 326 
 327 int CO_get_whois_suspended() {
     /* [<][>][^][v][top][bottom][index][help] */
 328   return Global_constants->whois_suspended[0];
 329 }
 330 
 331 char *CO_get_welcome() {
     /* [<][>][^][v][top][bottom][index][help] */
 332   return Global_constants->welcome;
 333 }
 334 
 335 char *CO_get_prompt() {
     /* [<][>][^][v][top][bottom][index][help] */
 336   return Global_constants->prompt;
 337 }
 338 
 339 int CO_get_clear_screen() {
     /* [<][>][^][v][top][bottom][index][help] */
 340   return Global_constants->clear_screen[0];
 341 }
 342 
 343 int CO_get_sleep_time() {
     /* [<][>][^][v][top][bottom][index][help] */
 344   return Global_constants->sleep_time[0];
 345 }
 346 
 347 int CO_get_accounting() {
     /* [<][>][^][v][top][bottom][index][help] */
 348   return Global_constants->accounting[0];
 349 }
 350 
 351 int CO_get_query_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 352   return Global_constants->query_logging[0];
 353 }
 354 
 355 char *CO_get_query_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 356   return Global_constants->query_logfile;
 357 }
 358 
 359 int CO_get_instr_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 360   return Global_constants->instr_logging[0];
 361 }
 362 
 363 char *CO_get_instr_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 364   return Global_constants->instr_logfile;
 365 }
 366 
 367 int CO_get_comnd_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 368   return Global_constants->comnd_logging[0];
 369 }
 370 
 371 char *CO_get_comnd_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 372   return Global_constants->comnd_logfile;
 373 }
 374 
 375 int CO_get_tests_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 376   return Global_constants->tests_logging[0];
 377 }
 378 
 379 char *CO_get_tests_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 380   return Global_constants->tests_logfile;
 381 }
 382 
 383 int CO_get_thread_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 384   return Global_constants->thread_logging[0];
 385 }
 386 
 387 char *CO_get_thread_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 388   return Global_constants->thread_logfile;
 389 }
 390 
 391 int CO_get_socket_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 392   return Global_constants->socket_logging[0];
 393 }
 394 
 395 char *CO_get_socket_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 396   return Global_constants->socket_logfile;
 397 }
 398 
 399 int CO_get_config_logging() {
     /* [<][>][^][v][top][bottom][index][help] */
 400   return Global_constants->config_logging[0];
 401 }
 402 
 403 char *CO_get_config_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 404   return Global_constants->config_logfile;
 405 }
 406 
 407 /*++++ NRTM stuff ++++*/
 408 
 409 char *CO_get_nrtm_host() {
     /* [<][>][^][v][top][bottom][index][help] */
 410   return Global_constants->nrtm_host;
 411 }
 412   
 413 char *CO_get_nrtm_port() {
     /* [<][>][^][v][top][bottom][index][help] */
 414   return Global_constants->nrtm_port;
 415 }
 416   
 417 int CO_get_nrtm_version() {
     /* [<][>][^][v][top][bottom][index][help] */
 418   return Global_constants->nrtm_version[0];
 419 }  
 420 
 421 int CO_get_nrtm_delay() {
     /* [<][>][^][v][top][bottom][index][help] */
 422   return Global_constants->nrtm_delay[0];
 423 }  
 424     
 425 char *CO_get_nrtm_cserialfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 426   return Global_constants->nrtm_cserialfile;
 427 }  
 428 
 429 char *CO_get_nrtm_logfile() {
     /* [<][>][^][v][top][bottom][index][help] */
 430   return Global_constants->nrtm_logfile;
 431 }  
 432 
 433 int CO_get_do_nrtm() {
     /* [<][>][^][v][top][bottom][index][help] */
 434   return Global_constants->do_nrtm[0];
 435 }
 436 
 437 int CO_get_update_mode() {
     /* [<][>][^][v][top][bottom][index][help] */
 438   return Global_constants->update_mode[0];
 439 }
 440 
 441 int CO_get_do_update() {
     /* [<][>][^][v][top][bottom][index][help] */
 442   return Global_constants->do_update[0];
 443 }
 444 
 445 int CO_get_do_server() {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 563   return Sources_vector;
 564 } /* CO_get_sources() */
 565 
 566 const char *CO_get_source(int index) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
 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) {
     /* [<][>][^][v][top][bottom][index][help] */
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 

/* [<][>][^][v][top][bottom][index][help] */