modules/er/er_print.c

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

DEFINITIONS

This source file includes following functions.
  1. er_print_format
  2. er_print_one_path_descr
  3. er_print_aspmask
  4. er_print_facmask
  5. er_print_one_filter
  6. er_print_one_path
  7. er_print_paths

   1 /***************************************
   2   $Revision: 1.5 $
   3 
   4   Error reporting (er) er_print.c - routines to print the currently registered
   5                                     paths and filters in a syntax compliant 
   6                                     to the one of the interpreter.
   7 
   8   Status: NOT REVUED, PARTLY TESTED
   9 
  10   Design and implementation by: Marek Bukowy
  11 
  12   ******************/ /******************
  13   Copyright (c) 1999,2000,2001,2002                   RIPE NCC
  14  
  15   All Rights Reserved
  16   
  17   Permission to use, copy, modify, and distribute this software and its
  18   documentation for any purpose and without fee is hereby granted,
  19   provided that the above copyright notice appear in all copies and that
  20   both that copyright notice and this permission notice appear in
  21   supporting documentation, and that the name of the author not be
  22   used in advertising or publicity pertaining to distribution of the
  23   software without specific, written prior permission.
  24   
  25   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  26   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
  27   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
  28   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  29   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  30   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  31   ***************************************/
  32 
  33 #include "rip.h"
  34 
  35 /**************** PRINTING PATHS ********************************************/
  36 static
  37 void er_print_format(int format, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
  38 {
  39   int i;
  40 
  41   for(i=0;  er_formarr[i].n != NULL; i++) {
  42     if( format & er_formarr[i].v ) {
  43       g_string_sprintfa(g_reply, "%s|",er_formarr[i].n);
  44     }
  45   }
  46   /* cut the last "|" */
  47   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
  48 }
  49 
  50 
  51 static
  52 void er_print_one_path_descr(er_path_t *pathptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
  53 {
  54   er_path_descr_t *d = &(pathptr->descr);
  55 
  56   switch(pathptr->type) {
  57   case  ER_PATH_NAME:
  58     g_string_sprintfa(g_reply, "NAME %s%s", d->name.filename, 
  59                       d->name.date ? " DATE" : ""
  60                       );
  61     break;
  62   case  ER_PATH_SOCK:
  63     g_string_sprintfa(g_reply, "SOCK %d", d->sock.fd );
  64 
  65     break;
  66 
  67   case  ER_PATH_EXEC:
  68     g_string_sprintfa(g_reply, "EXEC ");
  69     if( d->exec.usepath ) {
  70       g_string_sprintfa(g_reply, "PATH ");
  71     }
  72     {
  73       char **argv = d->exec.argv;
  74       int len=0;
  75   
  76       if( argv != NULL ) {
  77         while( argv[len] != NULL ) {
  78           g_string_sprintfa(g_reply, "%s ", argv[len]);
  79           len++;
  80         }
  81       }
  82     }
  83     break;
  84 
  85   default:
  86     /* XXX other path descriptions missing */
  87     break;
  88   }
  89 }
  90 
  91 static
  92 void er_print_aspmask(mask_t facmask, unsigned aspmask, GString *g_reply)
     /* [<][>][^][v][top][bottom][index][help] */
  93 {
  94   int i = 31;
  95 
  96   while(i >= 0) {
  97     if( aspmask & (1<<i) ) {
  98       er_getaspsym(facmask, 1<<i, g_reply);
  99       g_string_append(g_reply, "|");
 100     }
 101     
 102     i--;
 103   }
 104   /* cut the last "|" */
 105   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
 106 }
 107 
 108 static
 109 void er_print_facmask(mask_t facmask, GString *g_reply)
     /* [<][>][^][v][top][bottom][index][help] */
 110 {
 111   int i = FAC_NONE;
 112   
 113   while( ++i != FAC_LAST ) {
 114     if( MA_isset(facmask, er_fac_err[i].code) ) {
 115       g_string_sprintfa(g_reply, "%s|", er_fac_err[i].name);
 116     }
 117   }
 118   /* cut the last "|" */
 119   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
 120 
 121 }
 122 
 123 static
 124 void er_print_one_filter(er_filter_t *filtptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
 125 { 
 126   g_string_sprintfa(g_reply, "( FAC ");
 127   er_print_facmask( filtptr->fac_mask, g_reply);
 128   
 129   if( filtptr->asp_mask != 0 ) {
 130     g_string_sprintfa(g_reply, "  ASP ");
 131     er_print_aspmask(  filtptr->fac_mask, filtptr->asp_mask, g_reply);
 132   }
 133 
 134   g_string_sprintfa(g_reply, "  SEV %s-%s ",
 135                     er_getsevsym( filtptr->sev_min, ER_M_SEVCHAR),
 136                     er_getsevsym( filtptr->sev_max, ER_M_SEVCHAR)
 137                     );
 138   if( filtptr->thr_id != 0 ) {
 139     g_string_sprintfa(g_reply, "   THR %lu ", (long unsigned)filtptr->thr_id);
 140   }
 141   g_string_sprintfa(g_reply, " )" );
 142 }
 143 
 144 static
 145 void er_print_one_path(er_path_t *pathptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
 146 {
 147   GList   *qitem;
 148   int f=1;
 149   
 150   g_string_sprintfa(g_reply,"%s { ", pathptr->name );
 151   g_string_sprintfa(g_reply," FORMAT ");
 152   er_print_format(pathptr->format, g_reply ); 
 153   g_string_sprintfa(g_reply,"  ");
 154 
 155   er_print_one_path_descr(pathptr, g_reply);
 156   g_string_sprintfa(g_reply," }\n");
 157 
 158   for(qitem = g_list_first(pathptr->filters);
 159       qitem != NULL;
 160       qitem = g_list_next(qitem)) {
 161     er_filter_t *filtptr = (er_filter_t *) qitem -> data;
 162     
 163     g_string_sprintfa(g_reply,"\t");
 164     er_print_one_filter(filtptr, g_reply) ;
 165     g_string_sprintfa(g_reply,"\n");
 166     f++;
 167   }
 168 
 169 }
 170 
 171 void er_print_paths(char **retbuf)
     /* [<][>][^][v][top][bottom][index][help] */
 172 {
 173   GList   *qitem;
 174   GString *g_reply = g_string_sized_new(2048); /* initial size */
 175 
 176   for( qitem = g_list_first(er_pathlist);
 177        qitem != NULL;
 178        qitem = g_list_next(qitem)) {
 179     er_path_t *pathptr = qitem -> data;
 180 
 181     /*   g_string_sprintfa(g_reply, "path type %d (%s) with %d filters\n",
 182            pathptr->type, er_pathtypes[pathptr->type],
 183            g_list_length(pathptr->filters));
 184     */
 185     er_print_one_path(pathptr, g_reply);
 186 
 187   }
 188 
 189   *retbuf = g_reply->str;  
 190 
 191   g_string_free( g_reply, /* CONSTCOND */ FALSE);
 192 }

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