/*
** iplog.h - data used by all iplog modules.
** Copyright (C) 1999-2001 Ryan McCabe <odin@numb.org>
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License, version 2,
** as published by the Free Software Foundation.
**
** This program 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 General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
**
** $Id: iplog.h,v 1.44 2001/01/01 16:02:14 odin Exp $
*/

#ifndef __IPLOG_H
#define __IPLOG_H

#ifndef HAVE_IPADDR_T
	typedef u_int32_t ipaddr_t;
#endif

#ifndef HAVE_IN_PORT_T
	typedef u_int16_t in_port_t;
#endif

#define __FAVOR_BSD
#include <netinet/in_systm.h>
#include <netinet/in.h>
#undef __FAVOR_BSD

#ifndef __SOLARIS_8__
#define  __IP_HDR_LENGTH(ip) (ip->ip_hl << 2)
#else
#include <inet/ip.h>
#define __IP_HDR_LENGTH IPH_HDR_LENGTH
#endif

#define FACILITY LOG_DAEMON
#define PRIORITY LOG_NOTICE

/*
** Path of the iplog configuration file.
*/

#define CONFFILE	"/usr/local/etc/iplog.conf"

/*
** Making these smaller will probably do bad things.
*/
#define MAX_HSTLEN	256
#define MAX_SRVLEN	128
#define MAX_PRTLEN	32
#define MAX_IPLEN	16
#define MAX_PORT	0xffff
#define MIN_PORT	0

#ifdef DEBUG
#	define IDEBUG(x) do { mysyslog x; } while (0)
#else
#	define IDEBUG(x) do { } while (0)
#endif

#define xfree(x) do { free(x); (x) = NULL; } while (0)
#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0]))

#define DNS_HASH(x, y) ((((x) >> 24) + ((x) >> 16)) & ((y) - 1))
#define SCAN_HASH(x, y, z) (((x) ^ (y)) & ((z) - 1))

#define EXPIRE_INTERVAL 1

#ifndef HAVE___ATTRIBUTE__
#	define __attribute__(x)
#endif

#ifndef min
#	define min(x,y) ((x) < (y) ? (x) : (y))
#endif

typedef enum { false, true } bool;

#ifdef HAVE_PATHS_H
#	include <paths.h>
#endif

#ifndef _PATH_VARRUN
#	define LOCKFILE "/etc/iplog.pid"
#else
#	define LOCKFILE (_PATH_VARRUN "iplog.pid")
#endif

#if defined(__svr4__)
#	include <pthread.h>
#endif

#ifndef HAVE_DPRINTF
int dprintf(int fd, const char *fmt, ...);
#endif

#include <sys/time.h>

void *xmalloc(size_t size);
void *xcalloc(size_t nmemb, size_t size);
void *xrealloc(void *ptr, size_t size);
char *xstrdup(const char *s);
char *xstrncpy(char *dest, const char *src, size_t n);
char *xstrncat(char *dest, const char *src, size_t n);
void xsleep(time_t seconds);
void xusleep(u_long usec);

void fork_to_back(void);
u_char *serv_lookup(in_port_t port, const u_char *proto, u_char *buf, size_t len);
u_char *proto_lookup(int proto, u_char *buf, size_t len);
void drop_privs(const u_char *user, const u_char *group);
void fatal(const u_char *fmt, ...);
int get_line(FILE *fp, u_char *buf, size_t len);
ssize_t sock_write(int sock, void *buf, size_t len);

void *__list_copy_append(const void *data, void **head_ptr, size_t len);
void *__list_append(void *data, void **head_ptr);
void *__list_copy_prepend(const void *data, void **head_ptr, size_t len);
void *__list_prepend(void *data, void **head_ptr);
void *__list_delete(void *node, void **head_ptr);

#define list_copy_append(x, y, z)	__list_copy_append((x), (void **) (y), (z))
#define list_append(x, y)			__list_append((x), (void **) (y))
#define list_copy_prepend(x, y, z)	__list_copy_prepend((x), (void **) (y), (z))
#define list_prepend(x, y)			__list_prepend((x), (void **) (y))
#define list_delete(x, y)			__list_delete((x), (void **) (y))

void *__dlist_copy_append(const void *data, void **head_ptr, size_t len);
void *__dlist_append(void *data, void **head_ptr);
void *__dlist_copy_prepend(const void *data, void **head_ptr, size_t len);
void *__dlist_prepend(void *data, void **head_ptr);
void *__dlist_delete(void *node, void **head_ptr);
void *__dlist_remove(void *data, void **head_ptr);

#define dlist_copy_append(x, y, z)	__dlist_copy_append((x), (void **) (y), (z))
#define dlist_append(x, y)			__dlist_append((x), (void **) (y))
#define dlist_copy_prepend(x, y, z)	__dlist_copy_prepend((x), (void **) (y), (z))
#define dlist_prepend(x, y)			__dlist_prepend((x), (void **) (y))
#define dlist_remove(x, y)			__dlist_remove((x), (void **) (y))
#define dlist_delete(x, y)			__dlist_delete((x), (void **) (y))

void list_destroy(void *list_head, void (*cleanup)(void *));

#define dlist_destroy	list_destroy

int in_cksum(u_short *addr, int len);

bool tcp_res(void);
bool udp_res(void);
bool icmp_res(void);
bool any_res(void);

void mysyslog(const char *fmt, ...);
void myopenlog(const char *name, int option);
void mycloselog(void);

void get_options(int argc, char * const argv[]);
void check_options(void);

void write_lockfile(const u_char *lockfile);
void kill_iplog(int sig, const u_char *lockfile);
bool get_raw_sock(void);
void expire_dns(void);

bool is_listening(in_port_t port);
void *get_ident_data(void *data);

#ifndef HAVE_LOCALTIME_R
struct tm *localtime_r(const time_t *cur_time, struct tm *result);
#endif

#include <iplog_inet_header.h>

int tcp_parser(const struct ip *ip);
int udp_parser(const struct ip *ip);
int icmp_parser(const struct ip *ip);

u_char *inet_ntoa_r(const struct in_addr *in, u_char *buf, size_t len);
u_char *host_lookup(const struct in_addr *in, bool resolv, u_char *buf, size_t len);
u_char *_host_lookup(const struct in_addr *in, u_char *buf, size_t len);

#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
#	include <stdarg.h>
#endif

#ifndef HAVE_SNPRINTF
int snprintf(char *str, size_t n, char const *fmt, ...);
#endif

#ifndef HAVE_VSNPRINTF
int vsnprintf(char *str, size_t n, char *fmt, va_list ap);
#endif

#endif /* __IPLOG_H */

/* vim:ts=4:sw=8:tw=0 */


syntax highlighted by Code2HTML, v. 0.9.1