1 /* http.h - HTTP protocol handler 2 * Copyright (C) 1999, 2000, 2001, 2003, 3 * 2006 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 #ifndef GNUPG_COMMON_HTTP_H 23 #define GNUPG_COMMON_HTTP_H 24 25 #include <gpg-error.h> 26 #include "estream.h" 27 28 struct uri_tuple_s { 29 struct uri_tuple_s *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; /* The real length of the value; we need it 33 because the value may contain embedded Nuls. */ 34 int no_value; /* True if no value has been given in the URL. */ 35 }; 36 typedef struct uri_tuple_s *uri_tuple_t; 37 38 struct parsed_uri_s 39 { 40 /* All these pointers point into BUFFER; most stuff is not escaped. */ 41 char *scheme; /* Pointer to the scheme string (lowercase). */ 42 int use_tls; /* Whether TLS should be used. */ 43 char *auth; /* username/password for basic auth */ 44 char *host; /* Host (converted to lowercase). */ 45 unsigned short port; /* Port (always set if the host is set). */ 46 char *path; /* Path. */ 47 uri_tuple_t params; /* ";xxxxx" */ 48 uri_tuple_t query; /* "?xxx=yyy" */ 49 char buffer[1]; /* Buffer which holds a (modified) copy of the URI. */ 50 }; 51 typedef struct parsed_uri_s *parsed_uri_t; 52 53 typedef enum 54 { 55 HTTP_REQ_GET = 1, 56 HTTP_REQ_HEAD = 2, 57 HTTP_REQ_POST = 3 58 } 59 http_req_t; 60 61 /* We put the flag values into an enum, so that gdb can display them. */ 62 enum 63 { 64 HTTP_FLAG_TRY_PROXY = 1, 65 HTTP_FLAG_SHUTDOWN = 2, 66 HTTP_FLAG_TRY_SRV = 4, 67 HTTP_FLAG_LOG_RESP = 8, 68 HTTP_FLAG_NEED_HEADER = 16, 69 HTTP_FLAG_IGNORE_CL = 32 70 }; 71 72 struct http_context_s; 73 typedef struct http_context_s *http_t; 74 75 void http_register_tls_callback (gpg_error_t (*cb) (http_t, void *, int)); 76 77 gpg_error_t http_parse_uri (parsed_uri_t *ret_uri, const char *uri); 78 79 void http_release_parsed_uri (parsed_uri_t uri); 80 81 gpg_error_t http_open (http_t *r_hd, http_req_t reqtype, 82 const char *url, 83 const char *auth, 84 unsigned int flags, 85 const char *proxy, 86 void *tls_context); 87 88 void http_start_data (http_t hd); 89 90 gpg_error_t http_wait_response (http_t hd); 91 92 void http_close (http_t hd, int keep_read_stream); 93 94 gpg_error_t http_open_document (http_t *r_hd, 95 const char *document, 96 const char *auth, 97 unsigned int flags, 98 const char *proxy, 99 void *tls_context); 100 101 estream_t http_get_read_ptr (http_t hd); 102 estream_t http_get_write_ptr (http_t hd); 103 unsigned int http_get_status_code (http_t hd); 104 const char *http_get_header (http_t hd, const char *name); 105 106 char *http_escape_string (const char *string, const char *specials); 107 108 109 #endif /*GNUPG_COMMON_HTTP_H*/ 110