1 #ifndef __GSK_HTTP_REQUEST_H_ 2 #define __GSK_HTTP_REQUEST_H_ 3 4 #ifndef __GSK_HTTP_HEADER_H_ 5 #include "gskhttpheader.h" 6 #endif 7 8 G_BEGIN_DECLS 9 10 typedef struct _GskHttpRequestClass GskHttpRequestClass; 11 typedef struct _GskHttpRequest GskHttpRequest; 12 13 #define GSK_TYPE_HTTP_REQUEST (gsk_http_request_get_type ()) 14 #define GSK_HTTP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_HTTP_REQUEST, GskHttpRequest)) 15 #define GSK_HTTP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_HTTP_REQUEST, GskHttpRequestClass)) 16 #define GSK_HTTP_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_HTTP_REQUEST, GskHttpRequestClass)) 17 #define GSK_IS_HTTP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_HTTP_REQUEST)) 18 #define GSK_IS_HTTP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_HTTP_REQUEST)) 19 20 struct _GskHttpRequestClass 21 { 22 GskHttpHeaderClass base_class; 23 }; 24 struct _GskHttpRequest 25 { 26 GskHttpHeader base_instance; 27 28 /*< public >*/ 29 /* the command: GET, PUT, POST, HEAD, etc */ 30 GskHttpVerb verb; 31 32 /* Note that HTTP/1.1 servers must accept the entire 33 * URL being included in `path'! (maybe including http:// ... */ 34 char *path; 35 36 GskHttpCharSet *accept_charsets; /* Accept-CharSet */ 37 GskHttpContentEncodingSet*accept_content_encodings; /* Accept-Encoding */ 38 GskHttpTransferEncodingSet*accept_transfer_encodings; /* TE */ 39 GskHttpMediaTypeSet *accept_media_types; /* Accept */ 40 GskHttpAuthorization *authorization; /* Authorization */ 41 GskHttpLanguageSet *accept_languages; /* Accept-Languages */ 42 char *host; /* Host */ 43 44 gboolean had_if_match; 45 char **if_match; /* If-Match */ 46 glong if_modified_since; /* If-Modified-Since */ 47 char *user_agent; /* User-Agent */ 48 49 char *referrer; /* Referer */ 50 51 char *from; /* The From: header (sect 14.22) */ 52 53 /* List of Cookie: headers. */ 54 GSList *cookies; 55 56 GskHttpAuthorization *proxy_authorization; 57 58 int keep_alive_seconds; /* -1 if not used */ 59 60 /* rarely used: */ 61 int max_forwards; /* -1 if not used */ 62 63 /* Nonstandard User-Agent information. 64 Many browsers provide this data to allow 65 dynamic content to take advantage of the 66 client configuration. (0 indicated "not supplied"). */ 67 unsigned ua_width, ua_height; 68 char *ua_color; 69 char *ua_os; 70 char *ua_cpu; 71 char *ua_language; 72 73 GskHttpRequestCacheDirective *cache_control; /* Cache-Control */ 74 }; 75 76 /* --- cookies --- */ 77 void gsk_http_request_add_cookie (GskHttpRequest *header, 78 GskHttpCookie *cookie); 79 void gsk_http_request_remove_cookie (GskHttpRequest *header, 80 GskHttpCookie *cookie); 81 GskHttpCookie *gsk_http_request_find_cookie (GskHttpRequest *header, 82 const char *key); 83 84 void gsk_http_request_set_cache_control (GskHttpRequest *request, 85 GskHttpRequestCacheDirective *directive); 86 87 gboolean gsk_http_request_has_content_body (GskHttpRequest *request); 88 89 /* request specific functions */ 90 /* unhandled: if_match */ 91 void gsk_http_request_add_charsets (GskHttpRequest *header, 92 GskHttpCharSet *char_sets); 93 void gsk_http_request_clear_charsets (GskHttpRequest *header); 94 void gsk_http_request_add_content_encodings (GskHttpRequest *header, 95 GskHttpContentEncodingSet *set); 96 void gsk_http_request_clear_content_encodings (GskHttpRequest *header); 97 void gsk_http_request_add_transfer_encodings (GskHttpRequest *header, 98 GskHttpTransferEncodingSet *set); 99 void gsk_http_request_clear_transfer_encodings(GskHttpRequest *header); 100 void gsk_http_request_add_media (GskHttpRequest *header, 101 GskHttpMediaTypeSet *set); 102 void gsk_http_request_clear_media (GskHttpRequest *header); 103 void gsk_http_request_set_authorization (GskHttpRequest *request, 104 gboolean is_proxy_auth, 105 GskHttpAuthorization *auth); 106 GskHttpAuthorization* 107 gsk_http_request_peek_authorization (GskHttpRequest *request, 108 gboolean is_proxy_auth); 109 /* Requests */ 110 GskHttpRequest *gsk_http_request_new_blank (void); 111 GskHttpRequest *gsk_http_request_new (GskHttpVerb verb, 112 const char *path); 113 114 typedef enum 115 { 116 GSK_HTTP_REQUEST_FIRST_LINE_ERROR, 117 GSK_HTTP_REQUEST_FIRST_LINE_SIMPLE, 118 GSK_HTTP_REQUEST_FIRST_LINE_FULL 119 } GskHttpRequestFirstLineStatus; 120 121 GskHttpRequestFirstLineStatus 122 gsk_http_request_parse_first_line (GskHttpRequest *request, 123 const char *line, 124 GError **error); 125 126 GHashTable *gsk_http_request_parse_cgi_query_string (const char *query_string); 127 128 /* XXX: duplicates gsk_url_split_form_urlencoded! */ 129 char ** gsk_http_parse_cgi_query_string (const char *query_string, 130 GError **error); 131 132 /* macros to get/set properties. */ 133 #define gsk_http_request_set_verb(request, verb) \ 134 g_object_set(GSK_HTTP_REQUEST(request), "verb", (GskHttpVerb)(verb), NULL) 135 #define gsk_http_request_get_verb(request) (GSK_HTTP_REQUEST(request)->verb) 136 #define gsk_http_request_set_if_modified_since(request, t) \ 137 g_object_set(GSK_HTTP_REQUEST(request), "if-modified-since", (long)(t), NULL) 138 #define gsk_http_request_get_if_modified_since(request) \ 139 (GSK_HTTP_REQUEST(request)->if_modified_since) 140 #define gsk_http_request_set_from(request, from) \ 141 g_object_set (GSK_HTTP_REQUEST(request), "from", (const char *) (from), NULL) 142 #define gsk_http_request_set_host(request, host) \ 143 g_object_set (GSK_HTTP_REQUEST(request), "host", (const char *) (host), NULL) 144 #define gsk_http_request_peek_from(request) \ 145 (GSK_HTTP_REQUEST(request)->from) 146 #define gsk_http_request_set_user_agent(request, user_agent) \ 147 g_object_set (GSK_HTTP_REQUEST(request), "user-agent", (const char *) (user_agent), NULL) 148 #define gsk_http_request_peek_user_agent(request) \ 149 (GSK_HTTP_REQUEST(request)->user_agent) 150 151 G_END_DECLS 152 153 #endif 154