summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'desktop')
-rw-r--r--desktop/fetch.c160
-rw-r--r--desktop/fetch.h4
2 files changed, 32 insertions, 132 deletions
diff --git a/desktop/fetch.c b/desktop/fetch.c
index f6721ade3..3ff8dd09c 100644
--- a/desktop/fetch.c
+++ b/desktop/fetch.c
@@ -1,5 +1,5 @@
/**
- * $Id: fetch.c,v 1.6 2003/01/04 18:51:41 andrew Exp $
+ * $Id: fetch.c,v 1.7 2003/01/06 00:04:43 bursa Exp $
*/
#include "libxml/HTMLparser.h"
@@ -9,30 +9,21 @@
#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>
-void fetch_identify_location(struct fetch* f, char* location, char* previous)
-{
- if (f->location != NULL)
- xfree(f->location);
-
- f->location = xstrdup(location);
-
- if (strspn(location, "file:/") == strlen("file:/"))
- f->type = fetch_FILE;
- else
- /* throw everything else at curl, since it can fetch lots of protocols */
- f->type = fetch_CURL;
-}
-
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));
- fetch_identify_location(fetch, location, previous);
+ if (fetch->location != NULL)
+ free(fetch->location);
+
+ fetch->location = xstrdup(location);
+ fetch->type = fetch_CURL;
fetch->flags = f;
@@ -125,7 +116,7 @@ size_t fetch_curl_data(void * data, size_t size, size_t nmemb, struct fetch* f)
msg.f = f;
msg.data.fetch_data.block = data;
msg.data.fetch_data.block_size = size * nmemb;
- Log("fetch_poll","sending curl's FETCH_DATA to browser");
+ LOG(("sending curl's FETCH_DATA to browser"));
browser_window_message(f->request->requestor.browser, &msg);
return size * nmemb;
}
@@ -134,20 +125,20 @@ struct fetch* fetch_poll(struct fetch* f)
{
struct fetch* ret = f;
- Log("fetch_poll","polling...");
+/* LOG(("polling...")); */
if (f == NULL)
{
- Log("fetch_poll","null fetch; returning");
+/* LOG(("null fetch; returning")); */
return f;
}
- if (f->type == fetch_DELETED)
+ if (f->status == fetch_DELETED)
{
ret = f->next;
- Log("fetch_poll", "deleting marked fetch");
+ LOG(("deleting marked fetch"));
fetch_destroy(f);
- Log("fetch_poll", "moving on...");
+ LOG(("moving on..."));
return fetch_poll(ret);
}
else if (f->type == fetch_CURL && f->status == fetch_STATUS_WAIT)
@@ -155,12 +146,12 @@ struct fetch* fetch_poll(struct fetch* f)
struct browser_message msg;
CURL* curl;
- Log("fetch_poll","init curl");
+ LOG(("init curl"));
curl = curl_easy_init();
- Log("fetch_poll","init curl returned");
+ LOG(("init curl returned"));
if (curl != 0)
{
- Log("fetch_poll","init curl OK");
+ LOG(("init curl OK"));
/* shouldn't assume this! somehow work it out instead. */
msg.type = msg_FETCH_FETCH_INFO;
msg.f = f;
@@ -169,142 +160,51 @@ struct fetch* fetch_poll(struct fetch* f)
if (browser_window_message(f->request->requestor.browser, &msg) == 0)
{
- Log("fetch_poll","about to set options");
+ 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("fetch_poll","about to perform");
+ LOG(("about to perform"));
curl_easy_perform(curl);
- Log("fetch_poll","about to cleanup");
+ LOG(("about to cleanup"));
curl_easy_cleanup(curl);
- Log("fetch_poll","cleanup finished");
+ LOG(("cleanup finished"));
msg.type = msg_FETCH_FINISHED;
msg.f = f;
- Log("fetch_poll","sending FETCH_FINISHED to browser");
+ LOG(("sending FETCH_FINISHED to browser"));
browser_window_message(f->request->requestor.browser, &msg);
- Log("fetch_poll","FETCH_FINISHED accepted");
+ LOG(("FETCH_FINISHED accepted"));
ret = f->next;
- Log("fetch_poll","Destroying f");
+ LOG(("Destroying f"));
fetch_destroy(f);
- Log("fetch_poll","Moving on...");
+ LOG(("Moving on..."));
return fetch_poll(ret);
}
- Log("fetch_poll","about to cleanup since requestor went funny");
+ LOG(("about to cleanup since requestor went funny"));
curl_easy_cleanup(curl);
- Log("fetch_poll","Requesting browser didn't like something");
+ LOG(("Requesting browser didn't like something"));
ret = f->next;
- Log("fetch_poll","Cancelling fetch");
+ LOG(("Cancelling fetch"));
f = fetch_cancel(f);
return fetch_poll(ret);
}
- Log("fetch_poll","we are aborting the mission");
+ LOG(("we are aborting the mission"));
msg.type = msg_FETCH_ABORT;
msg.f = f;
browser_window_message(f->request->requestor.browser, &msg);
- Log("fetch_poll","ABORT message sent to browser");
+ LOG(("ABORT message sent to browser"));
ret = f->next;
fetch_destroy(f);
return fetch_poll(ret); /* carry on polling */
}
- else if (f->type == fetch_FILE && f->status == fetch_STATUS_WAIT)
- {
- struct browser_message msg;
- char actual_filename[1024];
- FILE* in;
-
- gui_file_to_filename(f->location, actual_filename, 1024);
-/* in = fopen("files","a");
- fprintf(in, "%s\n%s\n\n",f->location, actual_filename);
- fclose(in);*/
- in = fopen(actual_filename, "r");
-
- if (in == NULL)
- {
- /* can't open file -- send abort to requestor, then destroy */
- Log("fetch_poll","can't open file");
- msg.type = msg_FETCH_ABORT;
- msg.f = f;
- browser_window_message(f->request->requestor.browser, &msg);
- Log("fetch_poll","ABORT message sent to browser");
-
- ret = f->next;
- fetch_destroy(f);
- Log("fetch_poll","destroyed f; moving on");
-
- return fetch_poll(ret); /* carry on polling */
- }
- else
- {
- /* file opened successfully. now to send size and type to requestor,
- then the data, then finish. */
- int size;
-
- /* calculate size */
- Log("fetch_poll","calculating file size");
- fseek(in, 0, SEEK_END);
- size = (int) ftell(in);
- fclose(in);
-
- /* send file info. (assuming HTML at the mo, but should work out
- what it is, somehow) */
- msg.type = msg_FETCH_FETCH_INFO;
- msg.f = f;
- msg.data.fetch_info.type = type_HTML;
- msg.data.fetch_info.total_size = size;
-
- Log("fetch_poll","sending FETCH_INFO to browser");
- if (browser_window_message(f->request->requestor.browser, &msg) == 0)
- {
- /* file info accepted. can now load the data and send it */
- Log("fetch_poll","FETCH_INFO accepted");
- f->status = fetch_STATUS_FETCH;
-
- /* load and send data */
- msg.type = msg_FETCH_DATA;
- msg.f = f;
- msg.data.fetch_data.block = load(actual_filename);
- msg.data.fetch_data.block_size = size;
- Log("fetch_poll","sending FETCH_DATA to browser");
- if (browser_window_message(f->request->requestor.browser, &msg) == 0)
- {
- xfree(msg.data.fetch_data.block);
- /* data accepted. no more data, so finish */
- Log("fetch_poll","FETCH_DATA accepted");
- f->status = fetch_STATUS_FINISH;
-
- /* send finish */
- msg.type = msg_FETCH_FINISHED;
- msg.f = f;
- Log("fetch_poll","sending FETCH_FINISHED to browser");
- browser_window_message(f->request->requestor.browser, &msg);
- Log("fetch_poll","FETCH_FINISHED accepted");
-
- ret = f->next;
- Log("fetch_poll","Destroying f");
- fetch_destroy(f);
- Log("fetch_poll","Moving on...");
- return fetch_poll(ret);
- /* destroy this fetch, then move on to next fetch to poll */
- }
- xfree(msg.data.fetch_data.block);
- }
-
- /* requestor didn't like something, and wants the fetch cancelled */
- Log("fetch_poll","Requesting browser didn't like something");
- ret = f->next;
- Log("fetch_poll","Cancelling fetch");
- f = fetch_cancel(f);
- return fetch_poll(ret);
- }
- }
- Log("fetch_poll","Moving on (at end of function with f->next)");
+ LOG(("Moving on (at end of function with f->next)"));
f->next = fetch_poll(f->next);
return f;
}
diff --git a/desktop/fetch.h b/desktop/fetch.h
index c0c2c06ac..f9366c8fa 100644
--- a/desktop/fetch.h
+++ b/desktop/fetch.h
@@ -1,5 +1,5 @@
/**
- * $Id: fetch.h,v 1.1 2002/09/11 14:24:02 monkeyson Exp $
+ * $Id: fetch.h,v 1.2 2003/01/06 00:04:43 bursa Exp $
*/
#ifndef _NETSURF_DESKTOP_FETCH_H_
@@ -11,7 +11,7 @@
#include "netsurf/desktop/browser.h"
#include <time.h>
-typedef enum {fetch_FILE, fetch_CURL} fetch_type;
+typedef enum {fetch_CURL} fetch_type;
typedef enum {fetch_STATUS_SEND, fetch_STATUS_WAIT, fetch_STATUS_FETCH, fetch_STATUS_FINISH, fetch_DELETED} fetch_status;
typedef int fetch_flags;