#ifndef __GSK_HTTP_RESPONSE_H_
#define __GSK_HTTP_RESPONSE_H_
#ifndef __GSK_HTTP_HEADER_H_
#include "gskhttpheader.h"
#endif
G_BEGIN_DECLS
typedef struct _GskHttpResponseClass GskHttpResponseClass;
typedef struct _GskHttpResponse GskHttpResponse;
#define GSK_TYPE_HTTP_RESPONSE (gsk_http_response_get_type ())
#define GSK_HTTP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_HTTP_RESPONSE, GskHttpResponse))
#define GSK_HTTP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_HTTP_RESPONSE, GskHttpResponseClass))
#define GSK_HTTP_RESPONSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_HTTP_RESPONSE, GskHttpResponseClass))
#define GSK_IS_HTTP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_HTTP_RESPONSE))
#define GSK_IS_HTTP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_HTTP_RESPONSE))
struct _GskHttpResponseClass
{
GskHttpHeaderClass base_class;
};
struct _GskHttpResponse
{
GskHttpHeader base_instance;
GskHttpStatus status_code;
int age; /* Age */
/* initially allowed_verbs == 0;
* since it is an error not to allow any verbs;
* otherwise it is a bitwise-OR: (1 << GSK_HTTP_VERB_*)
*/
guint allowed_verbs;
GskHttpResponseCacheDirective *cache_control; /* Cache-Control */
unsigned has_md5sum : 1;
unsigned char md5sum[16]; /* Content-MD5 (14.15) */
/* List of Set-Cookie: headers. */
GSList *set_cookies;
/* The `Location' to redirect to. */
char *location;
/* may be set to ((time_t) -1) to omit them. */
glong expires;
char *expires_str;
/* The ``Entity-Tag'', cf RFC 2616, Sections 14.24, 14.26, 14.44. */
char *etag;
GskHttpAuthenticate *proxy_authenticate;
/* This is the WWW-Authenticate: header line. */
GskHttpAuthenticate *authenticate;
/* If `retry_after_relative', the retry_after is the number
* of seconds to wait before retrying; otherwise,
* it is a unix-time indicting when to retry.
*
* (Corresponding to the `Retry-After' header, cf RFC 2616, 14.37)
*/
guint has_retry_after : 1;
gboolean retry_after_relative;
glong retry_after;
/* The Last-Modified header. If != -1, this is the unix-time
* the message-body-contents were last modified. (RFC 2616, section 14.29)
*/
glong last_modified;
char *server; /* The Server: header */
};
/* Responses. */
GskHttpResponse *gsk_http_response_new_blank (void);
/* Redirects should be accompanied by an HTML body saying the URL. */
GskHttpResponse *gsk_http_response_new_redirect (const char *location);
GskHttpResponse *gsk_http_response_from_request (GskHttpRequest *request,
GskHttpStatus status_code,
gint64 length);
gboolean gsk_http_response_process_first_line (GskHttpResponse *response,
const char *line);
void gsk_http_response_set_retry_after (GskHttpResponse *response,
gboolean is_relative,
glong time);
void gsk_http_response_set_no_retry_after(GskHttpResponse *response);
void gsk_http_response_set_authenticate (GskHttpResponse *response,
gboolean is_proxy_auth,
GskHttpAuthenticate *auth);
GskHttpAuthenticate*
gsk_http_response_peek_authenticate(GskHttpResponse *response,
gboolean is_proxy_auth);
/* --- setting / getting --- */
gboolean gsk_http_response_has_content_body (GskHttpResponse *response,
GskHttpRequest *request);
void gsk_http_response_set_cache_control(
GskHttpResponse *response,
GskHttpResponseCacheDirective *directive);
#define gsk_http_response_set_status_code(response, status) \
G_STMT_START{ GSK_HTTP_RESPONSE(response)->status_code = (status); G_STMT_END
#define gsk_http_response_get_status_code(response) \
(GSK_HTTP_RESPONSE(response)->status_code)
void gsk_http_response_set_allowed_verbs (GskHttpResponse *response,
guint allowed);
#define gsk_http_response_get_allowed_verbs(header) \
(GSK_HTTP_RESPONSE(header)->allowed_verbs)
/* md5sum may be NULL to unset it */
void gsk_http_response_set_md5 (GskHttpResponse *response,
const guint8 *md5sum);
const guint8 *gsk_http_response_peek_md5 (GskHttpResponse *response);
#define gsk_http_response_set_location(response, location) \
g_object_set (GSK_HTTP_RESPONSE(response), "location", (const char *) (location), NULL)
#define gsk_http_response_peek_location(response) \
(GSK_HTTP_RESPONSE(response)->location)
#define gsk_http_response_set_etag(response, etag) \
g_object_set (GSK_HTTP_RESPONSE(response), "etag", (const char *)(etag), NULL)
#define gsk_http_response_peek_etag(response) \
(GSK_HTTP_RESPONSE(response)->etag)
#define gsk_http_response_set_server(response, server) \
g_object_set (GSK_HTTP_RESPONSE(response), "server", (const char *) (server), NULL)
#define gsk_http_response_peek_server(response) \
(GSK_HTTP_RESPONSE(response)->server)
#define gsk_http_response_set_expires(response, expires) \
g_object_set (GSK_HTTP_RESPONSE(response), "expires", (long) (expires), NULL)
#define gsk_http_response_get_expires(response) \
(GSK_HTTP_RESPONSE(response)->expires)
#define gsk_http_response_peek_cache_control(response) \
(GSK_HTTP_RESPONSE(response)->cache_control)
#define gsk_http_response_set_age(response, age) \
g_object_set (GSK_HTTP_RESPONSE(response), "age", (long) (age), NULL)
#define gsk_http_response_get_age(response) \
(GSK_HTTP_RESPONSE(response)->age)
#define gsk_http_response_set_last_modified(response, last_modified) \
g_object_set (GSK_HTTP_RESPONSE(response), "last-modified", (long) (last_modified), NULL)
#define gsk_http_response_get_last_modified(response) \
(GSK_HTTP_RESPONSE(response)->last_modified)
#define gsk_http_response_set_content_type gsk_http_header_set_content_type
#define gsk_http_response_get_content_type gsk_http_header_get_content_type
#define gsk_http_response_set_content_subtype gsk_http_header_set_content_subtype
#define gsk_http_response_get_content_subtype gsk_http_header_get_content_subtype
G_END_DECLS
#endif
syntax highlighted by Code2HTML, v. 0.9.1