133 lines
3.1 KiB
C
133 lines
3.1 KiB
C
/*
|
|
* Copyright 2014 Vincent Sanders <vince@netsurf-browser.org>
|
|
*
|
|
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
|
*
|
|
* NetSurf is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* NetSurf is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* \file content/fetchers.h
|
|
*
|
|
* Interface for fetchers factory.
|
|
*/
|
|
|
|
#ifndef _NETSURF_DESKTOP_FETCHERS_H_
|
|
#define _NETSURF_DESKTOP_FETCHERS_H_
|
|
|
|
#include "utils/inet.h" /* this is necessary for the fd_set definition */
|
|
#include <libwapcaplet/libwapcaplet.h>
|
|
|
|
struct nsurl;
|
|
struct fetch_multipart_data;
|
|
struct fetch;
|
|
|
|
/**
|
|
* Fetcher operations API
|
|
*
|
|
* These are the operations a fetcher must implement.
|
|
*
|
|
* Each fetcher is called once for initialisaion and finalisation.
|
|
* The poll entry point will be called to allow all active fetches to progress.
|
|
* The flow of a fetch operation is:
|
|
* URL is checked for aceptability.
|
|
* setup with all applicable data.
|
|
* start is called before the first poll
|
|
* after completion or abort it is freed
|
|
*
|
|
*/
|
|
struct fetcher_operation_table {
|
|
/**
|
|
* The initialiser for the fetcher.
|
|
*
|
|
* Called once to initialise the fetcher.
|
|
*/
|
|
bool (*initialise)(lwc_string *scheme);
|
|
|
|
/**
|
|
* Can this fetcher accept a url.
|
|
*
|
|
* \param url the URL to check
|
|
* \return true if the fetcher can handle the url else false.
|
|
*/
|
|
bool (*acceptable)(const struct nsurl *url);
|
|
|
|
/**
|
|
* Setup a fetch
|
|
*/
|
|
void *(*setup)(struct fetch *parent_fetch, struct nsurl *url,
|
|
bool only_2xx, bool downgrade_tls, const char *post_urlenc,
|
|
const struct fetch_multipart_data *post_multipart,
|
|
const char **headers);
|
|
|
|
/**
|
|
* start a fetch.
|
|
*/
|
|
bool (*start)(void *fetch);
|
|
|
|
/**
|
|
* abort a fetch.
|
|
*/
|
|
void (*abort)(void *fetch);
|
|
|
|
/**
|
|
* free a fetch allocated through the setup method.
|
|
*/
|
|
void (*free)(void *fetch);
|
|
|
|
/**
|
|
* poll a fetcher to let it make progress.
|
|
*/
|
|
void (*poll)(lwc_string *scheme);
|
|
|
|
/**
|
|
* update an fdset with the FDs needed to poll cleanly
|
|
*/
|
|
int (*fdset)(lwc_string *scheme, fd_set *read_set, fd_set *write_set,
|
|
fd_set *error_set);
|
|
|
|
/**
|
|
* Finalise the fetcher.
|
|
*/
|
|
void (*finalise)(lwc_string *scheme);
|
|
};
|
|
|
|
|
|
/**
|
|
* Register a fetcher for a scheme
|
|
*
|
|
* \param scheme The scheme fetcher is for (caller relinquishes ownership)
|
|
* \param ops The operations for the fetcher.
|
|
* \return NSERROR_OK or appropriate error code.
|
|
*/
|
|
nserror fetcher_add(lwc_string *scheme, const struct fetcher_operation_table *ops);
|
|
|
|
|
|
/**
|
|
* Initialise all registered fetchers.
|
|
*
|
|
* \return NSERROR_OK or error code
|
|
*/
|
|
nserror fetcher_init(void);
|
|
|
|
|
|
/**
|
|
* Clean up for quit.
|
|
*
|
|
* Must be called before exiting.
|
|
*/
|
|
void fetcher_quit(void);
|
|
|
|
|
|
#endif
|