/* * This file is part of Cockpit. * * Copyright (C) 2013 Red Hat, Inc. * * Cockpit is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * Cockpit is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Cockpit; If not, see . */ #ifndef __COCKPIT_PIPE_H__ #define __COCKPIT_PIPE_H__ #include G_BEGIN_DECLS typedef enum { COCKPIT_PIPE_FLAGS_NONE = 0, COCKPIT_PIPE_STDERR_TO_STDOUT = 1 << 1, COCKPIT_PIPE_STDERR_TO_NULL = 1 << 2, COCKPIT_PIPE_STDERR_TO_MEMORY = 1 << 3, } CockpitPipeFlags; #define COCKPIT_TYPE_PIPE (cockpit_pipe_get_type ()) #define COCKPIT_PIPE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), COCKPIT_TYPE_PIPE, CockpitPipe)) #define COCKPIT_IS_PIPE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), COCKPIT_TYPE_PIPE)) #define COCKPIT_PIPE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), COCKPIT_TYPE_PIPE, CockpitPipeClass)) #define COCKPIT_PIPE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), COCKPIT_TYPE_PIPE, CockpitPipeClass)) typedef struct _CockpitPipe CockpitPipe; typedef struct _CockpitPipeClass CockpitPipeClass; typedef struct _CockpitPipePrivate CockpitPipePrivate; struct _CockpitPipe { GObject parent_instance; CockpitPipePrivate *priv; }; struct _CockpitPipeClass { GObjectClass parent_class; /* signals */ void (* read) (CockpitPipe *pipe, GByteArray *buffer, gboolean eof); void (* close) (CockpitPipe *pipe, const gchar *problem); }; GType cockpit_pipe_get_type (void) G_GNUC_CONST; CockpitPipe * cockpit_pipe_new (const gchar *name, gint in_fd, gint out_fd); CockpitPipe * cockpit_pipe_new_user_fd (const gchar *name, gint fd); CockpitPipe * cockpit_pipe_spawn (const gchar **argv, const gchar **env, const gchar *directory, CockpitPipeFlags flags); CockpitPipe * cockpit_pipe_pty (const gchar **argv, const gchar **env, const gchar *directory, guint16 window_rows, guint16 window_cols); CockpitPipe * cockpit_pipe_connect (const gchar *name, GSocketAddress *address); /* HACK: Trying to debug self->priv->closed assertion */ #define cockpit_pipe_write(s, d) (_cockpit_pipe_write (s, d, G_STRFUNC, __LINE__)) void _cockpit_pipe_write (CockpitPipe *self, GBytes *data, const gchar *caller, gint line); void cockpit_pipe_close (CockpitPipe *self, const gchar *problem); gint cockpit_pipe_exit_status (CockpitPipe *self); const gchar * cockpit_pipe_get_name (CockpitPipe *self); GByteArray * cockpit_pipe_get_buffer (CockpitPipe *self); GByteArray * cockpit_pipe_get_stderr (CockpitPipe *self); gboolean cockpit_pipe_get_pid (CockpitPipe *self, GPid *pid); void cockpit_pipe_skip (GByteArray *buffer, gsize skip); GBytes * cockpit_pipe_consume (GByteArray *buffer, gsize before, gsize length, gsize after); gchar ** cockpit_pipe_get_environ (const gchar **set, const gchar *directory); G_END_DECLS #endif /* __COCKPIT_PIPE_H__ */