1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 2000-2003, Ximian, Inc.
4  */
5 
6 #ifndef __SOUP_MESSAGE_PRIVATE_H__
7 #define __SOUP_MESSAGE_PRIVATE_H__ 1
8 
9 #include "soup-filter-input-stream.h"
10 #include "soup-message.h"
11 #include "soup-client-message-io.h"
12 #include "auth/soup-auth.h"
13 #include "content-sniffer/soup-content-sniffer.h"
14 #include "soup-session.h"
15 
16 void             soup_message_set_status       (SoupMessage      *msg,
17 						guint             status_code,
18 						const char       *reason_phrase);
19 void             soup_message_cleanup_response (SoupMessage      *msg);
20 
21 typedef void     (*SoupMessageGetHeadersFn)  (SoupMessage      *msg,
22 					      GString          *headers,
23 					      SoupEncoding     *encoding,
24 					      gpointer          user_data);
25 typedef guint    (*SoupMessageParseHeadersFn)(SoupMessage      *msg,
26 					      char             *headers,
27 					      guint             header_len,
28 					      SoupEncoding     *encoding,
29 					      gpointer          user_data,
30 					      GError          **error);
31 
32 void soup_message_send_item (SoupMessage              *msg,
33                              SoupMessageQueueItem     *item,
34                              SoupMessageIOCompletionFn completion_cb,
35                              gpointer                  user_data);
36 
37 /* Auth handling */
38 void           soup_message_set_auth       (SoupMessage *msg,
39 					    SoupAuth    *auth);
40 SoupAuth      *soup_message_get_auth       (SoupMessage *msg);
41 void           soup_message_set_proxy_auth (SoupMessage *msg,
42 					    SoupAuth    *auth);
43 SoupAuth      *soup_message_get_proxy_auth (SoupMessage *msg);
44 GUri          *soup_message_get_uri_for_auth (SoupMessage *msg);
45 
46 /* I/O */
47 void       soup_message_io_run         (SoupMessage *msg,
48 					gboolean     blocking);
49 void       soup_message_io_finished    (SoupMessage *msg);
50 void       soup_message_io_pause       (SoupMessage *msg);
51 void       soup_message_io_unpause     (SoupMessage *msg);
52 gboolean   soup_message_is_io_paused   (SoupMessage *msg);
53 gboolean   soup_message_io_in_progress (SoupMessage *msg);
54 
55 gboolean soup_message_io_skip                  (SoupMessage        *msg,
56                                                 gboolean            blocking,
57                                                 GCancellable       *cancellable,
58                                                 GError            **error);
59 
60 gboolean soup_message_io_run_until_read        (SoupMessage        *msg,
61                                                 GCancellable       *cancellable,
62                                                 GError            **error);
63 void     soup_message_io_run_until_read_async  (SoupMessage        *msg,
64 						int                 io_priority,
65                                                 GCancellable       *cancellable,
66                                                 GAsyncReadyCallback callback,
67                                                 gpointer            user_data);
68 gboolean soup_message_io_run_until_read_finish (SoupMessage        *msg,
69                                                 GAsyncResult       *result,
70                                                 GError            **error);
71 
72 GInputStream *soup_message_io_get_response_istream (SoupMessage  *msg,
73 						    GError      **error);
74 
75 GCancellable *soup_message_io_get_cancellable  (SoupMessage *msg);
76 
77 void soup_message_wrote_headers     (SoupMessage *msg);
78 void soup_message_wrote_body_data   (SoupMessage *msg,
79 				     gsize        chunk_size);
80 void soup_message_wrote_body        (SoupMessage *msg);
81 void soup_message_got_informational (SoupMessage *msg);
82 void soup_message_got_headers       (SoupMessage *msg);
83 void soup_message_got_body          (SoupMessage *msg);
84 void soup_message_content_sniffed   (SoupMessage *msg,
85 				     const char  *content_type,
86 				     GHashTable  *params);
87 void soup_message_starting          (SoupMessage *msg);
88 void soup_message_restarted         (SoupMessage *msg);
89 void soup_message_finished          (SoupMessage *msg);
90 gboolean soup_message_authenticate  (SoupMessage *msg,
91 				     SoupAuth    *auth,
92 				     gboolean     retrying);
93 void soup_message_hsts_enforced     (SoupMessage *msg);
94 
95 gboolean soup_message_disables_feature (SoupMessage *msg,
96 					gpointer     feature);
97 
98 GList *soup_message_get_disabled_features (SoupMessage *msg);
99 
100 SoupConnection *soup_message_get_connection (SoupMessage    *msg);
101 void            soup_message_set_connection (SoupMessage    *msg,
102 					     SoupConnection *conn);
103 void            soup_message_transfer_connection (SoupMessage *preconnect_msg,
104                                                   SoupMessage *msg);
105 void            soup_message_set_is_preconnect   (SoupMessage *msg,
106                                                   gboolean     is_preconnect);
107 gboolean        soup_message_has_pending_tls_cert_request      (SoupMessage *msg);
108 gboolean        soup_message_has_pending_tls_cert_pass_request (SoupMessage *msg);
109 
110 SoupClientMessageIO *soup_message_get_io_data (SoupMessage             *msg);
111 
112 void                soup_message_set_content_sniffer    (SoupMessage        *msg,
113 							 SoupContentSniffer *sniffer);
114 gboolean            soup_message_has_content_sniffer    (SoupMessage        *msg);
115 gboolean            soup_message_try_sniff_content      (SoupMessage        *msg,
116                                                          GInputStream       *stream,
117                                                          gboolean            blocking,
118                                                          GCancellable       *cancellable,
119                                                          GError            **error);
120 GInputStream       *soup_message_get_request_body_stream (SoupMessage        *msg);
121 
122 void                soup_message_set_reason_phrase       (SoupMessage        *msg,
123                                                           const char         *reason_phrase);
124 
125 void                soup_message_set_http_version        (SoupMessage       *msg,
126 						          SoupHTTPVersion    version);
127 
128 typedef enum {
129         SOUP_MESSAGE_METRICS_FETCH_START,
130         SOUP_MESSAGE_METRICS_DNS_START,
131         SOUP_MESSAGE_METRICS_DNS_END,
132         SOUP_MESSAGE_METRICS_CONNECT_START,
133         SOUP_MESSAGE_METRICS_CONNECT_END,
134         SOUP_MESSAGE_METRICS_TLS_START,
135         SOUP_MESSAGE_METRICS_REQUEST_START,
136         SOUP_MESSAGE_METRICS_RESPONSE_START,
137         SOUP_MESSAGE_METRICS_RESPONSE_END
138 } SoupMessageMetricsType;
139 
140 void soup_message_set_metrics_timestamp (SoupMessage           *msg,
141                                          SoupMessageMetricsType type);
142 
143 void soup_message_set_request_host_from_uri     (SoupMessage *msg,
144                                                  GUri        *uri);
145 
146 void soup_message_update_request_host_if_needed (SoupMessage *msg);
147 
148 void soup_message_force_keep_alive_if_needed    (SoupMessage *msg);
149 
150 void soup_message_set_force_http1               (SoupMessage *msg,
151                                                  gboolean     force_http1);
152 
153 gboolean soup_message_get_force_http1           (SoupMessage *msg);
154 
155 void     soup_message_set_is_misdirected_retry  (SoupMessage *msg,
156                                                  gboolean     is_misdirected_retry);
157 gboolean soup_message_is_misdirected_retry      (SoupMessage *msg);
158 
159 #endif /* __SOUP_MESSAGE_PRIVATE_H__ */
160