#ifndef _XFWP_H
#define _XFWP_H
#include <X11/Xos.h>
#define FALSE 0
#define TRUE 1
#ifndef min
#define min(a,b) ((a) < (b) ? (a) : (b))
#endif
#ifndef max
#define max(a,b) ((a) > (b) ? (a) : (b))
#endif
#define MAX_PM_CONNS 10
#define MAX_SERVERS 100
#define RWBUFFER_SIZE 2048
enum CLIENT_CONN_STATE {
CLIENT_WAITING,
SERVER_WAITING,
SERVER_REPLY,
CONNECTION_READY
};
enum PM_CONN_STATE {
START,
WAIT_SERVER_INFO,
SENT_PORT_INFO,
PM_EXCHANGE_DONE
};
enum CONFIG_CHECK {
FAILURE,
SUCCESS
};
enum CONFIG_TYPE {
PM,
REM_CLIENT
};
enum LISTEN_STATE {
AVAILABLE,
IN_USE
};
enum SERVICE_ID_TYPES {
CLIENT,
PMGR,
FINDPROXY
};
enum LOG_EVENTS {
CLIENT_ACCEPT,
CLIENT_REJECT_CONFIG,
CLIENT_REJECT_SERVER
};
#ifdef notyet
typedef void fp1();
typedef Bool fp2();
#endif
struct ICE_setup_info
{
int opcode;
int versionCount;
IcePaVersionRec PMVersions[1];
#ifdef notyet
void (*fp1) ();
Bool (*fp2) ();
#endif
};
struct client_conn_buf
{
char readbuf[RWBUFFER_SIZE];
char writebuf[RWBUFFER_SIZE];
int rbytes;
int wbytes;
int conn_to;
int wclose;
int state;
int time_to_close;
int creation_time;
int fd;
char * source;
char * destination;
};
struct pm_conn_buf
{
char readbuf[RWBUFFER_SIZE];
int rbytes;
int state;
int fd;
IceConn ice_conn;
int creation_time;
int time_to_close;
} ;
struct config
{
int num_client_conns;
int num_pm_conns;
int num_servers;
int num_pm_listen_ports;
int idle_timeout;
int pm_data_timeout;
int client_listen_timeout;
int client_data_timeout;
struct timeval select_timeout;
char * pm_listen_port;
char * config_file_path;
char * log_file_path;
int lines_allocated;
int rule_count;
struct config_line ** config_file_data;
int log_level;
};
struct server_list
{
char * x_server_hostport;
char * listen_port_string;
int client_listen_fd;
int server_fd;
int done_accept;
int creation_time;
int time_to_close;
};
struct clientDataStruct
{
int * nfds;
fd_set * rinit;
fd_set * winit;
int major_opcode;
struct config * config_info;
};
struct config_line
{
char * permit_deny;
char * source_hostname;
unsigned int source_host;
char * source_netmask;
unsigned int source_net;
char * dest_hostname;
unsigned int dest_host;
char * dest_netmask;
unsigned int dest_net;
#if defined(__cplusplus) || defined(c_plusplus)
char * c_operator;
#else
char * operator;
#endif
char * service;
int service_id;
};
extern struct clientDataStruct global_data;
extern struct pm_conn_buf ** pm_conn_array;
extern struct server_list ** server_array;
extern struct client_conn_buf ** client_conn_array;
extern char **SitePolicies;
extern int SitePolicyCount;
extern int SitePolicyPermit;
#define PAD64(_bytes) ((8 - ((unsigned int) (_bytes) % 8)) % 8)
#define PADDED_BYTES64(_bytes) (_bytes + PAD64 (_bytes))
#define WORD64COUNT(_bytes) (((unsigned int) ((_bytes) + 7)) >> 3)
#define STRING_BYTES(_str) (2 + (_str ? strlen (_str) : 0) + \
PAD64 (2 + (_str ? strlen (_str) : 0)))
#define SKIP_STRING(_pBuf, _swap) \
{ \
CARD16 _len; \
EXTRACT_CARD16 (_pBuf, _swap, _len); \
_pBuf += _len; \
if (PAD64 (2 + _len)) \
_pBuf += PAD64 (2 + _len); \
}
#define STORE_CARD16(_pBuf, _val) \
{ \
*((CARD16 *) _pBuf) = _val; \
_pBuf += 2; \
}
#define STORE_STRING(_pBuf, _string) \
{ \
int _len = _string ? strlen (_string) : 0; \
STORE_CARD16 (_pBuf, _len); \
if (_len) { \
memcpy (_pBuf, _string, _len); \
_pBuf += _len; \
} \
if (PAD64 (2 + _len)) \
_pBuf += PAD64 (2 + _len); \
}
#define EXTRACT_CARD16(_pBuf, _swap, _val) \
{ \
_val = *((CARD16 *) _pBuf); \
_pBuf += 2; \
if (_swap) \
_val = lswaps (_val); \
}
#define EXTRACT_STRING(_pBuf, _swap, _string) \
{ \
CARD16 _len; \
EXTRACT_CARD16 (_pBuf, _swap, _len); \
_string = (char *) malloc (_len + 1); \
memcpy (_string, _pBuf, _len); \
_string[_len] = '\0'; \
_pBuf += _len; \
if (PAD64 (2 + _len)) \
_pBuf += PAD64 (2 + _len); \
}
#define lswapl(_val) ((((_val) & 0xff) << 24) |\
(((_val) & 0xff00) << 8) |\
(((_val) & 0xff0000) >> 8) |\
(((_val) >> 24) & 0xff))
#define lswaps(_val) ((((_val) & 0xff) << 8) | (((_val) >> 8) & 0xff))
#define CHECK_AT_LEAST_SIZE(_iceConn, _majorOp, _minorOp, _expected_len, _actual_len, _severity) \
if ((((_actual_len) - SIZEOF (iceMsg)) >> 3) > _expected_len) \
{ \
_IceErrorBadLength (_iceConn, _majorOp, _minorOp, _severity); \
return; \
}
#define CHECK_COMPLETE_SIZE(_iceConn, _majorOp, _minorOp, _expected_len, _actual_len, _pStart, _severity) \
if (((PADDED_BYTES64((_actual_len)) - SIZEOF (iceMsg)) >> 3) \
!= _expected_len) \
{ \
_IceErrorBadLength (_iceConn, _majorOp, _minorOp, _severity); \
IceDisposeCompleteMessage (iceConn, _pStart); \
return; \
}
#endif