## 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] */