diff options
author | Xan Lopez <xan@gnome.org> | 2009-05-07 23:45:54 +0300 |
---|---|---|
committer | Xan Lopez <xan@gnome.org> | 2009-05-07 23:45:54 +0300 |
commit | b0a27affd574e8e2b2673aa9652cd1afcbc04fe0 (patch) | |
tree | b4d844f9842ebdfcb8fa4ee147f39c625e6f5052 | |
parent | 70afdae62aaca0ce3558df9e2e05ce35404fd788 (diff) | |
download | libsoup-b0a27affd574e8e2b2673aa9652cd1afcbc04fe0.tar.gz |
Initial commit for cache support.
-rw-r--r-- | libsoup/Makefile.am | 2 | ||||
-rw-r--r-- | libsoup/soup-headers.c | 3 | ||||
-rw-r--r-- | libsoup/soup-session-async.c | 17 | ||||
-rw-r--r-- | libsoup/soup-session-private.h | 2 | ||||
-rw-r--r-- | libsoup/soup-session.c | 16 | ||||
-rw-r--r-- | libsoup/soup.h | 1 |
6 files changed, 41 insertions, 0 deletions
diff --git a/libsoup/Makefile.am b/libsoup/Makefile.am index dc9ff551..ef05b729 100644 --- a/libsoup/Makefile.am +++ b/libsoup/Makefile.am @@ -55,6 +55,7 @@ soup_headers = \ soup-auth-domain.h \ soup-auth-domain-basic.h \ soup-auth-domain-digest.h \ + soup-cache.h \ soup-cookie.h \ soup-cookie-jar.h \ soup-cookie-jar-text.h \ @@ -116,6 +117,7 @@ libsoup_2_4_la_SOURCES = \ soup-auth-manager.c \ soup-auth-manager-ntlm.h \ soup-auth-manager-ntlm.c \ + soup-cache.c \ soup-connection.h \ soup-connection.c \ soup-cookie.c \ diff --git a/libsoup/soup-headers.c b/libsoup/soup-headers.c index f815db3e..98189536 100644 --- a/libsoup/soup-headers.c +++ b/libsoup/soup-headers.c @@ -818,6 +818,9 @@ soup_header_g_string_append_param (GString *string, const char *name, { const char *v; + g_return_if_fail (name); + g_return_if_fail (value); + g_string_append (string, name); if (!value) return; diff --git a/libsoup/soup-session-async.c b/libsoup/soup-session-async.c index a492ee54..97d4f2f1 100644 --- a/libsoup/soup-session-async.c +++ b/libsoup/soup-session-async.c @@ -361,10 +361,21 @@ do_idle_run_queue (SoupSession *session) } } +static gboolean +had_cache (SoupMessageQueueItem *item) +{ + SoupCache *cache; + + cache = soup_session_get_cache (item->session); + soup_cache_send_response (cache, item->session, item->msg); + return FALSE; +} + static void queue_message (SoupSession *session, SoupMessage *req, SoupSessionCallback callback, gpointer user_data) { + SoupCache *cache; SoupMessageQueueItem *item; SOUP_SESSION_CLASS (soup_session_async_parent_class)->queue_message (session, req, callback, user_data); @@ -377,6 +388,12 @@ queue_message (SoupSession *session, SoupMessage *req, g_signal_connect_after (req, "finished", G_CALLBACK (final_finished), item); + cache = soup_session_get_cache (session); + if (cache && soup_cache_has_response (cache, session, req)) { + g_idle_add ((GSourceFunc)had_cache, item); + return; + } + do_idle_run_queue (session); } diff --git a/libsoup/soup-session-private.h b/libsoup/soup-session-private.h index f8b13d5c..015704fa 100644 --- a/libsoup/soup-session-private.h +++ b/libsoup/soup-session-private.h @@ -6,6 +6,7 @@ #ifndef SOUP_SESSION_PRIVATE_H #define SOUP_SESSION_PRIVATE_H 1 +#include "soup-cache.h" #include "soup-session.h" #include "soup-connection.h" #include "soup-message-queue.h" @@ -24,6 +25,7 @@ SoupConnection *soup_session_get_connection (SoupSession *session, gboolean soup_session_try_prune_connection (SoupSession *session); SoupProxyResolver *soup_session_get_proxy_resolver (SoupSession *session); +SoupCache *soup_session_get_cache (SoupSession *session); G_END_DECLS diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c index cbaa42d6..b8841b30 100644 --- a/libsoup/soup-session.c +++ b/libsoup/soup-session.c @@ -18,6 +18,7 @@ #include "soup-auth-basic.h" #include "soup-auth-digest.h" #include "soup-auth-manager-ntlm.h" +#include "soup-cache.h" #include "soup-connection.h" #include "soup-marshal.h" #include "soup-message-private.h" @@ -65,6 +66,7 @@ typedef struct { typedef struct { SoupProxyResolver *proxy_resolver; + SoupCache *cache; char *ssl_ca_file; SoupSSLCredentials *ssl_creds; @@ -1494,6 +1496,9 @@ soup_session_add_feature (SoupSession *session, SoupSessionFeature *feature) if (SOUP_IS_PROXY_RESOLVER (feature)) priv->proxy_resolver = SOUP_PROXY_RESOLVER (feature); + + if (SOUP_IS_CACHE (feature)) + priv->cache = SOUP_CACHE (feature); } /** @@ -1546,6 +1551,9 @@ soup_session_remove_feature (SoupSession *session, SoupSessionFeature *feature) if (feature == (SoupSessionFeature *)priv->proxy_resolver) priv->proxy_resolver = NULL; + + if (feature == (SoupSessionFeature *)priv->cache) + priv->cache = NULL; } } @@ -1646,3 +1654,11 @@ soup_session_get_proxy_resolver (SoupSession *session) return priv->proxy_resolver; } + +SoupCache * +soup_session_get_cache (SoupSession *session) +{ + SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session); + + return priv->cache; +} diff --git a/libsoup/soup.h b/libsoup/soup.h index 496a4c1b..4ac09911 100644 --- a/libsoup/soup.h +++ b/libsoup/soup.h @@ -15,6 +15,7 @@ extern "C" { #include <libsoup/soup-auth-domain.h> #include <libsoup/soup-auth-domain-basic.h> #include <libsoup/soup-auth-domain-digest.h> +#include <libsoup/soup-cache.h> #include <libsoup/soup-cookie.h> #include <libsoup/soup-cookie-jar.h> #include <libsoup/soup-cookie-jar-text.h> |