summaryrefslogtreecommitdiff
path: root/desktop/fetch.c
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/fetch.c')
-rw-r--r--desktop/fetch.c211
1 files changed, 0 insertions, 211 deletions
diff --git a/desktop/fetch.c b/desktop/fetch.c
deleted file mode 100644
index 3ff8dd09c..000000000
--- a/desktop/fetch.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * $Id: fetch.c,v 1.7 2003/01/06 00:04:43 bursa Exp $
- */
-
-#include "libxml/HTMLparser.h"
-#include "netsurf/render/box.h"
-#include "netsurf/render/css.h"
-#include "netsurf/desktop/browser.h"
-#include "netsurf/desktop/netsurf.h"
-#include "netsurf/desktop/fetch.h"
-#include "netsurf/render/utils.h"
-#include "netsurf/utils/log.h"
-#include "curl/curl.h"
-#include <time.h>
-#include <string.h>
-#include <stdio.h>
-
-struct fetch* create_fetch(char* location, char* previous, fetch_flags f, struct fetch_request* r)
-{
- struct fetch* fetch = (struct fetch*) xcalloc(1, sizeof(struct fetch));
-
- if (fetch->location != NULL)
- free(fetch->location);
-
- fetch->location = xstrdup(location);
- fetch->type = fetch_CURL;
-
- fetch->flags = f;
-
- fetch->status = fetch_STATUS_WAIT;
- fetch->bytes_fetched = 0;
- fetch->bytes_total = -1;
-
- fetch->request = r;
-
- fetch->start_time = time(&fetch->start_time);
-
- fetch->next = netsurf_fetches;
- netsurf_fetches = fetch;
-
- return fetch;
-}
-
-void fetch_destroy(struct fetch* f)
-{
- if (f == NULL)
- return;
-
- if (netsurf_fetches == f)
- netsurf_fetches = f->next;
- else
- {
- struct fetch* ff = netsurf_fetches;
- while (ff->next != f && ff->next != NULL)
- ff = ff->next;
- if (ff->next == f)
- ff->next = f->next;
- }
-
- xfree(f->location);
- xfree(f->request);
- xfree(f);
-}
-
-struct fetch* fetch_cancel(struct fetch* f)
-{
- if (f == NULL)
- return NULL;
-
- /* may need to contact server here */
-
- f->status = fetch_DELETED;
- /* fetch may not necessarily be destroyed if the cancelling can't be done
- instantly */
- return f;
-}
-
-void fetch_receive(struct fetch* f, int amount, char* bytes)
-{
- struct browser_message msg;
-
- f->bytes_fetched = f->bytes_fetched + amount;
-
- switch (f->request->type)
- {
- case REQUEST_FROM_BROWSER:
- msg.type = msg_FETCH_DATA;
- msg.f = f;
- msg.data.fetch_data.block = bytes;
- msg.data.fetch_data.block_size = amount;
- if (browser_window_message(f->request->requestor.browser, &msg) != 0)
- {
- fetch_cancel(f);
- return;
- }
- break;
- default:
- break;
- }
-
- if (f->bytes_fetched >= f->bytes_total && f->bytes_total != -1)
- {
- msg.type = msg_FETCH_FINISHED;
- msg.f = f;
- browser_window_message(f->request->requestor.browser, &msg);
- fetch_destroy(f);
- }
-
- return;
-}
-
-size_t fetch_curl_data(void * data, size_t size, size_t nmemb, struct fetch* f)
-{
- struct browser_message msg;
- msg.type = msg_FETCH_DATA;
- msg.f = f;
- msg.data.fetch_data.block = data;
- msg.data.fetch_data.block_size = size * nmemb;
- LOG(("sending curl's FETCH_DATA to browser"));
- browser_window_message(f->request->requestor.browser, &msg);
- return size * nmemb;
-}
-
-struct fetch* fetch_poll(struct fetch* f)
-{
- struct fetch* ret = f;
-
-/* LOG(("polling...")); */
-
- if (f == NULL)
- {
-/* LOG(("null fetch; returning")); */
- return f;
- }
-
- if (f->status == fetch_DELETED)
- {
- ret = f->next;
- LOG(("deleting marked fetch"));
- fetch_destroy(f);
- LOG(("moving on..."));
- return fetch_poll(ret);
- }
- else if (f->type == fetch_CURL && f->status == fetch_STATUS_WAIT)
- {
- struct browser_message msg;
- CURL* curl;
-
- LOG(("init curl"));
- curl = curl_easy_init();
- LOG(("init curl returned"));
- if (curl != 0)
- {
- LOG(("init curl OK"));
- /* shouldn't assume this! somehow work it out instead. */
- msg.type = msg_FETCH_FETCH_INFO;
- msg.f = f;
- msg.data.fetch_info.type = type_HTML;
- msg.data.fetch_info.total_size = -1;
-
- if (browser_window_message(f->request->requestor.browser, &msg) == 0)
- {
- LOG(("about to set options"));
- curl_easy_setopt(curl, CURLOPT_URL, f->location);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fetch_curl_data);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, f);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, "NetSurf/0.00 (alpha)");
- LOG(("about to perform"));
- curl_easy_perform(curl);
- LOG(("about to cleanup"));
- curl_easy_cleanup(curl);
-
- LOG(("cleanup finished"));
- msg.type = msg_FETCH_FINISHED;
- msg.f = f;
- LOG(("sending FETCH_FINISHED to browser"));
- browser_window_message(f->request->requestor.browser, &msg);
- LOG(("FETCH_FINISHED accepted"));
-
- ret = f->next;
- LOG(("Destroying f"));
- fetch_destroy(f);
- LOG(("Moving on..."));
- return fetch_poll(ret);
- }
- LOG(("about to cleanup since requestor went funny"));
- curl_easy_cleanup(curl);
-
- LOG(("Requesting browser didn't like something"));
- ret = f->next;
- LOG(("Cancelling fetch"));
- f = fetch_cancel(f);
- return fetch_poll(ret);
- }
-
- LOG(("we are aborting the mission"));
- msg.type = msg_FETCH_ABORT;
- msg.f = f;
- browser_window_message(f->request->requestor.browser, &msg);
- LOG(("ABORT message sent to browser"));
-
- ret = f->next;
- fetch_destroy(f);
- return fetch_poll(ret); /* carry on polling */
- }
-
- LOG(("Moving on (at end of function with f->next)"));
- f->next = fetch_poll(f->next);
- return f;
-}
-