/***************************************************************************
 *
 * Copyright (c) 1999 Balázs Scheidler
 * Copyright (c) 1999-2001 BalaBit IT Ltd.
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * Inspired by nsyslog, originally written by Darren Reed.
 *
 * $Id: log.h,v 1.19.4.1 2006/04/30 20:10:24 bazsi Exp $
 *
 ***************************************************************************/

#ifndef __LOG_H
#define __LOG_H

#include "syslog-ng.h"
#include "io.h"

#include <sys/time.h>
#include <regex.h>

struct syslog_config;
struct persistent_config;

struct log_info {
	UINT32 use_cnt;
	time_t recvd;
	time_t stamp;
	struct log_handler *source;
	UINT32 pri;
	UINT32 flags;
	struct address_info *saddr;
	struct ol_string *msg;
	struct ol_string *date;
	struct ol_string *program;
	struct ol_string *host;
	struct ol_string *host_from;
};

#define CLASS_DECLARE
#include "log.h.x"
#undef CLASS_DECLARE

#define LF_INTERNAL           0x0001
#define LF_MARK               0x0002
#define LF_LOCAL              0x0004
/* hack, this is piggybacked to msg_flags instead of using a separate argument of make_log_reader */
#define LF_NO_MULTI_READ      0x0008
#define LF_CHECK_HOSTNAME     0x0100

#define LF_USER_FLAGS 0xff00

/* CLASS:
     (class
       (name log_handler)
       (vars
         (params object log_handler_params)
         (handler method void "struct log_info *")
         (init method int "struct syslog_config *" 
	                  "struct persistent_config *")
	 (destroy method void "struct syslog_config *" 
	                      "struct persistent_config *")))
*/

#define HANDLE_LOG(l, i) (((struct log_handler *) l)->handler((struct log_handler *) (l), i))
#define LOG_HANDLER_INIT(l, c, p) ((struct log_handler *) l)->init((struct log_handler *) (l), c, p)
#define LOG_HANDLER_DESTROY(l, c, p) ((struct log_handler *) l)->destroy((struct log_handler *) (l), c, p)

/* CLASS:
     (class
       (name log_handler_pipe)
       (super log_handler)
       (vars
         (next object log_handler)))
*/

#define append_log_handler(item, append) ((struct log_handler_pipe *) (item))->next = ((struct log_handler *) append);

struct log_info *log_info_use(struct log_info *msg);
void log_info_free(struct log_info *msg);

struct log_info *make_log_info(UINT32 length, UINT8 *data, UINT8 *prefix, UINT32 flags, regex_t *badhostname_re);
struct log_info *make_internal_message(UINT32 pri, UINT32 length, UINT8 *data);
struct log_info *make_mark_message(void);

#endif



syntax highlighted by Code2HTML, v. 0.9.1