Index: ossp-pkg/l2/l2_ch_syslog.c RCS File: /v/ossp/cvs/ossp-pkg/l2/l2_ch_syslog.c,v rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/l2/l2_ch_syslog.c,v' 2>/dev/null --- 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 +/* 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,