/*
* 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_WEB_RESPONSE_H__
#define __COCKPIT_WEB_RESPONSE_H__
#include
#include "cockpitwebfilter.h"
G_BEGIN_DECLS
#define COCKPIT_RESOURCE_PACKAGE_VALID "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
#define COCKPIT_TYPE_WEB_RESPONSE (cockpit_web_response_get_type ())
#define COCKPIT_WEB_RESPONSE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), COCKPIT_TYPE_WEB_RESPONSE, CockpitWebResponse))
#define COCKPIT_IS_WEB_RESPONSE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), COCKPIT_TYPE_WEB_RESPONSE))
typedef enum {
COCKPIT_WEB_RESPONSE_READY = 1,
COCKPIT_WEB_RESPONSE_QUEUING,
COCKPIT_WEB_RESPONSE_COMPLETE,
COCKPIT_WEB_RESPONSE_SENT,
} CockpitWebResponding;
typedef enum {
COCKPIT_WEB_RESPONSE_CACHE_UNSET,
COCKPIT_WEB_RESPONSE_NO_CACHE,
COCKPIT_WEB_RESPONSE_CACHE_FOREVER,
COCKPIT_WEB_RESPONSE_CACHE_PRIVATE,
} CockpitCacheType;
#define COCKPIT_CHECKSUM_HEADER "X-Cockpit-Pkg-Checksum"
typedef struct _CockpitWebResponse CockpitWebResponse;
extern const gchar * cockpit_web_exception_escape_root;
extern const gchar * cockpit_web_failure_resource;
GType cockpit_web_response_get_type (void) G_GNUC_CONST;
CockpitWebResponse * cockpit_web_response_new (GIOStream *io,
const gchar *original_path,
const gchar *path,
const gchar *query,
GHashTable *in_headers);
void cockpit_web_response_set_method (CockpitWebResponse *response,
const gchar *method);
const gchar * cockpit_web_response_get_path (CockpitWebResponse *self);
const gchar * cockpit_web_response_get_query (CockpitWebResponse *self);
GIOStream * cockpit_web_response_get_stream (CockpitWebResponse *self);
CockpitWebResponding cockpit_web_response_get_state (CockpitWebResponse *self);
gboolean cockpit_web_response_skip_path (CockpitWebResponse *self);
gchar * cockpit_web_response_pop_path (CockpitWebResponse *self);
void cockpit_web_response_add_filter (CockpitWebResponse *self,
CockpitWebFilter *filter);
void cockpit_web_response_headers (CockpitWebResponse *self,
guint status,
const gchar *reason,
gssize length,
...) G_GNUC_NULL_TERMINATED;
void cockpit_web_response_headers_full (CockpitWebResponse *self,
guint status,
const gchar *reason,
gssize length,
GHashTable *headers);
gboolean cockpit_web_response_queue (CockpitWebResponse *self,
GBytes *block);
void cockpit_web_response_complete (CockpitWebResponse *self);
void cockpit_web_response_abort (CockpitWebResponse *self);
void cockpit_web_response_content (CockpitWebResponse *self,
GHashTable *headers,
GBytes *block,
...) G_GNUC_NULL_TERMINATED;
void cockpit_web_response_error (CockpitWebResponse *self,
guint status,
GHashTable *headers,
const char *format,
...) G_GNUC_PRINTF (4, 5);
void cockpit_web_response_gerror (CockpitWebResponse *self,
GHashTable *headers,
GError *error);
gchar ** cockpit_web_response_resolve_roots (const gchar **roots);
void cockpit_web_response_file (CockpitWebResponse *response,
const gchar *escaped,
const gchar **roots);
GBytes * cockpit_web_response_gunzip (GBytes *bytes,
GError **error);
GBytes * cockpit_web_response_negotiation (const gchar *path,
GHashTable *existing,
const gchar *language,
gchar **actual,
GError **error);
const gchar * cockpit_web_response_content_type (const gchar *path);
gboolean cockpit_web_should_suppress_output_error (const gchar *logname,
GError *error);
gboolean cockpit_web_response_is_simple_token (const gchar *string);
gboolean cockpit_web_response_is_header_value (const gchar *string);
void cockpit_web_response_set_cache_type (CockpitWebResponse *self,
CockpitCacheType cache_type);
const gchar * cockpit_web_response_get_url_root (CockpitWebResponse *response);
const gchar * cockpit_web_response_get_protocol (GIOStream *connection,
GHashTable *headers);
void cockpit_web_response_template (CockpitWebResponse *response,
const gchar *escaped,
const gchar **roots,
GHashTable *values);
gchar * cockpit_web_response_security_policy (const gchar *content_security_policy,
const gchar *self_origin);
G_END_DECLS
#endif /* __COCKPIT_RESPONSE_H__ */