/*
 *  addr_server.h -- definitions and prototypes for addr_server.c
 *               8-92 : Dwayne Fontenot : original coding.
 */
#ifndef _ADDR_SERVER_H_
#define _ADDR_SERVER_H_
#define DFAULT_PROTO 0       /* use the appropriate protocol    */
#define MAX_CONNS 4          /* max number of connections       */
#define SNAME_LEN 64         /* length of symbolic name string  */
#define MAX_EVENTS_IN_QUEUE        100
#define MAX_EVENTS_TO_PROCESS      100
enum conn_states {CLOSED,OPEN};
enum ev_type {NEW_CONN, CONN};
enum msgtypes {NAMEBYIP, IPBYNAME};
typedef struct conn *conn_ptr;
typedef struct conn {
  int fd;                    /* file descriptor                 */
  int state;                 /* connection state                */
  struct sockaddr_in addr;   /* address struct for connected    */
  char sname[SNAME_LEN];     /* symbolic name of connected host */
} connection;
typedef struct queue_elem *queue_element_ptr;
typedef struct queue_elem {
  short event_type;          /* event type                                  */
  int fd;                    /* file descriptor on which data is pending    */
  queue_element_ptr next;
} queue_element;
void init_conn_sock();
void sigpipe_handler();
void sigio_handler();
void new_conn_handler();
void conn_data_handler();
void enqueue_datapending();
void dequeue_top_event();
void pop_queue_element();
void push_queue_element();
void handle_top_event();
int index_by_fd();
void terminate();
#endif /* _ADDR_SERVER_H_ */