#ifndef __GSK_HTTP_REQUEST_H_
#define __GSK_HTTP_REQUEST_H_
#ifndef __GSK_HTTP_HEADER_H_
#include "gskhttpheader.h"
#endif
G_BEGIN_DECLS
typedef struct _GskHttpRequestClass GskHttpRequestClass;
typedef struct _GskHttpRequest GskHttpRequest;
#define GSK_TYPE_HTTP_REQUEST (gsk_http_request_get_type ())
#define GSK_HTTP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_HTTP_REQUEST, GskHttpRequest))
#define GSK_HTTP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_HTTP_REQUEST, GskHttpRequestClass))
#define GSK_HTTP_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_HTTP_REQUEST, GskHttpRequestClass))
#define GSK_IS_HTTP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_HTTP_REQUEST))
#define GSK_IS_HTTP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_HTTP_REQUEST))
struct _GskHttpRequestClass
{
GskHttpHeaderClass base_class;
};
struct _GskHttpRequest
{
GskHttpHeader base_instance;
/*< public >*/
/* the command: GET, PUT, POST, HEAD, etc */
GskHttpVerb verb;
/* Note that HTTP/1.1 servers must accept the entire
* URL being included in `path'! (maybe including http:// ... */
char *path;
GskHttpCharSet *accept_charsets; /* Accept-CharSet */
GskHttpContentEncodingSet*accept_content_encodings; /* Accept-Encoding */
GskHttpTransferEncodingSet*accept_transfer_encodings; /* TE */
GskHttpMediaTypeSet *accept_media_types; /* Accept */
GskHttpAuthorization *authorization; /* Authorization */
GskHttpLanguageSet *accept_languages; /* Accept-Languages */
char *host; /* Host */
gboolean had_if_match;
char **if_match; /* If-Match */
glong if_modified_since; /* If-Modified-Since */
char *user_agent; /* User-Agent */
char *referrer; /* Referer */
char *from; /* The From: header (sect 14.22) */
/* List of Cookie: headers. */
GSList *cookies;
GskHttpAuthorization *proxy_authorization;
int keep_alive_seconds; /* -1 if not used */
/* rarely used: */
int max_forwards; /* -1 if not used */
/* Nonstandard User-Agent information.
Many browsers provide this data to allow
dynamic content to take advantage of the
client configuration. (0 indicated "not supplied"). */
unsigned ua_width, ua_height;
char *ua_color;
char *ua_os;
char *ua_cpu;
char *ua_language;
GskHttpRequestCacheDirective *cache_control; /* Cache-Control */
};
/* --- cookies --- */
void gsk_http_request_add_cookie (GskHttpRequest *header,
GskHttpCookie *cookie);
void gsk_http_request_remove_cookie (GskHttpRequest *header,
GskHttpCookie *cookie);
GskHttpCookie *gsk_http_request_find_cookie (GskHttpRequest *header,
const char *key);
void gsk_http_request_set_cache_control (GskHttpRequest *request,
GskHttpRequestCacheDirective *directive);
gboolean gsk_http_request_has_content_body (GskHttpRequest *request);
/* request specific functions */
/* unhandled: if_match */
void gsk_http_request_add_charsets (GskHttpRequest *header,
GskHttpCharSet *char_sets);
void gsk_http_request_clear_charsets (GskHttpRequest *header);
void gsk_http_request_add_content_encodings (GskHttpRequest *header,
GskHttpContentEncodingSet *set);
void gsk_http_request_clear_content_encodings (GskHttpRequest *header);
void gsk_http_request_add_transfer_encodings (GskHttpRequest *header,
GskHttpTransferEncodingSet *set);
void gsk_http_request_clear_transfer_encodings(GskHttpRequest *header);
void gsk_http_request_add_media (GskHttpRequest *header,
GskHttpMediaTypeSet *set);
void gsk_http_request_clear_media (GskHttpRequest *header);
void gsk_http_request_set_authorization (GskHttpRequest *request,
gboolean is_proxy_auth,
GskHttpAuthorization *auth);
GskHttpAuthorization*
gsk_http_request_peek_authorization (GskHttpRequest *request,
gboolean is_proxy_auth);
/* Requests */
GskHttpRequest *gsk_http_request_new_blank (void);
GskHttpRequest *gsk_http_request_new (GskHttpVerb verb,
const char *path);
typedef enum
{
GSK_HTTP_REQUEST_FIRST_LINE_ERROR,
GSK_HTTP_REQUEST_FIRST_LINE_SIMPLE,
GSK_HTTP_REQUEST_FIRST_LINE_FULL
} GskHttpRequestFirstLineStatus;
GskHttpRequestFirstLineStatus
gsk_http_request_parse_first_line (GskHttpRequest *request,
const char *line,
GError **error);
GHashTable *gsk_http_request_parse_cgi_query_string (const char *query_string);
/* XXX: duplicates gsk_url_split_form_urlencoded! */
char ** gsk_http_parse_cgi_query_string (const char *query_string,
GError **error);
/* macros to get/set properties. */
#define gsk_http_request_set_verb(request, verb) \
g_object_set(GSK_HTTP_REQUEST(request), "verb", (GskHttpVerb)(verb), NULL)
#define gsk_http_request_get_verb(request) (GSK_HTTP_REQUEST(request)->verb)
#define gsk_http_request_set_if_modified_since(request, t) \
g_object_set(GSK_HTTP_REQUEST(request), "if-modified-since", (long)(t), NULL)
#define gsk_http_request_get_if_modified_since(request) \
(GSK_HTTP_REQUEST(request)->if_modified_since)
#define gsk_http_request_set_from(request, from) \
g_object_set (GSK_HTTP_REQUEST(request), "from", (const char *) (from), NULL)
#define gsk_http_request_set_host(request, host) \
g_object_set (GSK_HTTP_REQUEST(request), "host", (const char *) (host), NULL)
#define gsk_http_request_peek_from(request) \
(GSK_HTTP_REQUEST(request)->from)
#define gsk_http_request_set_user_agent(request, user_agent) \
g_object_set (GSK_HTTP_REQUEST(request), "user-agent", (const char *) (user_agent), NULL)
#define gsk_http_request_peek_user_agent(request) \
(GSK_HTTP_REQUEST(request)->user_agent)
G_END_DECLS
#endif
syntax highlighted by Code2HTML, v. 0.9.1