#ifndef __GSK_HTTP_CLIENT_H_
#define __GSK_HTTP_CLIENT_H_
#include "gskhttpheader.h"
#include "gskhttprequest.h"
#include "gskhttpresponse.h"
#include "../gskstream.h"
G_BEGIN_DECLS
/* --- typedefs --- */
typedef struct _GskHttpClient GskHttpClient;
typedef struct _GskHttpClientClass GskHttpClientClass;
typedef struct _GskHttpClientRequest GskHttpClientRequest;
/* --- type macros --- */
GType gsk_http_client_get_type(void) G_GNUC_CONST;
#define GSK_TYPE_HTTP_CLIENT (gsk_http_client_get_type ())
#define GSK_HTTP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_HTTP_CLIENT, GskHttpClient))
#define GSK_HTTP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_HTTP_CLIENT, GskHttpClientClass))
#define GSK_HTTP_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_HTTP_CLIENT, GskHttpClientClass))
#define GSK_IS_HTTP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_HTTP_CLIENT))
#define GSK_IS_HTTP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_HTTP_CLIENT))
typedef void (*GskHttpClientResponse) (GskHttpRequest *request,
GskHttpResponse *response,
GskStream *input,
gpointer hook_data);
typedef gboolean (*GskHttpClientTrap) (GskHttpClient *client,
gpointer data);
/* --- structures --- */
struct _GskHttpClientClass
{
GskStreamClass stream_class;
void (*set_poll_requestable) (GskHttpClient *client,
gboolean do_poll);
void (*shutdown_requestable) (GskHttpClient *client);
};
struct _GskHttpClient
{
/*< private >*/
GskStream stream;
GskHook requestable;
GskBuffer incoming_data;
GskHttpClientRequest *first_request;
GskHttpClientRequest *last_request;
GskHttpClientRequest *outgoing_request;
};
#define GSK_HTTP_CLIENT_FAST_NOTIFY (1<<0)
#define GSK_HTTP_CLIENT_DEFERRED_SHUTDOWN (1<<1)
#define GSK_HTTP_CLIENT_REQUIRES_READ_SHUTDOWN (1<<2)
#define GSK_HTTP_CLIENT_HOOK(client) (&GSK_HTTP_CLIENT (client)->requestable)
#define GSK_HTTP_CLIENT_IS_FAST(client) ((GSK_HTTP_CLIENT_HOOK (client)->user_flags & GSK_HTTP_CLIENT_FAST_NOTIFY) == GSK_HTTP_CLIENT_FAST_NOTIFY)
#define gsk_http_client_trap_requestable(client,func,shutdown,data,destroy) \
gsk_hook_trap (GSK_HTTP_CLIENT_HOOK (client), (GskHookFunc) func, \
(GskHookFunc) shutdown, data, destroy)
#define gsk_http_client_untrap_requestable(client) \
gsk_hook_untrap (GSK_HTTP_CLIENT_HOOK (client))
#define gsk_http_client_is_requestable(client) \
GSK_HOOK_TEST_IS_AVAILABLE (GSK_HTTP_CLIENT_HOOK (client))
/* --- prototypes --- */
GskHttpClient *gsk_http_client_new (void);
void gsk_http_client_notify_fast (GskHttpClient *client,
gboolean is_fast);
void gsk_http_client_request (GskHttpClient *client,
GskHttpRequest *request,
GskStream *post_data,
GskHttpClientResponse handle_response,
gpointer hook_data,
GDestroyNotify hook_destroy);
void gsk_http_client_shutdown_when_done (GskHttpClient *client);
G_END_DECLS
#endif
syntax highlighted by Code2HTML, v. 0.9.1