Annotation of embedaddon/trafshow/show_if.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (c) 2004 Rinet Corp., Novosibirsk, Russia
! 3: *
! 4: * Redistribution and use in source forms, with and without modification,
! 5: * are permitted provided that this entire comment appears intact.
! 6: *
! 7: * THIS SOURCE CODE IS PROVIDED ``AS IS'' WITHOUT ANY WARRANTIES OF ANY KIND.
! 8: */
! 9:
! 10: #ifdef HAVE_CONFIG_H
! 11: #include <config.h>
! 12: #endif
! 13:
! 14: #include <stdio.h>
! 15: #include <string.h>
! 16: #include <pcap.h>
! 17:
! 18: #include "show_if.h"
! 19: #include "trafshow.h"
! 20: #include "screen.h"
! 21: #include "selector.h"
! 22: #include "addrtoname.h"
! 23:
! 24: #ifdef notdef
! 25: static void addr2str(const pcap_addr_t *ap, char *addr_buf, int addr_len);
! 26: #endif
! 27:
! 28: static void
! 29: scale_size(name, addr, descr)
! 30: int *name, *addr, *descr;
! 31: {
! 32: *name = line_factor * (double)SHOW_IF_NAME;
! 33: *addr = line_factor * (double)SHOW_IF_ADDR;
! 34: *descr = line_factor * (double)SHOW_IF_DESCR;
! 35: }
! 36:
! 37: static int
! 38: show_if_header(dst, size, unused)
! 39: char *dst;
! 40: int size;
! 41: const void *unused;
! 42: {
! 43: int name_sz, addr_sz, desc_sz;
! 44:
! 45: /* sanity check */
! 46: if (!dst || size < 1 || unused)
! 47: return 0;
! 48:
! 49: scale_size(&name_sz, &addr_sz, &desc_sz);
! 50:
! 51: snprintf(dst, size,
! 52: "%-*.*s %-*.*s %-*.*s",
! 53: name_sz, name_sz, "Interface",
! 54: addr_sz, addr_sz, "Address",
! 55: desc_sz, desc_sz, "Description");
! 56: return 0;
! 57: }
! 58:
! 59: #ifdef notdef
! 60: /* extract list of interface addr/mask pairs */
! 61: static void
! 62: addr2str(ap, addr_buf, addr_len)
! 63: const pcap_addr_t *ap;
! 64: char *addr_buf;
! 65: int addr_len;
! 66: {
! 67: int i, rest;
! 68: char *cp;
! 69:
! 70: *addr_buf = '\0';
! 71: cp = addr_buf;
! 72: rest = addr_len - 1;
! 73: for (; ap && rest > 0; ap = ap->next) {
! 74: if (ap->addr) {
! 75: if (*addr_buf) {
! 76: *cp++ = ' ';
! 77: *cp = '\0';
! 78: rest--;
! 79: }
! 80: if (satoa(ap->addr, cp, rest)) {
! 81: i = strlen(cp);
! 82: cp += i;
! 83: rest -= i;
! 84: }
! 85: }
! 86: if (ap->netmask) {
! 87: if (*addr_buf) {
! 88: *cp++ = ' ';
! 89: *cp = '\0';
! 90: rest--;
! 91: }
! 92: if (satoa(ap->netmask, cp, rest)) {
! 93: i = strlen(cp);
! 94: cp += i;
! 95: rest -= i;
! 96: }
! 97: }
! 98: }
! 99: }
! 100: #endif
! 101:
! 102: static int
! 103: show_if_line(dst, size, ph, idx)
! 104: char *dst;
! 105: int size;
! 106: const PCAP_HANDLER *ph;
! 107: int idx;
! 108: {
! 109: int i, name_sz, addr_sz, desc_sz;
! 110:
! 111: /* sanity check */
! 112: if (!dst || size < 1)
! 113: return 0;
! 114:
! 115: *dst = '\0';
! 116: for (i = 0; ph; ph = ph->next) {
! 117: if (i++ == idx) break;
! 118: }
! 119: if (!ph) return 0;
! 120:
! 121: scale_size(&name_sz, &addr_sz, &desc_sz);
! 122: snprintf(dst, size,
! 123: "%-*.*s %-*.*s %-*.*s",
! 124: name_sz, name_sz, ph->name,
! 125: addr_sz, addr_sz, ph->addrstr,
! 126: desc_sz, desc_sz, ph->descr ? ph->descr : "");
! 127: return 0;
! 128: }
! 129:
! 130: static int
! 131: show_if_footer(dst, size, unused)
! 132: char *dst;
! 133: int size;
! 134: const void *unused;
! 135: {
! 136: /* sanity check */
! 137: if (!dst || size < 1 || unused)
! 138: return 0;
! 139:
! 140: (void)strncpy(dst, hostname, size);
! 141: dst[size-1] = '\0';
! 142: return 0;
! 143: }
! 144:
! 145: SELECTOR *
! 146: show_if_selector()
! 147: {
! 148: static SELECTOR *sp = 0;
! 149: if (!sp && (sp = selector_init()) != 0) {
! 150: sp->get_header = show_if_header;
! 151: sp->get_line = show_if_line;
! 152: sp->get_footer = show_if_footer;
! 153: }
! 154: return sp;
! 155: }
! 156:
! 157: int
! 158: show_if_search(ph, str)
! 159: PCAP_HANDLER *ph;
! 160: const char *str;
! 161: {
! 162: int idx;
! 163:
! 164: /* sanity check */
! 165: if (!str || *str == '\0')
! 166: return -1;
! 167:
! 168: for (idx = 0; ph; ph = ph->next, idx++) {
! 169: if (strstr(ph->name, str))
! 170: return idx;
! 171: if (strstr(ph->addrstr, str))
! 172: return idx;
! 173: }
! 174: return -1;
! 175: }
! 176:
! 177: SELECTOR *
! 178: show_if_list(ph)
! 179: PCAP_HANDLER *ph;
! 180: {
! 181: SELECTOR *sp;
! 182:
! 183: /* sanity check */
! 184: if (!ph || (sp = show_if_selector()) == 0)
! 185: return 0;
! 186:
! 187: sp->header = 0; /* unused */
! 188: sp->footer = 0; /* unused */
! 189:
! 190: sp->list = ph;
! 191: sp->items = 0;
! 192: for (; ph; ph = ph->next)
! 193: sp->items++;
! 194:
! 195: return sp;
! 196: }
! 197:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>