Example #1
0
/* disconnect from given host */
int	disconnect_from (char *host)
{
  struct hostent	*h;
  struct sockaddr_in	serv_addr;
  int			socket;
  int			i;
  
  h = gethostbyname (host);
  
  if (h == NULL)
    {
      printf ("[EE] Unknown host '%s'\n", host);
      return 0;
    }

  memcpy ((char *) &serv_addr.sin_addr.s_addr,
          h->h_addr_list[0],
          h->h_length);

  socket = dump_lookup_neighbor (serv_addr.sin_addr);

  if (socket == 0)
    {
      printf ("[EE] No connection to host '%s'\n", host);
      return 0;
    }
  /*  
      printf ("[+] disconnecting : del_neighbor \n");
      dump_del_neighbor (serv_addr.sin_addr);
      printf ("[+] disconnecting : del_myid \n");
      dump_del_myid (socket);
      printf ("[+] disconnecting : close \n");
      close (socket);
  */
  
  dump_disconnect (socket);


  for (i = 2; i < sd_num; i++)
    {
      if (sd_list[i] == socket)
	sd_list[i] = 0;
      /* XXX dirty */
    } 
  return 0;
}
Example #2
0
/* receive callback */
void	*dump_receive_cb(int s)
{
  pkt_t *pkt;

#if __DEBUG_DUMP__
  printf("[DUMP] dump_receive_cb [%d]\n", s);
#endif

  /* clean recently seen tables */
  dump_clean_recently_seen();
   
  /* read an entire packet */
  pkt = dump_recv_pkt(s);

  if (pkt == (pkt_t *) (-1))
    {
#if __DEBUG_DUMP__
      printf("[DUMP] error -> disconnecting\n");
#endif
      dump_disconnect(s);
      return (void *) (-1);
    }
#if __DEBUG_DUMP__
  printf("[DUMP] ----recv-----\n");  
  dump_print_pkt(pkt);
  printf("[DUMP] -------------\n");
#endif

  /* if packet readed */
  if (pkt != NULL)
    {
      /* determine packet type */
      switch (ntohs(pkt->type))
	{
	case RR:
	  dump_receive_RR(pkt);
	  dump_free(pkt);
	  break;
	case Rr:
	  dump_receive_Rr(pkt);
	  dump_free(pkt);
	  break;
	case DATA:
	  pkt = dump_receive_DATA(pkt);
	  /* need some mem free */
#if !defined(ERESI_INTERNAL)
	  if (pkt < 0)
	    {
	      printf("[EE] error while forwaring data\n");
	    }
#endif
	  return pkt;
	  break;
	default:
#if !defined(ERESI_INTERNAL)
	  fprintf(stderr, "[EE] Unknown packet type %u \n", ntohs(pkt->type));
#endif
	  /* XXX anything to add ? */
	  exit(-1);
	}
    }
       
  return NULL; 
}