/* This file is part of the Project Athena Zephyr Notification System.
 * It contains the hostmanager queueing routines.
 *
 * Created by:	Derek Atkins <warlord@MIT.EDU>
 *
 * $Source: /afs/media-lab.mit.edu/user/warlord/C/zephyr/zhm/RCS/newqueue.h,v $
 * $Author: warlord $
 *
 */

#ifndef _NEWQUEUE_H
#define _NEWQUEUE_H

#include "zhm.h"
#include <sys/types.h>

#define MAXNUMSERVS 256
#define RECHECKTIME (60*60)
#define MAX_SERV_TIMEOUTS 10
#define ZHM_NOTICE_TIMEOUT (60*10) 

typedef struct _Queue {
     long timeout;
     int retries;
     ZNotice_t z_notice;
     caddr_t z_packet;
     struct sockaddr_in reply;
} Queue;

struct _qelem {
     struct _qelem *q_forw;
     struct _qelem *q_back;
     Queue *q_data;
};

typedef struct _qelem Qelem;

typedef struct _realmentry {
    char realm[REALM_SZ + 1];		/* Name of the realm */
    char *hostlist[MAXNUMSERVS];	/* list of hostnames */
    char *badhostlist[MAXNUMSERVS]; 	/* list of unresolvable hostnames */
    char **cur_serv_list;
    char *cur_serv;			/* current hostname */
    char *prim_serv;			/* Primary server name */
    struct sockaddr_in host_sin;	/* current host address */
    struct sockaddr_in *hp;		/* pointer to this value (or NULL) */
    long lasthostcheck;			/* When did we last check bad hosts */
    int num_timeouts;			/* Number of timeouts without server */
    int booting;			/* Are we booting? */
    int no_servers;			/* Can we resolv any server names? */
    int no_server;			/* Do we not have a current server? */
    int deactivated;			/* Realm activation flag */
    int nservchang;			/* Number of server changes */
    int nserv;				/* Number of messages from server */
    Qelem *queue;			/* queue of notices */
    struct _realmentry *next;		/* next entry in linked list */
} RealmEntry;

#endif
