Blame src/dbus/abrt_problems2_entry.h

Packit 8ea169
/*
Packit 8ea169
  Copyright (C) 2015  ABRT team
Packit 8ea169
Packit 8ea169
  This program is free software; you can redistribute it and/or modify
Packit 8ea169
  it under the terms of the GNU General Public License as published by
Packit 8ea169
  the Free Software Foundation; either version 2 of the License, or
Packit 8ea169
  (at your option) any later version.
Packit 8ea169
Packit 8ea169
  This program is distributed in the hope that it will be useful,
Packit 8ea169
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 8ea169
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 8ea169
  GNU General Public License for more details.
Packit 8ea169
Packit 8ea169
  You should have received a copy of the GNU General Public License along
Packit 8ea169
  with this program; if not, write to the Free Software Foundation, Inc.,
Packit 8ea169
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Packit 8ea169
Packit 8ea169
  ------------------------------------------------------------------------------
Packit 8ea169
Packit 8ea169
  This file declares functions for org.freedesktop.Problems2.Entry interface.
Packit 8ea169
Packit 8ea169
  Proxy for problem directories. Entry can be in one of three states. The
Packit 8ea169
  states are need to distinguish between just created problem directories (i.e.
Packit 8ea169
  not yet processed by abrtd), directories already accepted by abrtd
Packit 8ea169
  ("post-create" finished successfully) and directories that were removed
Packit 8ea169
  (because there would be a room for race conditions -> remove directory vs.
Packit 8ea169
  destroy the corresponding D-Bus proxy).
Packit 8ea169
*/
Packit 8ea169
#ifndef ABRT_P2_ENTRY_H
Packit 8ea169
#define ABRT_P2_ENTRY_H
Packit 8ea169
Packit 8ea169
#include "libabrt.h"
Packit 8ea169
Packit 8ea169
#include <glib-object.h>
Packit 8ea169
#include <gio/gio.h>
Packit 8ea169
Packit 8ea169
G_BEGIN_DECLS
Packit 8ea169
Packit 8ea169
#define TYPE_ABRT_P2_ENTRY abrt_p2_entry_get_type ()
Packit 8ea169
G_DECLARE_FINAL_TYPE(AbrtP2Entry, abrt_p2_entry, ABRT_P2, ENTRY, GObject)
Packit 8ea169
Packit 8ea169
AbrtP2Entry *abrt_p2_entry_new(char *dirname);
Packit 8ea169
Packit 8ea169
typedef enum {
Packit 8ea169
    ABRT_P2_ENTRY_STATE_NEW,      ///< not yet processed by abrtd
Packit 8ea169
    ABRT_P2_ENTRY_STATE_COMPLETE, ///< already processed by abrtd
Packit 8ea169
    ABRT_P2_ENTRY_STATE_DELETED,  ///< just removed
Packit 8ea169
} AbrtP2EntryState;
Packit 8ea169
Packit 8ea169
AbrtP2Entry *abrt_p2_entry_new_with_state(char *dirname,
Packit 8ea169
            AbrtP2EntryState state);
Packit 8ea169
Packit 8ea169
AbrtP2EntryState abrt_p2_entry_state(AbrtP2Entry *entry);
Packit 8ea169
Packit 8ea169
void abrt_p2_entry_set_state(AbrtP2Entry *entry,
Packit 8ea169
            AbrtP2EntryState state);
Packit 8ea169
Packit 8ea169
int abrt_p2_entry_delete(AbrtP2Entry *entry,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_entry_accessible_by_uid(AbrtP2Entry *entry,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            struct dump_dir **dd);
Packit 8ea169
Packit 8ea169
const char *abrt_p2_entry_problem_id(AbrtP2Entry *entry);
Packit 8ea169
Packit 8ea169
struct dump_dir *abrt_p2_entry_open_dump_dir(AbrtP2Entry *entry,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            int dd_flags,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_problem_data(AbrtP2Entry *entry,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_delete_elements(AbrtP2Entry *entry,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Properties
Packit 8ea169
 */
Packit 8ea169
uid_t abrt_p2_entry_get_owner(AbrtP2Entry *entry, GError **error);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Read elements
Packit 8ea169
 */
Packit 8ea169
enum AbrtP2EntryReadElementsFlags
Packit 8ea169
{
Packit 8ea169
    ABRT_P2_ENTRY_READ_ALL_FD             = 0x01,
Packit 8ea169
    ABRT_P2_ENTRY_READ_ALL_TYPES          = 0x02,
Packit 8ea169
    ABRT_P2_ENTRY_READ_ONLY_TEXT          = 0x04,
Packit 8ea169
    ABRT_P2_ENTRY_READ_ONLY_BIG_TEXT      = 0x08,
Packit 8ea169
    ABRT_P2_ENTRY_READ_ONLY_BINARY        = 0x10,
Packit 8ea169
    ABRT_P2_ENTRY_READ_ALL_NO_FD          = 0x20,
Packit 8ea169
};
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_read_elements(AbrtP2Entry *entry,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            long max_size,
Packit 8ea169
            long max_unix_fds,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
void abrt_p2_entry_read_elements_async(AbrtP2Entry *entry,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            long max_size,
Packit 8ea169
            long max_unix_fds,
Packit 8ea169
            GCancellable *cancellable,
Packit 8ea169
            GAsyncReadyCallback callback,
Packit 8ea169
            gpointer user_data);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_read_elements_finish(AbrtP2Entry *entry,
Packit 8ea169
            GAsyncResult *result,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Save elements
Packit 8ea169
 */
Packit 8ea169
enum AbrP2EntrySaveElementsFlags
Packit 8ea169
{
Packit 8ea169
    ABRT_P2_ENTRY_IO_ERROR_FATAL             = (1 << 0),
Packit 8ea169
    ABRT_P2_ENTRY_UNSUPPORTED_ERROR_FATAL    = (1 << 1),
Packit 8ea169
    ABRT_P2_ENTRY_ELEMENTS_COUNT_LIMIT_FATAL = (1 << 2),
Packit 8ea169
    ABRT_P2_ENTRY_DATA_SIZE_LIMIT_FATAL      = (1 << 3),
Packit 8ea169
Packit 8ea169
    ABRT_P2_ENTRY_ALL_FATAL =(  ABRT_P2_ENTRY_IO_ERROR_FATAL
Packit 8ea169
                    | ABRT_P2_ENTRY_UNSUPPORTED_ERROR_FATAL
Packit 8ea169
                    | ABRT_P2_ENTRY_ELEMENTS_COUNT_LIMIT_FATAL
Packit 8ea169
                    | ABRT_P2_ENTRY_DATA_SIZE_LIMIT_FATAL),
Packit 8ea169
};
Packit 8ea169
Packit 8ea169
typedef struct
Packit 8ea169
{
Packit 8ea169
    unsigned elements_count;
Packit 8ea169
    off_t    data_size;
Packit 8ea169
} AbrtP2EntrySaveElementsLimits;
Packit 8ea169
Packit 8ea169
#define ABRT_P2_ENTRY_SAVE_ELEMENTS_LIMITS_INITIALIZER(l, ec, ds) \
Packit 8ea169
        do  { (l).elements_count = (ec); (l).data_size = (ds); } while (0)
Packit 8ea169
Packit 8ea169
#define ABRT_P2_ENTRY_SAVE_ELEMENTS_LIMITS_ON_STACK(l, ec, ds) \
Packit 8ea169
        AbrtP2EntrySaveElementsLimits l; \
Packit 8ea169
        ABRT_P2_ENTRY_SAVE_ELEMENTS_LIMITS_INITIALIZER(l, ec, ds);
Packit 8ea169
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_save_elements(AbrtP2Entry *entry,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            AbrtP2EntrySaveElementsLimits *limits,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
void abrt_p2_entry_save_elements_async(AbrtP2Entry *entry,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            AbrtP2EntrySaveElementsLimits *limits,
Packit 8ea169
            GCancellable *cancellable,
Packit 8ea169
            GAsyncReadyCallback callback,
Packit 8ea169
            gpointer user_data);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_entry_save_elements_finish(AbrtP2Entry *entry,
Packit 8ea169
            GAsyncResult *result,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Utility functions
Packit 8ea169
 */
Packit 8ea169
int abrt_p2_entry_save_elements_in_dump_dir(struct dump_dir *dd,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *elements,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            AbrtP2EntrySaveElementsLimits *limits,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
G_END_DECLS
Packit 8ea169
Packit 8ea169
#endif/*ABRT_P2_ENTRY_H*/