/* BTP library - Banana Tree Protocol
 * Copyright (C) 1999-2001  The Regents of the University of Michigan
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the 
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 */

#ifndef _BTP_NODE_H
#define _BTP_NODE_H

#include <glib.h>

/* TODO: part of the reason of separating BtpNode and BConn is so we
   can keep BtpNodes that we aren't connected to.  Currently, we
   always have a conn associated with the BtpNode, even if we aren't
   connected. */

typedef struct _BtpNode
{
  gchar* 	hostname;
  gint   	port;

  struct _BConn*	conn;
  struct _BtpTree*  	tree;

  /* Is the node being deleted? */
  gboolean	is_deleting;	


  /* Would the node make a bad parent? (because it sent an error? or
     wouldn't accept a switch?)  If this happens, don't make it my
     parent. */
  gboolean 	is_bad_parent;	

  /* Following */
  /* Set if a previous best potential parent switched to this node.
     We can switch to this node in the hope of then switching to that
     good node. */
  gboolean	follow;		 /* Attempt to follow to good node */
  gint		follow_distance; /* Distance to good node */

  /* Shortcuts */
  guint		overlay_distance; 	/* Delay to node throught overlay */
  guint		shortcut_ping_timeout;  /* Timeout for pinging shortcut   */
  guint		shortcut_add_timeout; 	/* Timeout for adding shortcut    */

  /* Data for upper level protocols */
  gpointer 	upper_data;


  /* TODO: Garbage collect time */


} BtpNode;


#include "b_conn.h"
#include "btp_tree.h"

BtpNode* btp_node_new (BtpTree* tree, gchar* hostname, gint port, BConn* conn);
gboolean btp_node_delete (BtpNode* node);

void	 btp_node_print (FILE* file, BtpNode* node);

#endif /* _BTP_NODE_H */


syntax highlighted by Code2HTML, v. 0.9.1