void SCTPChunkStatisticsDialog::on_pushButton_clicked()
{
    FILE* fp;

    pref_t *pref = prefs_find_preference(prefs_find_module("sctp"),"statistics_chunk_types");
    if (!pref) {
        g_log(NULL, G_LOG_LEVEL_ERROR, "Can't find preference sctp/statistics_chunk_types");
        return;
    }

    uat_t *uat = prefs_get_uat_value(pref);

    gchar* fname = uat_get_actual_filename(uat,TRUE);

    if (!fname) {
        return;
    }
    fp = ws_fopen(fname,"w");

    if (!fp && errno == ENOENT) {
        gchar *pf_dir_path = NULL;
        if (create_persconffile_dir(&pf_dir_path) != 0) {
            g_free (pf_dir_path);
            return;
        }
        fp = ws_fopen(fname,"w");
    }

    if (!fp) {
        return;
    }

    g_free (fname);

    fprintf(fp,"# This file is automatically generated, DO NOT MODIFY.\n");
    char str[40];
    struct chunkTypes tempChunk;

    for (int i = 0; i < chunks.size(); i++) {
        tempChunk = chunks.value(i);
        g_snprintf(str, sizeof str, "\"%d\",\"%s\",\"%s\"\n", tempChunk.id, tempChunk.name, tempChunk.hide==0?"Show":"Hide");
        fputs(str, fp);
        void *rec = g_malloc0(uat->record_size);
        uat_add_record(uat, rec, TRUE);
        if (uat->free_cb) {
            uat->free_cb(rec);
        }
        g_free(rec);
    }

    fclose(fp);
}
예제 #2
0
static void uat_plen_record_post_update_cb(void) {
	guint i, num_default;
	uat_plen_record_t rec;

	/* If there are no records, create default list */
	if (num_plen_uat == 0) {
		num_default = sizeof(default_range)/sizeof(range_t);

		/* default values for packet lengths */
		for (i = 0; i < num_default; i++)
		{
			rec.packet_range = &default_range[i];
			uat_add_record(plen_uat, &rec, TRUE);
		}
	}
}
예제 #3
0
/*
 * Create a new filter_expression and add it to the end of the list
 * of filter_expressions.
 */
filter_expression_t*
filter_expression_new(const gchar *label, const gchar *expr,
		      const gchar *comment, const gboolean enabled)
{
	filter_expression_t expression;

	// UAT allocates its own memory and then deep-copies this structure in.
	memset(&expression, 0, sizeof(expression));
	expression.label = (gchar *)label;
	expression.expression = (gchar *)expr;
	expression.comment = (gchar *)comment;
	expression.enabled = enabled;

	/* XXX - This is just returned to make GTK GUI work. */
	return (filter_expression_t*)uat_add_record(display_filter_macro_uat, &expression, TRUE);
}
예제 #4
0
void UatDialog::addRecord(bool copy_from_current)
{
    if (!uat_) return;

    void *rec = g_malloc0(uat_->record_size);

    if (copy_from_current && uat_->copy_cb) {
        QTreeWidgetItem *item = ui->uatTreeWidget->currentItem();
        if (!item) return;
        guint row = item->data(0, Qt::UserRole).toUInt();
        uat_->copy_cb(rec, UAT_INDEX_PTR(uat_, row), uat_->record_size);
    } else {
        for (guint col = 0; col < uat_->ncols; col++) {
            uat_field_t *field = &uat_->fields[col];
            switch (field->mode) {
            case PT_TXTMOD_ENUM:
                guint length;
                char *str;
                field->cb.tostr(rec, &str, &length, field->cbdata.tostr, field->fld_data);
                field->cb.set(rec, str, length, field->cbdata.set, field->fld_data);
                g_free(str);
                break;
            case PT_TXTMOD_NONE:
                break;
            default:
                field->cb.set(rec, "", 0, field->cbdata.set, field->fld_data);
                break;
            }
        }
    }

    uat_add_record(uat_, rec, TRUE);
    if (uat_->free_cb) {
        uat_->free_cb(rec);
    }
    g_free(rec);
    uat_->changed = TRUE;
    updateItems();
    activateLastItem();
}