Commit Graph
119 Commits
Author SHA1 Message Date
Vinnie Falco 31051ac51b Use BOOST_FALLTHROUGH
fix #437
2017-06-08 06:41:27 -07:00
Vinnie Falco 20c59b7e22 Fix operator<< for header 2017-06-07 19:21:32 -07:00
Vinnie Falco 6045b746e3 http read_some, async_read_some don't return bytes (API Change):
fix #431, fix #430

The read_some and async_read_some HTTP operations no longer
return the number of bytes that the caller should consume.
Instead, the bytes are automatically removed from the dynamic
buffer as indicated by the parser.
2017-06-07 18:18:56 -07:00
Vinnie Falco 4df68852a7 Fix chunk header parsing
fix #431, fix #430
2017-06-07 18:18:56 -07:00
Vinnie Falco bf69ce1683 Fix chunk delimiter parsing 2017-06-07 18:18:56 -07:00
Vinnie Falco 3bd82600a0 Remove obsolete serializer allocator (API Change) 2017-06-07 18:18:56 -07:00
Vinnie Falco 001c97950c Remove message free functions (API Change) 2017-06-07 18:18:55 -07:00
Vinnie Falco 745876b9bf Remove message connection settings (API Change) 2017-06-07 18:18:55 -07:00
Vinnie Falco 1e303b0cf6 Fields concept work 2017-06-07 18:18:55 -07:00
Vinnie Falco 9d0464a946 Tidy up basic_fields, header, and concepts 2017-06-07 18:18:55 -07:00
Vinnie Falco 3ba81b5474 Use field in basic_parser 2017-06-07 18:18:54 -07:00
Vinnie Falco b5f6cc1724 Use field in basic_fields and call sites 2017-06-07 18:18:54 -07:00
Vinnie Falco d55b079321 Fix basic_fields allocator awareness 2017-06-07 18:18:54 -07:00
Vinnie Falco 485a6e55ee Refactor prepare (API Change) 2017-06-06 13:25:44 -07:00
Vinnie Falco 9fd307178f Derive header from Fields (API Change) 2017-06-06 13:25:43 -07:00
Vinnie Falco 8ad26b8f5d Use allocator more in basic_fields
Fix #392
2017-06-06 13:25:43 -07:00
Vinnie Falco 0071039d7f Add verb to on_request for parsers (API Change) 2017-06-06 13:25:43 -07:00
Vinnie Falco 74f6cbb117 Add field enumeration 2017-06-06 13:25:43 -07:00
Vinnie Falco 054ac40192 Remove header_parser (API Change) 2017-06-05 16:09:38 -07:00
Vinnie Falco a007eba09c parser is constructible from other body types 2017-06-05 16:09:38 -07:00
Vinnie Falco ddfbfbf172 Use <iosfwd> instead of <ostream> 2017-06-04 17:26:21 -07:00
Vinnie Falco e67c0abe79 Refactor header status, reason, and target (API Change):
* header::result is a family of functions to replace header::status

* header interface now uses status enum and also ints

* reason-phrase is no longer stored unless the user explicitly
  requests it.

* When serializing, the standard reason is used for the
  corresponding status code unless the user has changed it.
2017-06-04 17:26:20 -07:00
Vinnie Falco 7d267f46b0 Canonicalize string_view parameter types 2017-06-04 14:51:41 -07:00
Vinnie Falco ac175cb694 Refactor method and verb (API Change):
The verb interfaces now use verb::unknown instead of
boost::optional<verb> == boost::none to indicate that
the request-method is an unrecognized string.

The http::header interface is modified to focus more on the
verb enum rather than the string. For recognized verbs, the
implementation stores an integer instead of the string.
Unknown verbs are still stored as strings.

* header::method now returns a verb
* header::method_string returns the method text
2017-06-04 14:51:41 -07:00
Vinnie Falco 6cb188ea45 Remove detail::sync_ostream
fix #418
2017-06-03 18:25:15 -07:00
Vinnie Falco 4707b21a68 Rename to parser (API Change):
* message_parser is renamed to parser
2017-06-03 11:29:49 -07:00
Vinnie Falco 3cb385dc2d Consolidate parsers to parser.hpp
fix #405
2017-06-03 11:29:48 -07:00
Vinnie Falco b9df187557 Tidy up chunk decorator (API Change):
* Rename to no_chunk_decorator
* Decorator no longer has to append "\r\n" to the returned string
2017-06-03 11:29:41 -07:00
Vinnie Falco fe75a7ca2a 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-06-02 19:12:34 -07:00
Vinnie Falco 5db707a037 Refactor treatment of status code and obsolete reason (API Change):
fix #398

A new enum status is added for the status code.

The function obsolete_reason returns default reason phrasing.

If a response has an empty reason, the serializer will
automatically insert the default reason phrase for the
status code.
2017-05-30 15:59:54 -07:00
Vinnie Falco 9a585a82d9 Refactor treatment of request-method (API Change):
fix #397

method enum class is added to represent all known request methods.
Functions are provided to convert from strings to and from the method
enumeration.

The fields container is modified to also work with the enum.
2017-05-30 15:59:50 -07:00
Vinnie Falco 34ea0b37c4 Refactor serialization algorithms:
serializer interface is changed to be buffer-only, no streams,
and placed in its own header file.

Operations on serializers are moved to free functions as part
of the HTTP write family of synchronous and asynchronous algorithms.
2017-05-28 19:35:20 -07:00
Vinnie Falco 407b0462d4 Rename to make_serializer 2017-05-28 16:00:06 -07:00
Vinnie Falco c29451a8dd Refactor type_traits (API Change):
fix #373

* concepts.hpp is renamed to type_traits.hpp

* Body reader and writer concepts are renamed
2017-05-28 16:00:05 -07:00
Vinnie Falco 8578419433 Refactor HTTP serialization (API Change):
A new class `serializer` is introduced to permit incremental
serialization of HTTP messages. Existing free functions are
re-implemented in terms of this new class.

* The BodyReader concept is refined to support a greater variety
of strategies for providing buffers representing the body to
the serialization algorithms.

* Added buffer_body, a new model of Body which allows the caller
to provide a series of owned buffers using their own serialization
loop.

* Added empty_body, a model of Body which is for serialization only,
to represent HTTP messages with no content body.

* Removed overloads of write and async_write which send only
the HTTP header.

* Removed public interfaces for performing low-level chunk encoding.
2017-05-28 15:58:27 -07:00
Vinnie Falco cd9f41b1a0 Use BOOST_STATIC_ASSERT
fix #380
2017-05-24 12:36:08 -07:00
Vinnie Falco 1b1daa7b29 Tidy up read_size_helper and dynamic buffers
fix #376
2017-05-24 12:36:07 -07:00
Vinnie Falco bf0145da67 Use BOOST_THROW_EXCEPTION
fix #370
2017-05-24 12:36:07 -07:00
Vinnie Falco 88adbdd95e Remove handler helpers, tidy up hook invocations (API Change) 2017-05-14 15:00:52 -07:00
Vinnie Falco c3fd6f9087 Tidy up formal parameter names
fix #361
2017-05-14 15:00:51 -07:00
Vinnie Falco d81196294f 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-05-14 15:00:34 -07:00
Vinnie Falco bdae92a8b4 Replace asynchronous helper macros with template aliases (API Change) 2017-05-12 17:40:00 -07:00
Vinnie Falco b7184f3a69 Return http::error::end_of_stream on HTTP read eof (API Change)
fix #350
2017-05-10 10:03:51 -07:00
Vinnie Falco 5631936106 Tidy up HTTP reason_string (API Change):
fix #182

reason_string() is now located in <beast/http/message.hpp>
and returns a string view rather than char const*.
2017-05-09 07:23:10 -07:00
Vinnie Falco 2bf515069d 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-05-09 07:23:09 -07:00
Vinnie Falco 728e9d8e70 Tidy up basic_parser javadocs 2017-05-09 07:23:09 -07:00
Vinnie Falco 1c9067b1da Use beast::string_view alias 2017-05-09 07:23:09 -07:00
Vinnie Falco 69259efe87 Rename to multi_buffer, basic_multi_buffer (API Change):
These classes are renamed:

* streambuf to multi_buffer
* basic_streambuf to basic_multi_buffer
2017-05-09 07:23:07 -07:00
Vinnie Falco a7ef4f53dc New ostream() returns dynamic buffer output stream (API Change):
This eliminates beast::write output for dynamic buffers and replaces
it with the function ostream() that wraps a caller provided dynamic
buffer and returns the result as a std::ostream derived object.
Callers may now produce formatted output into any object meeting the
requirements of DynamicBuffer using operator<< and the standard stream
modifiers such as std::endl.

This new technique is more efficient, as implementations of operator<<
can now write directly into the output using std::ostream::write and
std::ostream::put.

Example of use:

  beast::streambuf sb;
  beast::ostream(sb) << "Hello, world!" << std::endl;
2017-05-08 15:46:03 -07:00
Vinnie Falco ff5e659545 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-05-07 13:40:04 -07:00