⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection.h

📁 一个很有名的浏览器
💻 H
字号:
/* $Id: connection.h,v 1.83.2.4 2005/05/01 22:09:22 jonas Exp $ */#ifndef EL__SCHED_CONNECTION_H#define EL__SCHED_CONNECTION_H#include "cache/cache.h"#include "encoding/encoding.h"#include "util/lists.h"#include "util/ttime.h"struct conn_info;struct read_buffer;struct uri;enum connection_priority {	PRI_MAIN	= 0,	PRI_DOWNLOAD	= 0,	PRI_FRAME,	PRI_CSS,	PRI_NEED_IMG,	PRI_IMG,	PRI_PRELOAD,	PRI_CANCEL,	PRIORITIES,};/* Numbers < 0 and > -100000 are reserved for system errors reported via * errno/strerror(), see session.c and connection.c for further information. *//* WARNING: an errno value <= -100000 may cause some bad things... *//* NOTE: Winsock errors are in range 10000..11004. Hence our abs. values are * above this. */#define is_system_error(state)		(S_OK < (state) && (state) < S_WAIT)#define is_in_result_state(state)	((state) < 0)#define is_in_progress_state(state)	((state) >= 0)#define is_in_connecting_state(state)	(S_WAIT < (state) && (state) < S_TRANS)#define is_in_transfering_state(state)	((state) >= S_TRANS)#define is_in_queued_state(state)	(is_in_connecting_state(state) || (state) == S_WAIT)/* FIXME: Namespace clash with Windows headers. */#undef S_OKenum connection_state {	/* States >= 0 are used for connections still in progress. */	S_WAIT			= 0,	S_DNS,	S_CONN,	S_SSL_NEG,	S_SENT,	S_LOGIN,	S_GETH,	S_PROC,	S_TRANS,	S_QUESTIONS,	/* State < 0 are used for the final result of a connection	 * (it's finished already and it ended up like this) */	S_OK			= -100000,	S_INTERRUPTED		= -100001,	S_EXCEPT		= -100002,	S_INTERNAL		= -100003,	S_OUT_OF_MEM		= -100004,	S_NO_DNS		= -100005,	S_CANT_WRITE		= -100006,	S_CANT_READ		= -100007,	S_MODIFIED		= -100008,	S_BAD_URL		= -100009,	S_TIMEOUT		= -100010,	S_RESTART		= -100011,	S_STATE			= -100012,	S_WAIT_REDIR		= -100013,	S_LOCAL_ONLY		= -100014,	S_UNKNOWN_PROTOCOL	= -100015,	S_EXTERNAL_PROTOCOL	= -100016,	S_ENCODE_ERROR		= -100017,	S_SSL_ERROR		= -100018,	S_NO_FORCED_DNS		= -100019,	S_HTTP_ERROR		= -100100,	S_HTTP_100		= -100101,	S_HTTP_204		= -100102,	S_FILE_TYPE		= -100200,	S_FILE_ERROR		= -100201,	S_FILE_CGI_BAD_PATH	= -100202,	S_FTP_ERROR		= -100300,	S_FTP_UNAVAIL		= -100301,	S_FTP_LOGIN		= -100302,	S_FTP_PORT		= -100303,	S_FTP_NO_FILE		= -100304,	S_FTP_FILE_ERROR	= -100305,	S_NNTP_ERROR		= -100400,	S_NNTP_NEWS_SERVER	= -100401,	S_NNTP_SERVER_HANG_UP	= -100402,	S_NNTP_GROUP_UNKNOWN	= -100403,	S_NNTP_ARTICLE_UNKNOWN	= -100404,	S_NNTP_TRANSFER_ERROR	= -100405,	S_NNTP_AUTH_REQUIRED	= -100406,	S_NNTP_ACCESS_DENIED	= -100407,	S_NNTP_SERVER_ERROR	= -100408,	S_GOPHER_CSO_ERROR	= -100500,	S_NO_JAVASCRIPT		= -100600,	S_PROXY_ERROR		= -100700,};struct progress {	ttime elapsed;	ttime last_time;	ttime dis_b;	unsigned int valid:1;	int size, loaded, last_loaded, cur_loaded;	/* This is offset where the download was resumed possibly */	/* progress->start == -1 means normal session, not download	 *            ==  0 means download	 *             >  0 means resume	 * --witekfl */	int start;	/* This is absolute position in the stream	 * (relative_position = pos - start) (maybe our fictional	 * relative_position is equiv to loaded, but I'd rather not rely on it	 * --pasky). */	int pos;	/* If this is non-zero, it indicates that we should seek in the	 * stream to the value inside before the next write (and zero this	 * counter then, obviously). */	int seek;	int timer;	int data_in_secs[CURRENT_SPD_SEC];};struct connection_socket {	/* The socket descriptor */	int fd;	/* For connections using SSL this is in fact (ssl_t *), but we don't	 * want to know. Noone cares and ssl.h inclusion costs a lot of	 * compilation time. --pasky */	void *ssl;};struct connection {	LIST_HEAD(struct connection);	struct list_head downloads;	struct progress progress;	struct uri *uri;	struct uri *proxied_uri;	struct uri *referrer;	void *dnsquery;	struct conn_info *conn_info;	void *info;	void *buffer;	struct cache_entry *cached;	struct stream_encoded *stream;	/* Only used by ftp in send_cmd/get_resp. Put here	 * since having no connection->info is apparently valid. */	void (*read_func)(struct connection *, struct read_buffer *);	unsigned int id;	enum connection_state state;	int prev_error;	int from;	/* The communication socket with the other side. */	struct connection_socket socket;	/* The data socket. It is used, when @socket is used for the control,	 * and the actual data is transmitted through a different channel. */	/* The only users now is FTP and SMB. */	struct connection_socket data_socket;	int tries;	int received;	int est_length;	int timer;	int cgi_pipes[2];	int stream_pipes[2];	unsigned int protocol_family:1; /* 0 == PF_INET, 1 == PF_INET6 */	unsigned int running:1;	unsigned int unrestartable:1;	unsigned int detached:1;	unsigned int no_tls:1;	/* Each document is downloaded with some priority. When downloading a	 * document, the existing connections are checked to see if a	 * connection to the host already exists before creating a new one.  If	 * it finds out that something had that idea earlier and connection for	 * download of the very same URL is active already, it just attaches	 * the struct download it got to the connection, _and_ updates its @pri	 * array by the priority it has thus, sum of values in all fields of	 * @pri is also kinda refcount of the connection. */	int pri[PRIORITIES];	enum cache_mode cache_mode;	enum stream_encoding content_encoding;};struct download {	/* XXX: order matters there, there's some hard initialization in	 * src/sched/session.c and src/viewer/text/view.c */	LIST_HEAD(struct download);	struct connection *conn;	struct cache_entry *cached;	/* The callback is called when connection gets into a progress state,	 * after it's over (in a result state), and also periodically after	 * the download starts receiving some data. */	void (*callback)(struct download *, void *);	void *data;	struct progress *progress;	enum connection_state state;	int prev_error;	enum connection_priority pri;};extern struct list_head queue;void check_queue(void);long connect_info(int);void set_connection_state(struct connection *, int);int has_keepalive_connection(struct connection *);void add_keepalive_connection(struct connection *, ttime,			      void (*done)(struct connection *));void retry_connection(struct connection *);void abort_connection(struct connection *);void abort_conn_with_state(struct connection *, int);void retry_conn_with_state(struct connection *, int);void change_connection(struct download *, struct download *, int, int);void detach_connection(struct download *, int);void abort_all_connections(void);void abort_background_connections(void);void set_connection_timeout(struct connection *);/* Initiates a connection to get the given @uri. *//* Note that stat's data _MUST_ be struct file_download * if start > 0! Yes, * that should be probably something else than data, but... ;-) *//* Returns 0 on success and -1 on failure. */int load_uri(struct uri *uri, struct uri *referrer, struct download *download,	     enum connection_priority pri, enum cache_mode cache_mode, int start);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -