* gpg.sgml: Note that --pgp8 does not include SHA224. Clarify that
[gnupg.git] / include / http.h
1 /* http.h  -  HTTP protocol handler
2  * Copyright (C) 1999, 2000, 2001, 2003, 2004,
3  *               2005 Free Software Foundation, Inc.
4  *
5  * This file is part of GnuPG.
6  *
7  * GnuPG is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * GnuPG is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20  * USA.
21  */
22
23 #ifndef G10_HTTP_H
24 #define G10_HTTP_H 1
25
26 #include "iobuf.h"
27
28 struct uri_tuple {
29     struct uri_tuple *next;
30     const char *name;   /* a pointer into name */
31     char  *value;       /* a pointer to value (a Nul is always appended) */
32     size_t valuelen;    /* and the real length of the value */
33                         /* because the value may contain embedded Nuls */
34 };
35 typedef struct uri_tuple *URI_TUPLE;
36
37 struct parsed_uri {
38     /* all these pointers point into buffer; most stuff is not escaped */
39     char *scheme;       /* pointer to the scheme string (lowercase) */
40     char *auth;         /* username/password for basic auth */
41     char *host;         /* host (converted to lowercase) */
42     ushort port;        /* port (always set if the host is set) */
43     char *path;         /* the path */
44     URI_TUPLE params;   /* ";xxxxx" */
45     URI_TUPLE query;    /* "?xxx=yyy" */
46     char buffer[1];     /* buffer which holds a (modified) copy of the URI */
47 };
48 typedef struct parsed_uri *PARSED_URI;
49
50 typedef enum {
51     HTTP_REQ_GET  = 1,
52     HTTP_REQ_HEAD = 2,
53     HTTP_REQ_POST = 3
54 } HTTP_REQ_TYPE;
55
56 /* put flag values into an enum, so that gdb can display them */
57 enum
58   { 
59     HTTP_FLAG_NO_SHUTDOWN = 1,
60     HTTP_FLAG_TRY_SRV = 2
61   };
62
63 struct http_context {
64     int initialized;
65     unsigned int status_code;
66     int sock;
67     int in_data;
68     IOBUF fp_read;
69     IOBUF fp_write;
70     int is_http_0_9;
71     PARSED_URI uri;
72     HTTP_REQ_TYPE req_type;
73     byte *buffer;          /* line buffer */
74     unsigned buffer_size;
75     unsigned int flags;
76 };
77 typedef struct http_context *HTTP_HD;
78
79 int http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url,
80                char *auth, unsigned int flags, const char *proxy );
81 void http_start_data( HTTP_HD hd );
82 int  http_wait_response( HTTP_HD hd, unsigned int *ret_status );
83 void http_close( HTTP_HD hd );
84 int http_open_document( HTTP_HD hd, const char *document, char *auth,
85                         unsigned int flags, const char *proxy );
86
87 #endif /*G10_HTTP_H*/