Commit Graph

32 Commits

Author SHA1 Message Date
Vinnie Falco
c149321013 Return std::size_t from Body::writer::put (API Change)
`put` returns the number of bytes actually transferred
from the input buffers.

Actions Required:

* Return the number of bytes actually transferred from the
  input buffers in user defined `Body::writer::put` functions.
2017-07-20 08:15:29 -07:00
Vinnie Falco
120c38948e Fix spurious on_chunk invocation 2017-07-20 08:15:29 -07:00
Vinnie Falco
788550e833 Add basic_parser header and body limits:
fix #550

* default body limits are now 1MB/8MB
* default header limit is 8KB

Actions Required:

* Call body_limit and/or header_limit as needed to adjust the
  limits to suitable values if the defaults are insufficient.
2017-07-20 08:15:29 -07:00
Vinnie Falco
58d42cc803 Use BEAST_FALLTHROUGH to silence warnings
fix #545
2017-07-20 08:15:29 -07:00
Vinnie Falco
f3eaa409d1 basic_parser optimizations 2017-07-20 08:15:29 -07:00
Vinnie Falco
43f8bb841a bad_target replaces bad_path (API Change):
Actions Required:

* Replace references to http::error::bad_path with http::error::bad_target
2017-07-20 08:15:29 -07:00
Vinnie Falco
4d393f4c2a Clear the error faster 2017-07-20 08:15:27 -07:00
Vinnie Falco
b5306a5712 String comparisons are public interfaces 2017-07-20 08:15:26 -07:00
Vinnie Falco
ca109693fb Reset error codes
fix #478
2017-07-20 08:12:20 -07:00
Vinnie Falco
0eb3a6b77e Call on_chunk when the extension is empty
fix #435
2017-07-20 08:12:20 -07:00
Vinnie Falco
ff8be0e931 Avoid a parser allocation using non-flat buffer:
When the parser is presented with an input buffer
sequence with length greater than one, the input is
flattened using stack space instead of dynamic
allocation if the buffer size is no greater than 8192.
2017-07-20 08:12:19 -07:00
Vinnie Falco
87c6e69d9f Don't allocate memory to handle obs-fold 2017-07-20 08:12:19 -07:00
Vinnie Falco
e4fdeecc3b Fix basic_parser::maybe_flatten (#462) 2017-07-20 08:12:19 -07:00
Vinnie Falco
04522398e0 Fix infinite loop in basic_parser
fix #452
2017-07-20 08:12:19 -07:00
Vinnie Falco
55358835c6 Use BOOST_FALLTHROUGH
fix #437
2017-07-20 08:12:19 -07:00
Vinnie Falco
6203074c92 Fix chunk header parsing
fix #431, fix #430
2017-07-20 08:12:18 -07:00
Vinnie Falco
60a3221f0b Fix chunk delimiter parsing 2017-07-20 08:12:18 -07:00
Vinnie Falco
fb2f777b4d Use field in basic_parser 2017-07-20 08:12:18 -07:00
Vinnie Falco
ff216a89a8 Add verb to on_request for parsers (API Change) 2017-07-20 08:12:18 -07:00
Vinnie Falco
aa2c915c96 Canonicalize string_view parameter types 2017-07-20 08:12:18 -07:00
Vinnie Falco
02d5aedc29 Refactor HTTP serialization and parsing (API Change):
fix #404

Parsing and serialization interfaces have been fine tuned and unified.

For parsing these stream operations are defined:

* read
* read_header
* read_some
* async_read
* async_read_header
* async_read_some

For serialization these stream operations are defined:

* write
* write_header
* write_some
* async_write
* async_write_header
* async_write_some
2017-07-20 08:12:17 -07:00
Vinnie Falco
24fd5ec8af Use BOOST_STATIC_ASSERT
fix #380
2017-07-20 08:12:17 -07:00
Vinnie Falco
afde7508f1 Tidy up formal parameter names
fix #361
2017-07-20 08:12:17 -07:00
Vinnie Falco
51f11f0902 Concept revision and documentation (API Change):
The concept type traits are renamed for consistency,
and consolidated into a single header file <beast/core/type_traits.hpp>

A new section, Core Concepts, is added to the documentation describing all
of the core utility classes and functions. This also includes a complete
explanation and sample program describing how to write asynchronous initiation
functions and their associated composed operations.
2017-07-20 08:12:16 -07:00
Vinnie Falco
d9562ff525 Harmonize concepts and identifiers with net-ts (API Change):
fix #321

This synchronizes identifier names and some implementation details
with the Networking-TS document and reference implementation.
The following interfaces have changed:

* async_completion
* is_buffer_sequence (removed)
* is_const_buffer_sequence (was is_ConstBufferSequence)
* is_dynamic_buffer (was is_DynamicBuffer)
* is_mutable_buffer_sequence (was is_MutableBufferSequence)
* async_result (new)
* BEAST_HANDLER_TYPE macro (new)
* BEAST_INITFN_RESULT_TYPE macro (new)

Filename changes:

* async_result.hpp (was async_completion.hpp)
2017-07-20 08:12:16 -07:00
Vinnie Falco
46097c7dab Tidy up basic_parser javadocs 2017-07-20 08:12:16 -07:00
Vinnie Falco
84ece031f2 Use beast::string_view alias 2017-07-20 08:12:16 -07:00
Vinnie Falco
a52914175b Refactor http::header contents (API Change):
fix #124

The http::header data members "method", "url", and "reason"
are changed from data members, to pairs of get and set
functions which forward the call to the Fields type used
to instantiate the template.

Previously, these data members were implemented using
std::string. With this change, the implementation of the
Fields type used to instantiate the template is now in
control of the representation of those values. This permits
custom memory allocation strategies including uniform use of
the Allocator type already provided to beast::http::basic_fields.
2017-07-20 08:12:16 -07:00
Vinnie Falco
e8be3fd7d3 New HTTP interfaces (API Change):
fix #123
fix #154
fix #265

This completely replaces the HTTP parser used to read and
parse incoming messages. The new version is faster than
the old one, and written in fewer lines. A summary of
changes:

* parse and async_parse renamed to read and async_read

* basic_parser is optimized for linear buffers,
  use flat_streambuf for the best performance with these
  functions:

  - http::read
  - http::read_some
  - http::async_read
  - http::async_read_some

* The overloads of read() and async_read() which take
  just a header have been removed, since they would
  throw away important parse metadata.

* The derived class callbacks for basic_parser have
  been streamlined. All strings passed to callbacks
  are presented in their entirety, instead of being
  provided in pieces.

These changes allow use-cases that were previously
difficult or impossible, such as:

- Efficient relaying

- Late body type commitment

- Expect: 100-continue handling
2017-07-20 08:12:15 -07:00
Vinnie Falco
c309f53ed2 Distinguish HTTP/1 messages from general HTTP messages:
The version field is moved into message_v1, all public interfaces
are reworked to identify HTTP/1 wire format operations (suffix "_v1")
versus general HTTP.
2017-07-20 08:12:05 -07:00
Vinnie Falco
a0b04bdff2 Refactor beast core, http, tests, and examples:
* Fix warnings
* Port cmake scripts to linux
* Add command line options for running test suites
* Add examples to CMakeLists
* Return std::uint64_t from writer::content_length
* basic_parser::write takes asio::const_buffer instead of pointer and size
* Turn message test back on now that it passes
* Rename to http::headers, use std::allocator, remove http_headers
* http::message::method is now a string
* Refactor to_string for ConstBufferSequence
* Remove chunk_encode from the public interface
* Initialize members for default constructed iterators
* Disallow default construction for dependent buffer sequences

Refactor http::message serialization:

* Serialization no longer creates a copy of the
  headers and modifies them
* New function prepare(), sets Connection, Transfer-Encoding,
  Content-Length based on the body attributes and caller options.
  Callers can use prepare() to have the fields set automatically,
  or they can set the fields manually.
* Use write for operator<<
* Tests for serialization
2017-07-20 08:12:05 -07:00
Vinnie Falco
9a3a42a644 Truncate history, version 1.0.0-b2 2017-07-20 08:01:46 -07:00