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