modules/er/er_print.c

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

FUNCTIONS

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.2 $
   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                             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 "memwrap.h"
  34 #include "erroutines.h"
  35 
  36 #include "er_paths.h"
  37 #include "er_arrays.h"
  38 
  39 #include "sk.h"
  40 /**************** PRINTING PATHS ********************************************/
  41 static
  42 void er_print_format(int format, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
  43 {
  44   int i;
  45 
  46   for(i=0;  er_formarr[i].n != NULL; i++) {
  47     if( format & er_formarr[i].v ) {
  48       g_string_sprintfa(g_reply, "%s|",er_formarr[i].n);
  49     }
  50   }
  51   /* cut the last "|" */
  52   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
  53 }
  54 
  55 
  56 static
  57 void er_print_one_path_descr(er_path_t *pathptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
  58 {
  59   er_path_descr_t *d = &(pathptr->descr);
  60 
  61   switch(pathptr->type) {
  62   case  ER_PATH_NAME:
  63     g_string_sprintfa(g_reply, "NAME %s%s", d->name.filename, 
  64                       d->name.date ? " DATE" : ""
  65                       );
  66     break;
  67   case  ER_PATH_SOCK:
  68     g_string_sprintfa(g_reply, "SOCK %d", d->sock.fd );
  69 
  70     break;
  71 
  72   case  ER_PATH_EXEC:
  73     g_string_sprintfa(g_reply, "EXEC ");
  74     if( d->exec.usepath ) {
  75       g_string_sprintfa(g_reply, "PATH ");
  76     }
  77     {
  78       char **argv = d->exec.argv;
  79       int len=0;
  80   
  81       if( argv != NULL ) {
  82         while( argv[len] != NULL ) {
  83           g_string_sprintfa(g_reply, "%s ", argv[len]);
  84           len++;
  85         }
  86       }
  87     }
  88     break;
  89 
  90   default:
  91     /* XXX other path descriptions missing */
  92     break;
  93   }
  94 }
  95 
  96 static
  97 void er_print_aspmask(mask_t facmask, unsigned aspmask, GString *g_reply)
     /* [<][>][^][v][top][bottom][index][help] */
  98 {
  99   int i = 31;
 100 
 101   while(i >= 0) {
 102     if( aspmask & (1<<i) ) {
 103       er_getaspsym(facmask, 1<<i, g_reply);
 104       g_string_append(g_reply, "|");
 105     }
 106     
 107     i--;
 108   }
 109   /* cut the last "|" */
 110   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
 111 }
 112 
 113 static
 114 void er_print_facmask(mask_t facmask, GString *g_reply)
     /* [<][>][^][v][top][bottom][index][help] */
 115 {
 116   int i = FAC_NONE;
 117   
 118   while( ++i != FAC_LAST ) {
 119     if( MA_isset(facmask, er_fac_err[i].code) ) {
 120       g_string_sprintfa(g_reply, "%s|", er_fac_err[i].name);
 121     }
 122   }
 123   /* cut the last "|" */
 124   g_string_truncate(g_reply, (int) strlen(g_reply->str)-1);
 125 
 126 }
 127 
 128 static
 129 void er_print_one_filter(er_filter_t *filtptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
 130 { 
 131   g_string_sprintfa(g_reply, "( FAC ");
 132   er_print_facmask( filtptr->fac_mask, g_reply);
 133   
 134   if( filtptr->asp_mask != 0 ) {
 135     g_string_sprintfa(g_reply, "  ASP ");
 136     er_print_aspmask(  filtptr->fac_mask, filtptr->asp_mask, g_reply);
 137   }
 138 
 139   g_string_sprintfa(g_reply, "  SEV %s-%s ",
 140                     er_getsevsym( filtptr->sev_min, ER_M_SEVCHAR),
 141                     er_getsevsym( filtptr->sev_max, ER_M_SEVCHAR)
 142                     );
 143   if( filtptr->thr_id != 0 ) {
 144     g_string_sprintfa(g_reply, "   THR %u ", filtptr->thr_id);
 145   }
 146   g_string_sprintfa(g_reply, " )" );
 147 }
 148 
 149 static
 150 void er_print_one_path(er_path_t *pathptr, GString *g_reply )
     /* [<][>][^][v][top][bottom][index][help] */
 151 {
 152   GList   *qitem;
 153   int f=1;
 154   
 155   g_string_sprintfa(g_reply,"%s { ", pathptr->name );
 156   g_string_sprintfa(g_reply," FORMAT ");
 157   er_print_format(pathptr->format, g_reply ); 
 158   g_string_sprintfa(g_reply,"  ");
 159 
 160   er_print_one_path_descr(pathptr, g_reply);
 161   g_string_sprintfa(g_reply," }\n");
 162 
 163   for(qitem = g_list_first(pathptr->filters);
 164       qitem != NULL;
 165       qitem = g_list_next(qitem)) {
 166     er_filter_t *filtptr = (er_filter_t *) qitem -> data;
 167     
 168     g_string_sprintfa(g_reply,"\t");
 169     er_print_one_filter(filtptr, g_reply) ;
 170     g_string_sprintfa(g_reply,"\n");
 171     f++;
 172   }
 173 
 174 }
 175 
 176 void er_print_paths(char **retbuf)
     /* [<][>][^][v][top][bottom][index][help] */
 177 {
 178   GList   *qitem;
 179   GString *g_reply = g_string_sized_new(2048); /* initial size */
 180 
 181   for( qitem = g_list_first(er_pathlist);
 182        qitem != NULL;
 183        qitem = g_list_next(qitem)) {
 184     er_path_t *pathptr = qitem -> data;
 185 
 186     /*   g_string_sprintfa(g_reply, "path type %d (%s) with %d filters\n",
 187            pathptr->type, er_pathtypes[pathptr->type],
 188            g_list_length(pathptr->filters));
 189     */
 190     er_print_one_path(pathptr, g_reply);
 191 
 192   }
 193 
 194   *retbuf = g_reply->str;  
 195 
 196   g_string_free( g_reply, /* CONSTCOND */ FALSE);
 197 }

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