Git init
[profile/ivi/libsoup2.4.git] / libsoup / soup-message.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 2000-2003, Ximian, Inc.
4  */
5
6 #ifndef SOUP_MESSAGE_H
7 #define SOUP_MESSAGE_H 1
8
9 #include <libsoup/soup-types.h>
10 #include <libsoup/soup-message-body.h>
11 #include <libsoup/soup-message-headers.h>
12 #include <libsoup/soup-method.h>
13
14 G_BEGIN_DECLS
15
16 #define SOUP_TYPE_MESSAGE            (soup_message_get_type ())
17 #define SOUP_MESSAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_MESSAGE, SoupMessage))
18 #define SOUP_MESSAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_MESSAGE, SoupMessageClass))
19 #define SOUP_IS_MESSAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUP_TYPE_MESSAGE))
20 #define SOUP_IS_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_MESSAGE))
21 #define SOUP_MESSAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_MESSAGE, SoupMessageClass))
22
23 struct _SoupMessage {
24         GObject parent;
25
26         /*< public >*/
27         const char         *method;
28
29         guint               status_code;
30         char               *reason_phrase;
31
32         SoupMessageBody    *request_body;
33         SoupMessageHeaders *request_headers;
34
35         SoupMessageBody    *response_body;
36         SoupMessageHeaders *response_headers;
37 };
38
39 typedef struct {
40         GObjectClass parent_class;
41
42         /* signals */
43         void     (*wrote_informational) (SoupMessage *msg);
44         void     (*wrote_headers)       (SoupMessage *msg);
45         void     (*wrote_chunk)         (SoupMessage *msg);
46         void     (*wrote_body)          (SoupMessage *msg);
47         void     (*got_informational)   (SoupMessage *msg);
48         void     (*got_headers)         (SoupMessage *msg);
49         void     (*got_chunk)           (SoupMessage *msg, SoupBuffer *chunk);
50         void     (*got_body)            (SoupMessage *msg);
51         void     (*restarted)           (SoupMessage *msg);
52         void     (*finished)            (SoupMessage *msg);
53
54         /* Padding for future expansion */
55         void (*_libsoup_reserved1) (void);
56         void (*_libsoup_reserved2) (void);
57         void (*_libsoup_reserved3) (void);
58         void (*_libsoup_reserved4) (void);
59 } SoupMessageClass;
60
61 GType soup_message_get_type (void);
62
63 #define SOUP_MESSAGE_METHOD           "method"
64 #define SOUP_MESSAGE_URI              "uri"
65 #define SOUP_MESSAGE_HTTP_VERSION     "http-version"
66 #define SOUP_MESSAGE_FLAGS            "flags"
67 #define SOUP_MESSAGE_SERVER_SIDE      "server-side"
68 #define SOUP_MESSAGE_STATUS_CODE      "status-code"
69 #define SOUP_MESSAGE_REASON_PHRASE    "reason-phrase"
70 #define SOUP_MESSAGE_FIRST_PARTY      "first-party"
71 #define SOUP_MESSAGE_REQUEST_BODY     "request-body"
72 #define SOUP_MESSAGE_REQUEST_HEADERS  "request-headers"
73 #define SOUP_MESSAGE_RESPONSE_BODY    "response-body"
74 #define SOUP_MESSAGE_RESPONSE_HEADERS "response-headers"
75 #define SOUP_MESSAGE_TLS_CERTIFICATE  "tls-certificate"
76 #define SOUP_MESSAGE_TLS_ERRORS       "tls-errors"
77
78 SoupMessage   *soup_message_new                 (const char        *method,
79                                                  const char        *uri_string);
80 SoupMessage   *soup_message_new_from_uri        (const char        *method,
81                                                  SoupURI           *uri);
82
83 void           soup_message_set_request         (SoupMessage       *msg,
84                                                  const char        *content_type,
85                                                  SoupMemoryUse      req_use,
86                                                  const char        *req_body,
87                                                  gsize              req_length);
88 void           soup_message_set_response        (SoupMessage       *msg,
89                                                  const char        *content_type,
90                                                  SoupMemoryUse      resp_use,
91                                                  const char        *resp_body,
92                                                  gsize              resp_length);
93
94 typedef enum {
95         SOUP_HTTP_1_0 = 0, /*< nick=http-1-0 >*/
96         SOUP_HTTP_1_1 = 1  /*< nick=http-1-1 >*/
97 } SoupHTTPVersion;
98
99 void             soup_message_set_http_version    (SoupMessage       *msg,
100                                                    SoupHTTPVersion    version);
101 SoupHTTPVersion  soup_message_get_http_version    (SoupMessage       *msg);
102
103 gboolean         soup_message_is_keepalive        (SoupMessage       *msg);
104
105 SoupURI         *soup_message_get_uri             (SoupMessage       *msg);
106 void             soup_message_set_uri             (SoupMessage       *msg,
107                                                    SoupURI           *uri);
108 SoupAddress     *soup_message_get_address         (SoupMessage       *msg);
109
110 SoupURI         *soup_message_get_first_party     (SoupMessage       *msg);
111 void             soup_message_set_first_party     (SoupMessage       *msg,
112                                                    SoupURI           *first_party);
113
114 typedef enum {
115         SOUP_MESSAGE_NO_REDIRECT          = (1 << 1),
116         SOUP_MESSAGE_CAN_REBUILD          = (1 << 2),
117 #ifndef LIBSOUP_DISABLE_DEPRECATED
118         SOUP_MESSAGE_OVERWRITE_CHUNKS     = (1 << 3),
119 #endif
120         SOUP_MESSAGE_CONTENT_DECODED      = (1 << 4),
121         SOUP_MESSAGE_CERTIFICATE_TRUSTED  = (1 << 5)
122 } SoupMessageFlags;
123
124 void             soup_message_set_flags           (SoupMessage           *msg,
125                                                    SoupMessageFlags       flags);
126
127 SoupMessageFlags soup_message_get_flags           (SoupMessage           *msg);
128
129 gboolean         soup_message_get_https_status    (SoupMessage           *msg,
130                                                    GTlsCertificate      **certificate,
131                                                    GTlsCertificateFlags  *errors);
132
133
134 /* Specialized signal handlers */
135 guint          soup_message_add_header_handler  (SoupMessage       *msg,
136                                                  const char        *signal,
137                                                  const char        *header,
138                                                  GCallback          callback,
139                                                  gpointer           user_data);
140
141 guint          soup_message_add_status_code_handler (
142                                                  SoupMessage       *msg,
143                                                  const char        *signal,
144                                                  guint              status_code,
145                                                  GCallback          callback,
146                                                  gpointer           user_data);
147
148 /*
149  * Status Setting
150  */
151 void           soup_message_set_status          (SoupMessage       *msg, 
152                                                  guint              status_code);
153
154 void           soup_message_set_status_full     (SoupMessage       *msg, 
155                                                  guint              status_code, 
156                                                  const char        *reason_phrase);
157
158 /* I/O */
159 typedef SoupBuffer * (*SoupChunkAllocator)      (SoupMessage       *msg,
160                                                  gsize              max_len,
161                                                  gpointer           user_data);
162
163 void           soup_message_set_chunk_allocator (SoupMessage       *msg,
164                                                  SoupChunkAllocator allocator,
165                                                  gpointer           user_data,
166                                                  GDestroyNotify     destroy_notify);
167
168 void           soup_message_disable_feature     (SoupMessage       *msg,
169                                                  GType              feature_type);
170
171 void soup_message_wrote_informational (SoupMessage *msg);
172 void soup_message_wrote_headers       (SoupMessage *msg);
173 void soup_message_wrote_chunk         (SoupMessage *msg);
174 void soup_message_wrote_body_data     (SoupMessage *msg, SoupBuffer *chunk);
175 void soup_message_wrote_body          (SoupMessage *msg);
176 void soup_message_got_informational   (SoupMessage *msg);
177 void soup_message_got_headers         (SoupMessage *msg);
178 void soup_message_got_chunk           (SoupMessage *msg, SoupBuffer *chunk);
179 void soup_message_got_body            (SoupMessage *msg);
180 void soup_message_content_sniffed     (SoupMessage *msg, const char *content_type, GHashTable *params);
181 void soup_message_restarted           (SoupMessage *msg);
182 void soup_message_finished            (SoupMessage *msg);
183
184 G_END_DECLS
185
186 #endif /*SOUP_MESSAGE_H*/