--- l2_ch_syslog.c 2001/08/15 10:36:03 1.6
+++ l2_ch_syslog.c 2001/08/25 18:27:48 1.7
@@ -32,42 +32,137 @@
#include <syslog.h>
+/* declare private channel configuration */
+typedef struct {
+ int iEtwas;
+ char *pszNada;
+} l2_ch_syslog_t;
+
+/* create channel */
static int hook_create(l2_context_t *ctx)
{
+ l2_ch_syslog_t *cfg;
+
+ /* allocate private channel configuration */
+
+ /* initialize configuration with reasonable defaults */
+
+ /* link private channel configuration into channel context */
+
return L2_OK;
}
+/* configure channel */
static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
{
- return L2_OK;
+ l2_ch_syslog_t *cfg;
+ l2_param_t pa[3];
+ l2_result_t rv;
+
+ /* parameter checks */
+ if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
+ return L2_ERROR;
+
+ /* feed and call generic parameter parsing engine */
+ L2_PARAM_SET(pa[0], iEtwas, CHARPTR, &cfg->iEtwas);
+ L2_PARAM_SET(pa[1], pszNada, INT, &cfg->pszNada);
+ L2_PARAM_END(pa[2]);
+ rv = l2_channel_setparams(pa, fmt, ap);
+
+ return rv;
}
+/* open channel */
static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
{
+ l2_ch_syslog_t *cfg;
+
+ /* parameter checks */
+ if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
+ return L2_ERROR;
+ if (cfg->pszNada == NULL) /* ATTENTION */
+ return L2_ERROR;
+
+ /* open channel syslog */
+
+ /* optionally open downstream channel, too */
+ if (downstream != NULL)
+ if (l2_channel_open(downstream) == L2_ERROR)
+ return L2_ERROR;
+
return L2_OK;
}
-static int hook_write(l2_context_t *ctx, l2_channel_t *downstream,
+/* write to channel */
+static int hook_write(l2_context_t *ctx, l2_channel_t *downstream,
const char *buf, size_t buf_size)
{
+ l2_ch_syslog_t *cfg;
+
+ /* parameter checks */
+ if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
+ return L2_ERROR;
+
+ /* write message to channel syslog */
+
+ /* optionally write to downstream channel, too */
+ if (downstream != NULL)
+ if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
+ return L2_ERROR;
+
return L2_OK;
}
+/* flush channel */
static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
{
+ l2_ch_syslog_t *cfg;
+
+ /* parameter checks */
+ if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
+ return L2_ERROR;
+
+ /* optionally flush downstream channel, too */
+ if (downstream != NULL)
+ if (l2_channel_flush(downstream) == L2_ERROR)
+ return L2_ERROR;
+
return L2_OK;
}
+/* close channel */
static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
{
+ l2_ch_syslog_t *cfg;
+
+ /* optionally close downstream channel, too */
+ if (downstream != NULL)
+ if (l2_channel_close(downstream) == L2_ERROR)
+ return L2_ERROR;
+
+ /* parameter checks */
+ if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
+ return L2_ERROR;
+
+ /* close channel syslog */
+
return L2_OK;
}
+/* destroy channel */
static int hook_destroy(l2_context_t *ctx)
{
+ /* parameter checks */
+ if (ctx->vp == NULL)
+ return L2_ERROR;
+
+ /* destroy channel configuration */
+ free(ctx->vp);
+
return L2_OK;
}
+/* exported channel handler structure */
l2_handler_t l2_handler_syslog = {
hook_create,
hook_configure,
|