1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 2003 Novell, Inc.
4  * Copyright (C) 2008 Red Hat, Inc.
5  */
6 
7 #ifndef __SOUP_MESSAGE_QUEUE_H__
8 #define __SOUP_MESSAGE_QUEUE_H__ 1
9 
10 #include "soup-connection.h"
11 #include "soup-message.h"
12 #include "soup-session.h"
13 
14 G_BEGIN_DECLS
15 
16 typedef enum {
17 	SOUP_MESSAGE_STARTING,
18 	SOUP_MESSAGE_GOT_CONNECTION,
19 	SOUP_MESSAGE_CONNECTING,
20 	SOUP_MESSAGE_CONNECTED,
21 	SOUP_MESSAGE_TUNNELING,
22 	SOUP_MESSAGE_TUNNELED,
23 	SOUP_MESSAGE_READY,
24 	SOUP_MESSAGE_RUNNING,
25 	SOUP_MESSAGE_CACHED,
26 	SOUP_MESSAGE_RESTARTING,
27 	SOUP_MESSAGE_FINISHING,
28 	SOUP_MESSAGE_FINISHED
29 } SoupMessageQueueItemState;
30 
31 struct _SoupMessageQueueItem {
32 	/*< public >*/
33 	SoupSession *session;
34 	SoupMessageQueue *queue;
35 	SoupMessage *msg;
36 	SoupSessionCallback callback;
37 	gpointer callback_data;
38 	GMainContext *async_context;
39 
40 	GCancellable *cancellable;
41 	GError *error;
42 
43 	SoupConnection *conn;
44 	GTask *task;
45 	GSource *io_source;
46 
47 	guint paused            : 1;
48 	guint new_api           : 1;
49 	guint io_started        : 1;
50 	guint async             : 1;
51 	guint async_pending     : 1;
52 	guint conn_is_dedicated : 1;
53 	guint connect_only      : 1;
54 	guint priority          : 3;
55 	guint resend_count      : 5;
56 
57 	SoupMessageQueueItemState state;
58 
59 	/*< private >*/
60 	guint removed           : 1;
61 	guint ref_count         : 31;
62 	SoupMessageQueueItem *prev, *next;
63 	SoupMessageQueueItem *related;
64 };
65 
66 SoupMessageQueue     *soup_message_queue_new        (SoupSession          *session);
67 SoupMessageQueueItem *soup_message_queue_append     (SoupMessageQueue     *queue,
68 						     SoupMessage          *msg,
69 						     SoupSessionCallback   callback,
70 						     gpointer              user_data);
71 
72 SoupMessageQueueItem *soup_message_queue_lookup     (SoupMessageQueue     *queue,
73 						     SoupMessage          *msg);
74 
75 SoupMessageQueueItem *soup_message_queue_first      (SoupMessageQueue     *queue);
76 SoupMessageQueueItem *soup_message_queue_next       (SoupMessageQueue     *queue,
77 						     SoupMessageQueueItem *item);
78 
79 void                  soup_message_queue_remove     (SoupMessageQueue     *queue,
80 						     SoupMessageQueueItem *item);
81 
82 void                  soup_message_queue_destroy    (SoupMessageQueue     *queue);
83 
84 void soup_message_queue_item_ref            (SoupMessageQueueItem *item);
85 void soup_message_queue_item_unref          (SoupMessageQueueItem *item);
86 
87 G_END_DECLS
88 
89 #endif /* __SOUP_MESSAGE_QUEUE_H__ */
90