Blame src/dbus/abrt_problems2_service.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 interface.
Packit 8ea169
Packit 8ea169
  AbrtP2Service is a central point. All other components should communicate to
Packit 8ea169
  each other via AbrtP2Service as much as possible.
Packit 8ea169
Packit 8ea169
  AbrtP2Service manages all D-Bus objects. It register new object paths in
Packit 8ea169
  D-Bus daemon. D-Bus objects are hidden behind AbrtP2Object that links D-Bus
Packit 8ea169
  path with an implementation - node (real object -> Entry, Session, Task) .
Packit 8ea169
*/
Packit 8ea169
#ifndef ABRT_PROBLEMS2_SERVICE_H
Packit 8ea169
#define ABRT_PROBLEMS2_SERVICE_H
Packit 8ea169
Packit 8ea169
#include <glib-object.h>
Packit 8ea169
#include <gio/gio.h>
Packit 8ea169
Packit 8ea169
#define ABRT_P2_BUS "org.freedesktop.problems"
Packit 8ea169
#define ABRT_P2_PATH "/org/freedesktop/Problems2"
Packit 8ea169
#define ABRT_P2_NS "org.freedesktop.Problems2"
Packit 8ea169
#define ABRT_P2_NS_MEMBER(name) ABRT_P2_NS"."name
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * D-Bus object representation
Packit 8ea169
 */
Packit 8ea169
typedef struct _AbrtP2Object AbrtP2Object;
Packit 8ea169
const char *abrt_p2_object_path(AbrtP2Object *obj);
Packit 8ea169
void *abrt_p2_object_get_node(AbrtP2Object *obj);
Packit 8ea169
void abrt_p2_object_destroy(AbrtP2Object *obj);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Service - something like object manager
Packit 8ea169
 */
Packit 8ea169
#define TYPE_ABRT_P2_SERVICE abrt_p2_service_get_type ()
Packit 8ea169
G_DECLARE_FINAL_TYPE(AbrtP2Service, abrt_p2_service, ABRT_P2, SERVICE, GObject)
Packit 8ea169
Packit 8ea169
AbrtP2Service *abrt_p2_service_new(GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_service_register_objects(AbrtP2Service *service,
Packit 8ea169
            GDBusConnection *connection,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
const char *abrt_p2_service_session_path(AbrtP2Service *service,
Packit 8ea169
            const char *caller,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
uid_t abrt_p2_service_caller_uid(AbrtP2Service *service,
Packit 8ea169
            const char *caller,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
uid_t abrt_p2_service_caller_real_uid(AbrtP2Service *service,
Packit 8ea169
            const char *caller,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
char *abrt_p2_service_save_problem(AbrtP2Service *service,
Packit 8ea169
            GVariant *problem_info,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_service_remove_problem(AbrtP2Service *service,
Packit 8ea169
            const char *entry_path,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_entry_problem_data(AbrtP2Service *service,
Packit 8ea169
            const char *entry_path,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
Packit 8ea169
enum {
Packit 8ea169
    ABRT_P2_SERVICE_ENTRY_LOOKUP_NOFLAGS  = 0x0, ///< return with error if not found
Packit 8ea169
    ABRT_P2_SERVICE_ENTRY_LOOKUP_OPTIONAL = 0x1, ///< return NULL if not found
Packit 8ea169
} AbrtP2ServiceEntryLookupFlag;
Packit 8ea169
Packit 8ea169
AbrtP2Object *abrt_p2_service_get_entry_for_problem(AbrtP2Service *service,
Packit 8ea169
            const char *problem_id,
Packit 8ea169
            int flags,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
struct _AbrtP2Entry;
Packit 8ea169
AbrtP2Object *abrt_p2_service_register_entry(AbrtP2Service *service,
Packit 8ea169
            struct _AbrtP2Entry *entry,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_notify_entry_object(AbrtP2Service *service,
Packit 8ea169
            AbrtP2Object *obj,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_service_user_can_create_new_problem(AbrtP2Service *service,
Packit 8ea169
            uid_t uid);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_new_problem(AbrtP2Service *service,
Packit 8ea169
            AbrtP2Object *session_obj,
Packit 8ea169
            GVariant *problem_info,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_new_problem_async(AbrtP2Service *service,
Packit 8ea169
            GVariant *problem_info,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GUnixFDList *fd_list,
Packit 8ea169
            GCancellable *cancellable,
Packit 8ea169
            GAsyncReadyCallback callback,
Packit 8ea169
            gpointer user_data);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_new_problem_finish(AbrtP2Service *service,
Packit 8ea169
            GAsyncResult *result,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_callers_session(AbrtP2Service *service,
Packit 8ea169
            const char *caller,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * GetProblems
Packit 8ea169
 */
Packit 8ea169
typedef enum
Packit 8ea169
{
Packit 8ea169
    ABRT_P2_SERVICE_GET_PROBLEM_FLAGS_NONE = 0x0,
Packit 8ea169
    ABRT_P2_SERVICE_GET_PROBLEM_FLAGS_FOREIGN = 0x1,
Packit 8ea169
    ABRT_P2_SERVICE_GET_PROBLEM_FLAGS_NEW = 0x2,
Packit 8ea169
} AbrtP2ServiceGetProblemsFlags;
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_get_problems(AbrtP2Service *service,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            gint32 flags,
Packit 8ea169
            GVariant *options,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
GVariant *abrt_p2_service_delete_problems(AbrtP2Service *service,
Packit 8ea169
            GVariant *entries,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
/* Configuration option: D-Bus maximum size of a message, to avoid magical
Packit 8ea169
 *                       disappearing of the service - if you exceed this limit
Packit 8ea169
 *                       D-Bus daemon disconnects you from the bus
Packit 8ea169
 */
Packit 8ea169
long abrt_p2_service_max_message_size(AbrtP2Service *service);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_max_message_size(AbrtP2Service *service,
Packit 8ea169
            long max_message_size);
Packit 8ea169
Packit 8ea169
/* Configuration option: D-Bus maximum unix fds in a message, to avoid magical
Packit 8ea169
 *                       disappearing of the service - if you exceed this limit
Packit 8ea169
 *                       D-Bus daemon disconnects you from the bus
Packit 8ea169
 */
Packit 8ea169
long abrt_p2_service_max_message_unix_fds(AbrtP2Service *service);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_max_message_unix_fds(AbrtP2Service *service,
Packit 8ea169
            long max_message_unix_fds);
Packit 8ea169
Packit 8ea169
/* Configuration option: maximal number of connected clients per user */
Packit 8ea169
unsigned abrt_p2_service_user_clients_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_user_clients_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            unsigned limit);
Packit 8ea169
Packit 8ea169
/* Configuration option: elements count limit */
Packit 8ea169
unsigned abrt_p2_service_elements_limit(AbrtP2Service *service,
Packit 8ea169
        uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_elements_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            unsigned limit);
Packit 8ea169
Packit 8ea169
/* Configuration option: data size limit */
Packit 8ea169
off_t abrt_p2_service_data_size_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_data_size_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            off_t limit);
Packit 8ea169
Packit 8ea169
/* Configuration option: user problems limit */
Packit 8ea169
unsigned abrt_p2_service_user_problems_limit(AbrtP2Service *service,
Packit 8ea169
           uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_user_problems_limit(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            unsigned limit);
Packit 8ea169
Packit 8ea169
/* Configuration option: throttling magnitude */
Packit 8ea169
unsigned abrt_p2_service_new_problem_throttling_magnitude(AbrtP2Service *service,
Packit 8ea169
            uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_new_problem_throttling_magnitude(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            unsigned limit);
Packit 8ea169
Packit 8ea169
/* Configuration option: new problems batch */
Packit 8ea169
unsigned abrt_p2_service_new_problems_batch(AbrtP2Service *service,
Packit 8ea169
            uid_t uid);
Packit 8ea169
Packit 8ea169
void abrt_p2_service_set_new_problems_batch(AbrtP2Service *service,
Packit 8ea169
            uid_t uid,
Packit 8ea169
            unsigned limit);
Packit 8ea169
Packit 8ea169
#endif/*ABRT_PROBLEMS2_SERVICE_H*/