summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--beos/beos_fetch_rsrc.cpp6
-rw-r--r--content/fetch.c12
-rw-r--r--content/fetch.h3
-rw-r--r--content/fetchers/about.c6
-rw-r--r--content/fetchers/curl.c6
-rw-r--r--content/fetchers/data.c6
-rw-r--r--content/fetchers/file.c6
-rw-r--r--content/fetchers/resource.c6
8 files changed, 46 insertions, 5 deletions
diff --git a/beos/beos_fetch_rsrc.cpp b/beos/beos_fetch_rsrc.cpp
index a0addd9ab..139c5f1e7 100644
--- a/beos/beos_fetch_rsrc.cpp
+++ b/beos/beos_fetch_rsrc.cpp
@@ -78,6 +78,11 @@ static void fetch_rsrc_finalise(const char *scheme)
LOG(("fetch_rsrc_finalise called for %s", scheme));
}
+static bool fetch_rsrc_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
static void *fetch_rsrc_setup(struct fetch *parent_fetch, const char *url,
bool only_2xx, const char *post_urlenc,
const struct fetch_multipart_data *post_multipart,
@@ -340,6 +345,7 @@ void fetch_rsrc_register(void)
}
fetch_add_fetcher("rsrc",
fetch_rsrc_initialise,
+ fetch_rsrc_can_fetch,
fetch_rsrc_setup,
fetch_rsrc_start,
fetch_rsrc_abort,
diff --git a/content/fetch.c b/content/fetch.c
index bc182f514..2a91ffef1 100644
--- a/content/fetch.c
+++ b/content/fetch.c
@@ -60,6 +60,7 @@ bool fetch_active; /**< Fetches in progress, please call fetch_poll(). */
/** Information about a fetcher for a given scheme. */
typedef struct scheme_fetcher_s {
lwc_string *scheme_name; /**< The scheme. */
+ fetcher_can_fetch can_fetch; /**< Ensure an URL can be fetched. */
fetcher_setup_fetch setup_fetch; /**< Set up a fetch. */
fetcher_start_fetch start_fetch; /**< Start a fetch. */
fetcher_abort_fetch abort_fetch; /**< Abort a fetch. */
@@ -157,6 +158,7 @@ void fetch_quit(void)
bool fetch_add_fetcher(lwc_string *scheme,
fetcher_initialise initialiser,
+ fetcher_can_fetch can_fetch,
fetcher_setup_fetch setup_fetch,
fetcher_start_fetch start_fetch,
fetcher_abort_fetch abort_fetch,
@@ -174,6 +176,7 @@ bool fetch_add_fetcher(lwc_string *scheme,
}
new_fetcher->scheme_name = scheme;
new_fetcher->refcount = 0;
+ new_fetcher->can_fetch = can_fetch;
new_fetcher->setup_fetch = setup_fetch;
new_fetcher->start_fetch = start_fetch;
new_fetcher->abort_fetch = abort_fetch;
@@ -540,16 +543,15 @@ bool fetch_can_fetch(const nsurl *url)
while (fetcher != NULL) {
lwc_string_isequal(fetcher->scheme_name, scheme, &match);
- if (match == true) {
- lwc_string_unref(scheme);
- return true;
- }
+ if (match == true)
+ break;
+
fetcher = fetcher->next_fetcher;
}
lwc_string_unref(scheme);
- return false;
+ return fetcher == NULL ? false : fetcher->can_fetch(url);
}
diff --git a/content/fetch.h b/content/fetch.h
index e6999c420..d7cdced1b 100644
--- a/content/fetch.h
+++ b/content/fetch.h
@@ -124,6 +124,7 @@ struct fetch_multipart_data *fetch_multipart_data_clone(
/* API for fetchers themselves */
typedef bool (*fetcher_initialise)(lwc_string *);
+typedef bool (*fetcher_can_fetch)(const nsurl *);
typedef void* (*fetcher_setup_fetch)(struct fetch *, nsurl *,
bool, const char *,
const struct fetch_multipart_data *,
@@ -138,6 +139,7 @@ typedef void (*fetcher_finalise)(lwc_string *);
*
* \param scheme scheme fetcher is for (caller relinquishes ownership)
* \param initialiser fetcher initialiser
+ * \param can_fetch fetcher can fetch function
* \param setup_fetch fetcher fetch setup function
* \param start_fetch fetcher fetch start function
* \param abort_fetch fetcher fetch abort function
@@ -148,6 +150,7 @@ typedef void (*fetcher_finalise)(lwc_string *);
*/
bool fetch_add_fetcher(lwc_string *scheme,
fetcher_initialise initialiser,
+ fetcher_can_fetch can_fetch,
fetcher_setup_fetch setup_fetch,
fetcher_start_fetch start_fetch,
fetcher_abort_fetch abort_fetch,
diff --git a/content/fetchers/about.c b/content/fetchers/about.c
index 402bb40bf..9b6ec88db 100644
--- a/content/fetchers/about.c
+++ b/content/fetchers/about.c
@@ -669,6 +669,11 @@ static void fetch_about_finalise(lwc_string *scheme)
}
}
+static bool fetch_about_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
/** callback to set up a about fetch context. */
static void *
fetch_about_setup(struct fetch *fetchh,
@@ -792,6 +797,7 @@ void fetch_about_register(void)
fetch_add_fetcher(scheme,
fetch_about_initialise,
+ fetch_about_can_fetch,
fetch_about_setup,
fetch_about_start,
fetch_about_abort,
diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c
index 09bfbdd00..be2b6c806 100644
--- a/content/fetchers/curl.c
+++ b/content/fetchers/curl.c
@@ -113,6 +113,7 @@ static char fetch_proxy_userpwd[100]; /**< Proxy authentication details. */
static bool fetch_curl_initialise(lwc_string *scheme);
static void fetch_curl_finalise(lwc_string *scheme);
+static bool fetch_curl_can_fetch(const nsurl *url);
static void * fetch_curl_setup(struct fetch *parent_fetch, nsurl *url,
bool only_2xx, const char *post_urlenc,
const struct fetch_multipart_data *post_multipart,
@@ -252,6 +253,7 @@ void fetch_curl_register(void)
if (!fetch_add_fetcher(scheme,
fetch_curl_initialise,
+ fetch_curl_can_fetch,
fetch_curl_setup,
fetch_curl_start,
fetch_curl_abort,
@@ -318,6 +320,10 @@ void fetch_curl_finalise(lwc_string *scheme)
}
}
+bool fetch_curl_can_fetch(const nsurl *url)
+{
+ return nsurl_enquire(url, NSURL_HOST);
+}
/**
* Start fetching data for the given URL.
diff --git a/content/fetchers/data.c b/content/fetchers/data.c
index bc2349733..80b48b0e4 100644
--- a/content/fetchers/data.c
+++ b/content/fetchers/data.c
@@ -75,6 +75,11 @@ static void fetch_data_finalise(lwc_string *scheme)
curl_easy_cleanup(curl);
}
+static bool fetch_data_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
static void *fetch_data_setup(struct fetch *parent_fetch, nsurl *url,
bool only_2xx, const char *post_urlenc,
const struct fetch_multipart_data *post_multipart,
@@ -330,6 +335,7 @@ void fetch_data_register(void)
fetch_add_fetcher(scheme,
fetch_data_initialise,
+ fetch_data_can_fetch,
fetch_data_setup,
fetch_data_start,
fetch_data_abort,
diff --git a/content/fetchers/file.c b/content/fetchers/file.c
index f30637c87..e3bb63ea8 100644
--- a/content/fetchers/file.c
+++ b/content/fetchers/file.c
@@ -112,6 +112,11 @@ static void fetch_file_finalise(lwc_string *scheme)
{
}
+static bool fetch_file_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
/** callback to set up a file fetch context. */
static void *
fetch_file_setup(struct fetch *fetchh,
@@ -645,6 +650,7 @@ void fetch_file_register(void)
fetch_add_fetcher(scheme,
fetch_file_initialise,
+ fetch_file_can_fetch,
fetch_file_setup,
fetch_file_start,
fetch_file_abort,
diff --git a/content/fetchers/resource.c b/content/fetchers/resource.c
index d46d377dc..dc6fd8c72 100644
--- a/content/fetchers/resource.c
+++ b/content/fetchers/resource.c
@@ -219,6 +219,11 @@ static void fetch_resource_finalise(lwc_string *scheme)
}
}
+static bool fetch_resource_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
/** callback to set up a resource fetch context. */
static void *
fetch_resource_setup(struct fetch *fetchh,
@@ -350,6 +355,7 @@ void fetch_resource_register(void)
fetch_add_fetcher(scheme,
fetch_resource_initialise,
+ fetch_resource_can_fetch,
fetch_resource_setup,
fetch_resource_start,
fetch_resource_abort,