File: http_fetcher.h

package info (click to toggle)
s3d 0.2.1.1-5
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 5,256 kB
  • ctags: 2,684
  • sloc: ansic: 20,585; perl: 98; makefile: 32; python: 8; sh: 4
file content (151 lines) | stat: -rw-r--r-- 4,931 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/* http_fetcher.h - HTTP handling functions
 *
 * HTTP Fetcher
 * Copyright (C) 2001 Lyle Hanson (lhanson@cs.nmu.edu)
 *
 * This file is part of s3dosm, a gps card application for s3d.
 * See http://s3d.berlios.de/ for more updates.
 *
 * s3dosm 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; either version 2 of the License, or
 * (at your option) any later version.
 *
 * s3dosm 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 s3dosm; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *
 * Changes:
 *  Simon Wunderlich <dotslash@packetmixer.de>
 *  + added http_setAuth() to support basic http-authentication and some minor fixes
 */

#ifndef HTTP_FETCHER_H
#define HTTP_FETCHER_H

#include "http_error_codes.h"

#define PORT_NUMBER    80
#define HTTP_VERSION    "HTTP/1.1"
#define DEFAULT_USER_AGENT  "HTTP Fetcher"
#define HTTP_FETCHER_VERSION "1.0"
#define DEFAULT_READ_TIMEOUT 30  /* Seconds to wait before giving up when no data is arriving */

#define REQUEST_BUF_SIZE   1024
#define HEADER_BUF_SIZE   1024
#define DEFAULT_PAGE_BUF_SIZE  1024 * 200 /* 200K should hold most things */



/******************************************************************************/
/**************** Function declarations and descriptions **********************/
/******************************************************************************/

/*
 * [!!! NOTE !!!]  All HTTP Fetcher functions return -1 on error.  You can
 * then either call http_perror to print the error message or call
 * http_strerror to get a pointer to it
 */


/*
 * Download the page, registering a hit. If you pass it a NULL for fileBuf,
 * 'url' will be requested but will not remain in memory (useful for
 * simply registering a hit).  Otherwise necessary space will be allocated
 * and will be pointed to by fileBuf.
 * Returns:
 * # of bytes downloaded, or
 * -1 on error
 */
int http_fetch(const char *url, char **fileBuf);

/*
 * Changes the User Agent (shown to the web server with each request)
 * Send it NULL to avoid telling the server a User Agent
 * By default, the User Agent is sent (The default one unless changed)
 * Returns:
 * 0 on success, or
 * -1 on error (previous value for agent remains unchanged)
 */
int http_setUserAgent(const char *newAgent);

/*
 * Changes the Referer (shown to the web server with each request)
 * Send it NULL to avoid thelling the server a Referer
 * By default, no Referer is sent
 * Returns:
 * 0 on success, or
 * -1 on error
 */
int http_setReferer(const char *newReferer);

/*
 * Changes the maximum amount of time that HTTP Fetcher will wait on
 * data.  If this many seconds elapses without more data from the
 * server, http_fetch will return with an error.
 * If you pass a value less than 0, reads will not time out, potentially
 * waiting forever (or until data shows up, whichever comes first)
 */
void http_setTimeout(int seconds);

/*
 * Activate authentication for the Request. If user or pass is NULL,
 * http_set_Auth assumes a request to cleanup (disable Authentication).
 * Returns 0 on success, and -1 on error or cleanup.
 */

int http_setAuth(const char *user, const char *pass);

/*
 * Takes a url and puts the filename portion of it into 'filename'.
 * Returns:
 * 0 on success, or
 * 1 when url contains no end filename (i.e., "www.foo.com/")
 *  and **filename should not be assumed to point to anything), or
 * -1 on error
 */
int http_parseFilename(const char *url, char **filename);

/*
 * Works like perror.  If an HTTP Fetcher function ever returns an
 * error (-1), this will print a descriptive message to standard output
 */
void http_perror(const char *string);

/*
 * Returns a pointer to the current error description message.  The
 * message pointed to is only good until the next call to http_strerror(),
 * so if you need to hold on to the message for a while you should make
 * a copy of it.
 */
const char *http_strerror(void);



/******************************************************************************/
/**** The following functions are used INTERNALLY by http_fetcher *************/
/******************************************************************************/

/*
 * Reads the metadata of an HTTP response.  On success returns the number
 * Returns:
 * # of bytes read on success, or
 * -1 on error
 */
int _http_read_header(int sock, char *headerPtr);

/*
 * Opens a TCP socket and returns the descriptor
 * Returns:
 * socket descriptor, or
 * -1 on error
 */
int makeSocket(const char *host);

#endif