From 59a1594f21113e4627de7087335fae2d0f1d9ff8 Mon Sep 17 00:00:00 2001 From: James Bursa Date: Mon, 6 Jan 2003 00:04:43 +0000 Subject: [project @ 2003-01-06 00:04:43 by bursa] Remove special case code for file: urls. svn path=/import/netsurf/; revision=85 --- desktop/fetch.c | 160 +++++++++++--------------------------------------------- desktop/fetch.h | 4 +- 2 files changed, 32 insertions(+), 132 deletions(-) (limited to 'desktop') 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 #include #include -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 -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; -- cgit v1.2.3