Files
wget2/libwget/http.h
Ander Juaristi c8bf9a7112 Fix memleaks
2024-01-03 21:39:10 +01:00

131 lines
3.5 KiB
C

/*
* Copyright (c) 2017-2023 Free Software Foundation, Inc.
*
* This file is part of libwget.
*
* Libwget 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 3 of the License, or
* (at your option) any later version.
*
* Libwget 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Libwget. If not, see <https://www.gnu.org/licenses/>.
*
*
* Header file for private HTTP structures
*/
#ifndef LIBWGET_HTTP_H
# define LIBWGET_HTTP_H
#ifdef WITH_LIBNGHTTP2
# include <nghttp2/nghttp2.h>
#endif
#ifdef WITH_LIBNGTCP2
#include <ngtcp2/ngtcp2.h>
#endif
#ifdef WITH_LIBNGHTTP3
#include <nghttp3/nghttp3.h>
#endif
//wget_http_connection_t abstract type
struct wget_http_connection_st {
wget_tcp *
tcp;
const char *
esc_host;
wget_buffer *
buf;
#ifdef WITH_LIBNGHTTP2
nghttp2_session *
http2_session;
#endif
#ifdef WITH_LIBNGHTTP3
nghttp3_conn *
conn;
const nghttp3_mem *
mem;
nghttp3_settings
settings;
wget_quic_stream
* control_stream,
* qpac_encoder_stream,
* qpac_decoder_stream,
* client_stream;
void
*http3_ctx;
#endif
#ifdef WITH_LIBNGTCP2
wget_quic *
quic;
#endif
wget_vector
*pending_requests; // List of unresponsed requests (HTTP1 only)
wget_vector
*received_http2_responses; // List of received (but yet unprocessed) responses (HTTP2 only)
int
pending_http2_requests; // Number of unresponsed requests (HTTP2 only)
wget_iri_scheme
scheme;
uint16_t
port;
char
protocol; // WGET_PROTOCOL_HTTP_1_1 or WGET_PROTOCOL_HTTP_2_0
bool
print_response_headers : 1,
abort_indicator : 1,
proxied : 1;
};
/* HTTP/1.0 status codes from RFC1945 */
#define H_10X(x) (((x) >= 100) && ((x) < 200))
/* Successful 2xx. */
#define HTTP_STATUS_OK 200
#define HTTP_STATUS_CREATED 201
#define HTTP_STATUS_ACCEPTED 202
#define HTTP_STATUS_NO_CONTENT 204
#define HTTP_STATUS_PARTIAL_CONTENTS 206
/* Redirection 3xx. */
#define HTTP_STATUS_MULTIPLE_CHOICES 300
#define HTTP_STATUS_MOVED_PERMANENTLY 301
#define HTTP_STATUS_MOVED_TEMPORARILY 302
#define HTTP_STATUS_SEE_OTHER 303 /* from HTTP/1.1 */
#define HTTP_STATUS_NOT_MODIFIED 304
#define HTTP_STATUS_TEMPORARY_REDIRECT 307 /* from HTTP/1.1 */
/* Client error 4xx. */
#define HTTP_STATUS_BAD_REQUEST 400
#define HTTP_STATUS_UNAUTHORIZED 401
#define HTTP_STATUS_FORBIDDEN 403
#define HTTP_STATUS_NOT_FOUND 404
#define HTTP_STATUS_RANGE_NOT_SATISFIABLE 416
int http_connection_is_aborted(wget_http_connection *conn);
void http_fix_broken_server_encoding(wget_http_response *resp);
int http_get_body_cb(void *context, const char *data, size_t length);
int http_decompress_error_handler_cb(wget_decompressor *dc, int err);
int wget_http2_open(wget_http_connection *conn);
void wget_http2_close(wget_http_connection **conn);
int wget_http2_send_request(wget_http_connection *conn, wget_http_request *req);
wget_http_response *wget_http2_get_response_cb(wget_http_connection *conn,
wget_server_stats_callback *server_stats_callback);
wget_http_response *wget_http3_get_response_cb(wget_http_connection *conn);
#endif /* LIBWGET_HTTP_H */