/*
File: proxy_structs.h
Description: structure definitions and typedefs for proxy program.
*/
#ifndef __PROXY_STRUCTS_H__
#define __PROXY_STRUCTS_H__
#include <stdio.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <glib.h>
#define FD_CLOSE 0
#define FD_OPEN 1
#define CLIENT 0
#define SERVER 1
#define QUEUE_BUFFER 4096
#define CONNECT_TIMEOUT 5.0
/* we'll have one of these for each available file descriptor */
struct rdata {
int status;
char ip[INET_ADDRSTRLEN]; /* client IP */
int relay; /* fd to which we relay data */
GSList *queue;
int bytes_read;
int bytes_written;
int type; /* CLIENT or SERVER */
struct timeval ti_read; /* started reading data */
struct timeval ti_write; /* started writing data */
struct timeval tf_read; /* finished reading data */
struct timeval tf_write; /* finished writing data */
struct timeval ti_connect; /* started connect N/B */
struct timeval tf_connect; /* finished connect N/B */
};
/* these structures get stuffed into the mem chunks */
struct qdata {
int l; /* number of bytes in this buffer */
int p; /* placeholder for repeat writes */
char s[QUEUE_BUFFER]; /* space for the data */
};
typedef struct qdata qdata;
/* this struct will be filled out as needed. it will contain any
data which needs to be globally accessible. */
struct mdata {
GMemChunk *m;
struct rdata *r; /* status/ip list */
struct sockaddr_in sa;
struct sockaddr_in la;
unsigned short local_port;
char local_name[MAXPATHLEN];
unsigned short server_port;
char server_name[MAXPATHLEN];
char log_file[MAXPATHLEN];
FILE *log_fp;
int nofile;
int server_sock;
int kq;
int iterations;
int events;
int accepts;
int bytes_read[2];
int bytes_written[2];
int kevent_errors;
int num_clients;
int max_clients;
float time_reading[2];
float time_writing[2];
int verbose;
int out_of_memory;
};
#endif /* __PROXY_STRUCTS_H__ */
syntax highlighted by Code2HTML, v. 0.9.1