Exemplo n.º 1
0
  static void
affile_sd_notify(LogPipe *s, LogPipe *sender, gint notify_code, gpointer user_data)
{
  AFFileSourceDriver *self = (AFFileSourceDriver *) s;
  GlobalConfig *cfg = log_pipe_get_config(s);
  gint fd;

  switch (notify_code)
  {
    case NC_FILE_MOVED:
      { 
        msg_verbose("Follow-mode file source moved, tracking of the new file is started",
            evt_tag_str("filename", self->filename->str),
            NULL);

        log_pipe_deinit(self->reader);
        log_pipe_unref(self->reader);

        if (affile_sd_open_file(self, self->filename->str, &fd))
        {
          LogTransport *transport;

          transport = log_transport_plain_new(fd, self->filename, NULL, 0);
          transport->timeout = 10;

          self->reader = log_reader_new(
              log_proto_plain_new_server(transport, self->reader_options.padding,
                self->reader_options.msg_size,
                ((self->reader_options.follow_freq > 0)
                 ? LPPF_IGNORE_EOF
                 : LPPF_NOMREAD)
                ),
              LR_LOCAL);

          log_reader_set_options(self->reader, s, &self->reader_options, 1, SCS_FILE, self->super.id, self->filename->str);

          log_reader_set_follow_filename(self->reader, self->filename->str);

          log_reader_set_immediate_check(self->reader);

          log_pipe_append(self->reader, s);
          if (!log_pipe_init(self->reader, cfg))
          {
            msg_error("Error initializing log_reader, closing fd",
                evt_tag_int("fd", fd),
                NULL);
            log_pipe_unref(self->reader);
            self->reader = NULL;
            close(fd);
          }
        }
        else
        {
          self->reader = NULL;
        }
        break;
      }
    default:
      break;
  }
}
Exemplo n.º 2
0
  static gboolean
affile_sd_init(LogPipe *s)
{
  AFFileSourceDriver *self = (AFFileSourceDriver *) s;
  GlobalConfig *cfg = log_pipe_get_config(s);
  gint fd;
  gboolean file_opened, open_deferred = FALSE;

  log_reader_options_init(&self->reader_options, cfg, self->super.group);

  file_opened = affile_sd_open_file(self, self->filename->str, &fd);
  if (!file_opened && self->reader_options.follow_freq > 0)
  {
    msg_info("Follow-mode file source not found, deferring open",
        evt_tag_str("filename", self->filename->str),
        NULL);
    open_deferred = TRUE;
    fd = -1;
  }

  if (file_opened || open_deferred)
  {
    LogTransport *transport;

    transport = log_transport_plain_new(fd, self->filename, NULL, 0);
    transport->timeout = 10;

    /* FIXME: we shouldn't use reader_options to store log protocol parameters */
    self->reader = log_reader_new(
        log_proto_plain_new_server(transport, self->reader_options.padding,
          self->reader_options.msg_size,
          ((self->reader_options.follow_freq > 0)
           ? LPPF_IGNORE_EOF
           : LPPF_NOMREAD)
          ),
        LR_LOCAL);
    log_reader_set_options(self->reader, s, &self->reader_options, 1, SCS_FILE, self->super.id, self->filename->str);

    log_reader_set_follow_filename(self->reader, self->filename->str);

    /* NOTE: if the file could not be opened, we ignore the last
     * remembered file position, if the file is created in the future
     * we're going to read from the start. */

    affile_sd_load_pos(s, cfg);
    log_pipe_append(self->reader, s);

    if (!log_pipe_init(self->reader, NULL))
    {
      msg_error("Error initializing log_reader, closing fd",
          evt_tag_int("fd", fd),
          NULL);
      log_pipe_unref(self->reader);
      self->reader = NULL;
      close(fd);
      return FALSE;
    }
  }
  else
  {
    msg_error("Error opening file for reading",
        evt_tag_str("filename", self->filename->str),
        evt_tag_errno(EVT_TAG_OSERROR, errno),
        NULL);
    return self->super.optional;
  }
  return TRUE;

}
Exemplo n.º 3
0
static gboolean
afsocket_sc_init(LogPipe *s)
{
  AFSocketSourceConnection *self = (AFSocketSourceConnection *) s;
  gint read_flags;
  LogTransport *transport;
  LogProto *proto;

  read_flags = ((self->owner->flags & AFSOCKET_DGRAM) ? LTF_RECV : 0);

#if ENABLE_SSL
  if (self->owner->tls_context)
    {
      TLSSession *tls_session = tls_context_setup_session(self->owner->tls_context);
      
      if (!tls_session)
        return FALSE;
      transport = log_transport_tls_new(tls_session, self->sock, read_flags);
    }
  else
#endif

  transport = log_transport_plain_new(self->sock, read_flags);

  if ((self->owner->flags & AFSOCKET_SYSLOG_PROTOCOL) == 0)
    {
      /* plain protocol */
      proto = log_proto_plain_new_server(transport, self->owner->reader_options.padding,
                   self->owner->reader_options.msg_size,
                   (self->owner->flags & AFSOCKET_DGRAM) ? (LPPF_PKTTERM + LPPF_IGNORE_EOF) : 0);
    }
  else
    {
      if (self->owner->flags & AFSOCKET_DGRAM)
        {
          /* plain protocol */
          proto = log_proto_plain_new_server(transport, self->owner->reader_options.padding,
                       self->owner->reader_options.msg_size,
                      (self->owner->flags & AFSOCKET_DGRAM) ? (LPPF_PKTTERM + LPPF_IGNORE_EOF) : 0);
        }
      else
        {
          /* framed protocol */
          proto = log_proto_framed_new_server(transport, self->owner->reader_options.msg_size);
        }
    }

  self->reader = log_reader_new(proto,
                                ((self->owner->flags & AFSOCKET_LOCAL) ? LR_LOCAL : 0) |
                                ((self->owner->flags & AFSOCKET_SYSLOG_PROTOCOL) ? LR_SYSLOG_PROTOCOL : 0));
  log_reader_set_options(self->reader, s, &self->owner->reader_options, 1, afsocket_sc_stats_source(self), self->owner->super.id, afsocket_sc_stats_instance(self));
  log_reader_set_peer_addr(self->reader, self->peer_addr);
  log_pipe_append(self->reader, s);
  if (log_pipe_init(self->reader, NULL))
    {
      self->owner->connections = g_list_prepend(self->owner->connections, self);
      return TRUE;
    }
  else
    {
      log_pipe_unref(self->reader);
      self->reader = NULL;
    }
  return FALSE;
}