コード例 #1
0
static int analyzer_docsis_cleanup(struct analyzer *analyzer) {

	struct analyzer_docsis_priv *priv = analyzer->priv;

	pthread_mutex_destroy(&priv->lock);

	if (priv->evt_cm_new)
		event_unregister(priv->evt_cm_new);

	if (priv->evt_cm_reg_status)
		event_unregister(priv->evt_cm_reg_status);

	if (priv->filter)
		filter_cleanup(priv->filter);
	
	int i;
	for (i = 0; i < ANALYZER_DOCSIS_CM_TABLE_SIZE; i++) {
		while (priv->cms[i]) {
			struct analyzer_docsis_cm *tmp = priv->cms[i];
			priv->cms[i] = tmp->next;
			free(tmp);
		}
	}

	free(priv);

	return POM_OK;
}
コード例 #2
0
struct filter *packet_filter_compile(char *filter_expr) {

	struct filter *f = filter_alloc(packet_filter_prop_compile, NULL, packet_filter_prop_get_val, packet_filter_prop_cleanup);
	if (!f)
		return NULL;
	if (filter_compile(filter_expr, f) != POM_OK) {
		filter_cleanup(f);
		return NULL;
	}
	return f;

}
コード例 #3
0
static int output_inject_filter_parse(void *priv, struct registry_param *param, char *value) {

	struct output_inject_priv *p = priv;
	if (p->filter) {
		filter_cleanup(p->filter);
		p->filter = NULL;
	}
	if (!strlen(value))
		return POM_OK;
	p->filter = packet_filter_compile(value);

	if (!p->filter)
		return POM_ERR;

	return POM_OK;
}
コード例 #4
0
ファイル: pipe-filter-gi.c プロジェクト: bitst0rm/Gnulib
/* Terminate the child process.  Do nothing if it already exited.  */
static void
filter_terminate (struct pipe_filter_gi *filter)
{
  if (!filter->exited)
    {
      /* Tell the child there is nothing more the parent will send.  */
      close (filter->fd[1]);
      filter_cleanup (filter, !filter->reader_terminated);
      close (filter->fd[0]);
      filter->exitstatus =
        wait_subprocess (filter->child, filter->progname, true,
                         filter->null_stderr, true, filter->exit_on_error,
                         NULL);
      if (filter->exitstatus != 0 && filter->exit_on_error)
        error (EXIT_FAILURE, 0,
               _("subprocess %s terminated with exit code %d"),
               filter->progname, filter->exitstatus);
      filter->exited = true;
    }
}
コード例 #5
0
ファイル: output_file.c プロジェクト: gmsoft-tuxicoman/pom-ng
int output_file_open(void *output_priv) {

	struct output_file_priv *priv = output_priv;

	char *filter_str = PTYPE_STRING_GETVAL(priv->p_filter);
	struct filter *filter = NULL;

	if (strlen(filter_str)) {
		filter = pload_filter_compile(filter_str);
		if (!filter) {
			pomlog(POMLOG_ERR "Error while parsing filter '%s'", filter_str);
			return POM_ERR;
		}
	}

	char *listen_pload_evt = PTYPE_BOOL_GETVAL(priv->p_listen_pload_evt);
	if (*listen_pload_evt && event_payload_listen_start() != POM_OK) {
		if (filter)
			filter_cleanup(filter);
		return POM_ERR;
	}

	return pload_listen_start(output_priv, NULL, filter, output_file_pload_open, output_file_pload_write, output_file_pload_close);
}