
#include "snetwatch.h"
#include <mit-copyright.h>

extern getreq reply;

static char termbuf[BUFSIZ];
static char *termptr = termbuf;
static char cpbuf[BUFSIZ];
static char *cp = (char *) NULL;
static char *HC;           /* home cursor */
static char *CL;           /* clear screen & home cursor */
static int   LI;           /* down one line */
  int l;

char *format_haddr();

#define IPPROTO_RVD             66

#define dpy_home() puts(HC)

main(argc, argv)
     int argc;
     char **argv;
{
  caddr_t *dat;
  caddr_t datt;
  objident *obj[10];
  Agent a;
  struct hostent *hp = (struct hostent *) NULL;
  unsigned long laddr = 0;
  char *name = (char *) NULL;
  int length, status;
  int i, o;
  
  if(argc != 2)
    {
      printf("args\n");
      return;
    }

  name = argv[1];
  strcpy(a.name, name);
  
  if((*name >= '0') && (*name <= '9'))
    if((laddr = inet_addr(name)) > 0)
      hp = gethostbyaddr((char *) &laddr, 4, AF_INET);

  if((hp == (struct hostent *) NULL) && (laddr == 0))
    if(!(hp = gethostbyname(name)))
      {
	fprintf(stderr, "Cannot resolve name \"%s\".\n", name);
	exit(1);
      }

  if(laddr > 0)
    a.addr.s_addr = laddr;
  else
    bcopy(hp->h_addr, &(a.addr.s_addr), hp->h_length);
 
  init_screen();
  l = 999;
 
  o = 0;
  obj[o++] = &vPacketData;
  obj[o++] = &vPacketLength;
  obj[o++] = &vPacketTime;
  obj[o++] = &vPacketStatus;
  obj[o++] = (objident *) NULL;

foo:
  datt = make_snmp_next(&a, obj[0]);
  while(datt)
    {
      if((l >= LI-5) && isatty(1))
	{
	   dpy_home();
 	   printf("Type          source -> destination       len prot   %s\n\n", name);
   	   l = 0;
	}

      if(oidncmp(obj[0], &(reply.varlist.elem[0].name), 11) != 0)
	{
	  printf("exceeded mib scope\n");
          vPacketData.cmp[vPacketData.ncmp - 2] = 0;
          vPacketData.cmp[vPacketData.ncmp - 1] = 0;
          goto foo;
	}
       else 
         i = reply.varlist.elem[0].name.cmp[reply.varlist.elem[0].name.ncmp-1];
      vPacketData.cmp[vPacketData.ncmp - 1]     = i;
      vPacketLength.cmp[vPacketLength.ncmp - 1] = i;
      vPacketTime.cmp[vPacketTime.ncmp - 1]     = i;
      vPacketStatus.cmp[vPacketStatus.ncmp - 1] = i;
      printf("packet %d\n", i);

      if(i > 0)
        i = reply.varlist.elem[0].name.cmp[reply.varlist.elem[0].name.ncmp-2];
      vPacketData.cmp[vPacketData.ncmp - 2]     = i;
      vPacketLength.cmp[vPacketLength.ncmp - 2] = i;
      vPacketTime.cmp[vPacketTime.ncmp - 2]     = i;
      vPacketStatus.cmp[vPacketStatus.ncmp - 2] = i;

      if(!(dat = make_lots_o_snmp_queries(&a, obj)))
	{
          vPacketData.cmp[vPacketData.ncmp - 2] = 0;
	  vPacketData.cmp[vPacketData.ncmp - 1] = 0;
          goto foo;
	}

      bcopy(dat[1], &length, sizeof(length));
      bcopy(dat[3], &status, sizeof(status));
      
      /*do_packet(dat[0], length, status); */
      printf("channel %d\n", i);   
      datt = make_snmp_next(&a, obj[0]);
    }
}

init_screen()
{
  char *term;

  if(!cp)
    {
      if(!(term = (char *) getenv("TERM")))
	 exit(1);
      if(tgetent(cpbuf, term) < 0)
        {
		exit(1);
	}
      cp = cpbuf;
      HC = (char *) tgetstr ("ho", &termptr);
      CL = (char *) tgetstr ("cl", &termptr);
      LI =          tgetnum("li");
      printf(CL);
    }
   
}


