/*
* This file is part of Cockpit.
*
* Copyright (C) 2014 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_TRANSPORT_H__
#define __COCKPIT_TRANSPORT_H__
#include
#include
G_BEGIN_DECLS
#define COCKPIT_TYPE_TRANSPORT (cockpit_transport_get_type ())
#define COCKPIT_TRANSPORT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), COCKPIT_TYPE_TRANSPORT, CockpitTransport))
#define COCKPIT_IS_TRANSPORT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), COCKPIT_TYPE_TRANSPORT))
#define COCKPIT_TRANSPORT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), COCKPIT_TYPE_TRANSPORT, CockpitTransportClass))
#define COCKPIT_TRANSPORT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), COCKPIT_TYPE_TRANSPORT, CockpitTransportClass))
typedef struct _CockpitTransport CockpitTransport;
typedef struct _CockpitTransportClass CockpitTransportClass;
typedef struct _CockpitTransportPrivate CockpitTransportPrivate;
struct _CockpitTransport {
GObject parent;
CockpitTransportPrivate *priv;
};
struct _CockpitTransportClass
{
GObjectClass parent_class;
/* signals */
/*
* Fired when the transport recieves a new message.
*/
gboolean (* recv) (CockpitTransport *transport,
const gchar *channel,
GBytes *data);
gboolean (* control) (CockpitTransport *transport,
const char *command,
const gchar *channel,
JsonObject *options,
GBytes *payload);
void (* closed) (CockpitTransport *transport,
const gchar *problem);
/* vfuncs */
/*
* Called when transport should queue a new message to send.
*/
void (* send) (CockpitTransport *transport,
const gchar *channel,
GBytes *data);
void (* close) (CockpitTransport *transport,
const gchar *problem);
};
GType cockpit_transport_get_type (void) G_GNUC_CONST;
void cockpit_transport_send (CockpitTransport *transport,
const gchar *channel,
GBytes *data);
void cockpit_transport_close (CockpitTransport *transport,
const gchar *problem);
void cockpit_transport_emit_recv (CockpitTransport *transport,
const gchar *channel,
GBytes *data);
void cockpit_transport_emit_control (CockpitTransport *transport,
const gchar *command,
const gchar *channel,
JsonObject *options,
GBytes *data);
void cockpit_transport_emit_closed (CockpitTransport *transport,
const gchar *problem);
void cockpit_transport_freeze (CockpitTransport *transport,
const gchar *channel);
void cockpit_transport_thaw (CockpitTransport *transport,
const gchar *channel);
GBytes * cockpit_transport_parse_frame (GBytes *message,
gchar **channel);
GBytes * cockpit_transport_maybe_frame (GBytes *message,
gchar **channel);
gboolean cockpit_transport_parse_command (GBytes *payload,
const gchar **command,
const gchar **channel,
JsonObject **options);
JsonObject *cockpit_transport_build_json (const gchar *name,
...) G_GNUC_NULL_TERMINATED;
GBytes * cockpit_transport_build_control (const gchar *name,
...) G_GNUC_NULL_TERMINATED;
G_END_DECLS
#endif /* __COCKPIT_TRANSPORT_H__ */