1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/source4/lib/http/http_internal.h
Stefan Metzmacher e42f12c6be s4:lib/http: let http_read_response_send/recv() also consume the body if it fits into a max value
We need to consume full HTTP responses from the socket during the
authentication exchanges, otherwise our HTTP parser gets out of sync for
the next requests.

This will be important for gensec mechs which use an even number
for authentication packets.

I guess this should be done just based on the Content-Length value and
not based on the response code.

So far I saw bodies with 200 and 401 codes.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
2017-08-07 15:20:01 +02:00

64 lines
1.6 KiB
C

/*
Unix SMB/CIFS implementation.
HTTP library
Copyright (C) 2014 Samuel Cabrero <samuelcabrero@kernevil.me>
This program 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.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _HTTP_INTERNAL_H_
#define _HTTP_INTERNAL_H_
enum http_parser_state {
HTTP_READING_FIRSTLINE,
HTTP_READING_HEADERS,
HTTP_READING_BODY,
HTTP_READING_TRAILER,
HTTP_READING_DONE,
};
enum http_read_status {
HTTP_ALL_DATA_READ,
HTTP_MORE_DATA_EXPECTED,
HTTP_DATA_CORRUPTED,
HTTP_REQUEST_CANCELED,
HTTP_DATA_TOO_LONG,
};
struct http_send_request_state {
struct tevent_context *ev;
struct tstream_context *stream;
struct loadparm_context *lp_ctx;
struct cli_credentials *credentials;
struct tevent_queue *send_queue;
struct http_request *request;
DATA_BLOB buffer;
struct iovec iov;
ssize_t nwritten;
int sys_errno;
};
struct http_read_response_state {
enum http_parser_state parser_state;
size_t max_headers_size;
uint64_t max_content_length;
DATA_BLOB buffer;
struct http_request *response;
};
#endif /* _HTTP_INTERNAL_H_ */