123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735 |
- Metadata-Version: 2.0
- Name: h2
- Version: 2.6.2
- Summary: HTTP/2 State-Machine based protocol implementation
- Home-page: http://hyper.rtfd.org
- Author: Cory Benfield
- Author-email: cory@lukasa.co.uk
- License: MIT License
- Platform: UNKNOWN
- Classifier: Development Status :: 5 - Production/Stable
- Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: MIT License
- Classifier: Programming Language :: Python
- Classifier: Programming Language :: Python :: 2
- Classifier: Programming Language :: Python :: 2.7
- Classifier: Programming Language :: Python :: 3
- Classifier: Programming Language :: Python :: 3.3
- Classifier: Programming Language :: Python :: 3.4
- Classifier: Programming Language :: Python :: 3.5
- Classifier: Programming Language :: Python :: 3.6
- Classifier: Programming Language :: Python :: Implementation :: CPython
- Classifier: Programming Language :: Python :: Implementation :: PyPy
- Requires-Dist: hyperframe (!=4.0.0,<6,>=3.1)
- Requires-Dist: hpack (>=2.2,<4)
- Requires-Dist: enum34 (>=1.0.4,<2); python_version == "2.7" or python_version == "3.3"
- ===============================
- hyper-h2: HTTP/2 Protocol Stack
- ===============================
- .. image:: https://raw.github.com/Lukasa/hyper/development/docs/source/images/hyper.png
- .. image:: https://travis-ci.org/python-hyper/hyper-h2.svg?branch=master
- :target: https://travis-ci.org/python-hyper/hyper-h2
- This repository contains a pure-Python implementation of a HTTP/2 protocol
- stack. It's written from the ground up to be embeddable in whatever program you
- choose to use, ensuring that you can speak HTTP/2 regardless of your
- programming paradigm.
- You use it like this:
- .. code-block:: python
- import h2.connection
- conn = h2.connection.H2Connection()
- conn.send_headers(stream_id=stream_id, headers=headers)
- conn.send_data(stream_id, data)
- socket.sendall(conn.data_to_send())
- events = conn.receive_data(socket_data)
- This repository does not provide a parsing layer, a network layer, or any rules
- about concurrency. Instead, it's a purely in-memory solution, defined in terms
- of data actions and HTTP/2 frames. This is one building block of a full Python
- HTTP implementation.
- To install it, just run:
- .. code-block:: console
- $ pip install h2
- Documentation
- =============
- Documentation is available at http://python-hyper.org/h2/.
- Contributing
- ============
- ``hyper-h2`` welcomes contributions from anyone! Unlike many other projects we
- are happy to accept cosmetic contributions and small contributions, in addition
- to large feature requests and changes.
- Before you contribute (either by opening an issue or filing a pull request),
- please `read the contribution guidelines`_.
- .. _read the contribution guidelines: http://python-hyper.org/en/latest/contributing.html
- License
- =======
- ``hyper-h2`` is made available under the MIT License. For more details, see the
- ``LICENSE`` file in the repository.
- Authors
- =======
- ``hyper-h2`` is maintained by Cory Benfield, with contributions from others. For
- more details about the contributors, please see ``CONTRIBUTORS.rst``.
- Release History
- ===============
- 2.6.2 (2017-04-03)
- ------------------
- Bugfixes
- ~~~~~~~~
- - CONTINUATION frames sent on closed streams previously caused stream errors
- of type STREAM_CLOSED. RFC 7540 § 6.10 requires that these be connection
- errors of type PROTOCOL_ERROR, and so this release changes to match that
- behaviour.
- - Remote peers incrementing their inbound connection window beyond the maximum
- allowed value now cause stream-level errors, rather than connection-level
- errors, allowing connections to stay up longer.
- - h2 now rejects receiving and sending request header blocks that are missing
- any of the mandatory pseudo-header fields (:path, :scheme, and :method).
- - h2 now rejects receiving and sending request header blocks that have an empty
- :path pseudo-header value.
- - h2 now rejects receiving and sending request header blocks that contain
- response-only pseudo-headers, and vice versa.
- - h2 now correct respects user-initiated changes to the HEADER_TABLE_SIZE
- local setting, and ensures that if users shrink or increase the header
- table size it is policed appropriately.
- 2.5.4 (2017-04-03)
- ------------------
- Bugfixes
- ~~~~~~~~
- - CONTINUATION frames sent on closed streams previously caused stream errors
- of type STREAM_CLOSED. RFC 7540 § 6.10 requires that these be connection
- errors of type PROTOCOL_ERROR, and so this release changes to match that
- behaviour.
- - Remote peers incrementing their inbound connection window beyond the maximum
- allowed value now cause stream-level errors, rather than connection-level
- errors, allowing connections to stay up longer.
- - h2 now correct respects user-initiated changes to the HEADER_TABLE_SIZE
- local setting, and ensures that if users shrink or increase the header
- table size it is policed appropriately.
- 2.6.1 (2017-03-16)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Allowed hyperframe v5 support while continuing to ignore unexpected frames.
- 2.5.3 (2017-03-16)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Allowed hyperframe v5 support while continuing to ignore unexpected frames.
- 2.4.4 (2017-03-16)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Allowed hyperframe v5 support while continuing to ignore unexpected frames.
- 2.6.0 (2017-02-28)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added a new ``h2.events.Event`` class that acts as a base class for all
- events.
- - Rather than reject outbound Connection-specific headers, h2 will now
- normalize the header block by removing them.
- - Implement equality for the ``h2.settings.Settings`` class.
- - Added ``h2.settings.SettingCodes``, an enum that is used to store all the
- HTTP/2 setting codes. This allows us to use a better printed representation of
- the setting code in most places that it is used.
- - The ``setting`` field in ``ChangedSetting`` for the ``RemoteSettingsChanged``
- and ``SettingsAcknowledged`` events has been updated to be instances of
- ``SettingCodes`` whenever they correspond to a known setting code. When they
- are an unknown setting code, they are instead ``int``. As ``SettingCodes`` is
- a subclass of ``int``, this is non-breaking.
- - Deprecated the other fields in ``h2.settings``. These will be removed in
- 3.0.0.
- - Added an optional ``pad_length`` parameter to ``H2Connection.send_data``
- to allow the user to include padding on a data frame.
- - Added a new parameter to the ``h2.config.H2Configuration`` initializer which
- takes a logger. This allows us to log by providing a logger that conforms
- to the requirements of this module so that it can be used in different
- environments.
- Bugfixes
- ~~~~~~~~
- - Correctly reject pushed request header blocks whenever they have malformed
- request header blocks.
- - Correctly normalize pushed request header blocks whenever they have
- normalizable header fields.
- - Remote peers are now allowed to send zero or any positive number as a value
- for ``SETTINGS_MAX_HEADER_LIST_SIZE``, where previously sending zero would
- raise a ``InvalidSettingsValueError``.
- - Resolved issue where the ``HTTP2-Settings`` header value for plaintext
- upgrade that was emitted by ``initiate_upgrade_connection`` included the
- *entire* ``SETTINGS`` frame, instead of just the payload.
- - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for
- plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather
- than have those settings applied appropriately.
- - Resolved an issue whereby certain frames received from a peer in the CLOSED
- state would trigger connection errors when RFC 7540 says they should have
- triggered stream errors instead. Added more detailed stream closure tracking
- to ensure we don't throw away connections unnecessarily.
- 2.5.2 (2017-01-27)
- ------------------
- - Resolved issue where the ``HTTP2-Settings`` header value for plaintext
- upgrade that was emitted by ``initiate_upgrade_connection`` included the
- *entire* ``SETTINGS`` frame, instead of just the payload.
- - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for
- plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather
- than have those settings applied appropriately.
- 2.4.3 (2017-01-27)
- ------------------
- - Resolved issue where the ``HTTP2-Settings`` header value for plaintext
- upgrade that was emitted by ``initiate_upgrade_connection`` included the
- *entire* ``SETTINGS`` frame, instead of just the payload.
- - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for
- plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather
- than have those settings applied appropriately.
- 2.3.4 (2017-01-27)
- ------------------
- - Resolved issue where the ``HTTP2-Settings`` header value for plaintext
- upgrade that was emitted by ``initiate_upgrade_connection`` included the
- *entire* ``SETTINGS`` frame, instead of just the payload.
- - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for
- plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather
- than have those settings applied appropriately.
- 2.5.1 (2016-12-17)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Remote peers are now allowed to send zero or any positive number as a value
- for ``SETTINGS_MAX_HEADER_LIST_SIZE``, where previously sending zero would
- raise a ``InvalidSettingsValueError``.
- 2.5.0 (2016-10-25)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added a new ``H2Configuration`` object that allows rich configuration of
- a ``H2Connection``. This object supersedes the prior keyword arguments to the
- ``H2Connection`` object, which are now deprecated and will be removed in 3.0.
- - Added support for automated window management via the
- ``acknowledge_received_data`` method. See the documentation for more details.
- - Added a ``DenialOfServiceError`` that is raised whenever a behaviour that
- looks like a DoS attempt is encountered: for example, an overly large
- decompressed header list. This is a subclass of ``ProtocolError``.
- - Added support for setting and managing ``SETTINGS_MAX_HEADER_LIST_SIZE``.
- This setting is now defaulted to 64kB.
- - Added ``h2.errors.ErrorCodes``, an enum that is used to store all the HTTP/2
- error codes. This allows us to use a better printed representation of the
- error code in most places that it is used.
- - The ``error_code`` fields on ``ConnectionTerminated`` and ``StreamReset``
- events have been updated to be instances of ``ErrorCodes`` whenever they
- correspond to a known error code. When they are an unknown error code, they
- are instead ``int``. As ``ErrorCodes`` is a subclass of ``int``, this is
- non-breaking.
- - Deprecated the other fields in ``h2.errors``. These will be removed in 3.0.0.
- Bugfixes
- ~~~~~~~~
- - Correctly reject request header blocks with neither :authority nor Host
- headers, or header blocks which contain mismatched :authority and Host
- headers, per RFC 7540 Section 8.1.2.3.
- - Correctly expect that responses to HEAD requests will have no body regardless
- of the value of the Content-Length header, and reject those that do.
- - Correctly refuse to send header blocks that contain neither :authority nor
- Host headers, or header blocks which contain mismatched :authority and Host
- headers, per RFC 7540 Section 8.1.2.3.
- - Hyper-h2 will now reject header field names and values that contain leading
- or trailing whitespace.
- - Correctly strip leading/trailing whitespace from header field names and
- values.
- - Correctly refuse to send header blocks with a TE header whose value is not
- ``trailers``, per RFC 7540 Section 8.1.2.2.
- - Correctly refuse to send header blocks with connection-specific headers,
- per RFC 7540 Section 8.1.2.2.
- - Correctly refuse to send header blocks that contain duplicate pseudo-header
- fields, or with pseudo-header fields that appear after ordinary header fields,
- per RFC 7540 Section 8.1.2.1.
- This may cause passing a dictionary as the header block to ``send_headers``
- to throw a ``ProtocolError``, because dictionaries are unordered and so they
- may trip this check. Passing dictionaries here is deprecated, and callers
- should change to using a sequence of 2-tuples as their header blocks.
- - Correctly reject trailers that contain HTTP/2 pseudo-header fields, per RFC
- 7540 Section 8.1.2.1.
- - Correctly refuse to send trailers that contain HTTP/2 pseudo-header fields,
- per RFC 7540 Section 8.1.2.1.
- - Correctly reject responses that do not contain the ``:status`` header field,
- per RFC 7540 Section 8.1.2.4.
- - Correctly refuse to send responses that do not contain the ``:status`` header
- field, per RFC 7540 Section 8.1.2.4.
- - Correctly update the maximum frame size when the user updates the value of
- that setting. Prior to this release, if the user updated the maximum frame
- size hyper-h2 would ignore the update, preventing the remote peer from using
- the higher frame sizes.
- 2.4.2 (2016-10-25)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Correctly update the maximum frame size when the user updates the value of
- that setting. Prior to this release, if the user updated the maximum frame
- size hyper-h2 would ignore the update, preventing the remote peer from using
- the higher frame sizes.
- 2.3.3 (2016-10-25)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Correctly update the maximum frame size when the user updates the value of
- that setting. Prior to this release, if the user updated the maximum frame
- size hyper-h2 would ignore the update, preventing the remote peer from using
- the higher frame sizes.
- 2.2.7 (2016-10-25)
- ------------------
- *Final 2.2.X release*
- Bugfixes
- ~~~~~~~~
- - Correctly update the maximum frame size when the user updates the value of
- that setting. Prior to this release, if the user updated the maximum frame
- size hyper-h2 would ignore the update, preventing the remote peer from using
- the higher frame sizes.
- 2.4.1 (2016-08-23)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Correctly expect that responses to HEAD requests will have no body regardless
- of the value of the Content-Length header, and reject those that do.
- 2.3.2 (2016-08-23)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Correctly expect that responses to HEAD requests will have no body regardless
- of the value of the Content-Length header, and reject those that do.
- 2.4.0 (2016-07-01)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Adds ``additional_data`` to ``H2Connection.close_connection``, allowing the
- user to send additional debug data on the GOAWAY frame.
- - Adds ``last_stream_id`` to ``H2Connection.close_connection``, allowing the
- user to manually control what the reported last stream ID is.
- - Add new method: ``prioritize``.
- - Add support for emitting stream priority information when sending headers
- frames using three new keyword arguments: ``priority_weight``,
- ``priority_depends_on``, and ``priority_exclusive``.
- - Add support for "related events": events that fire simultaneously on a single
- frame.
- 2.3.1 (2016-05-12)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Resolved ``AttributeError`` encountered when receiving more than one sequence
- of CONTINUATION frames on a given connection.
- 2.2.5 (2016-05-12)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Resolved ``AttributeError`` encountered when receiving more than one sequence
- of CONTINUATION frames on a given connection.
- 2.3.0 (2016-04-26)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added a new flag to the ``H2Connection`` constructor: ``header_encoding``,
- that controls what encoding is used (if any) to decode the headers from bytes
- to unicode. This defaults to UTF-8 for backward compatibility. To disable the
- decode and use bytes exclusively, set the field to False, None, or the empty
- string. This affects all headers, including those pushed by servers.
- - Bumped the minimum version of HPACK allowed from 2.0 to 2.2.
- - Added support for advertising RFC 7838 Alternative services.
- - Allowed users to provide ``hpack.HeaderTuple`` and
- ``hpack.NeverIndexedHeaderTuple`` objects to all methods that send headers.
- - Changed all events that carry headers to emit ``hpack.HeaderTuple`` and
- ``hpack.NeverIndexedHeaderTuple`` instead of plain tuples. This allows users
- to maintain header indexing state.
- - Added support for plaintext upgrade with the ``initiate_upgrade_connection``
- method.
- Bugfixes
- ~~~~~~~~
- - Automatically ensure that all ``Authorization`` and ``Proxy-Authorization``
- headers, as well as short ``Cookie`` headers, are prevented from being added
- to encoding contexts.
- 2.2.4 (2016-04-25)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Correctly forbid pseudo-headers that were not defined in RFC 7540.
- - Ignore AltSvc frames, rather than exploding when receiving them.
- 2.1.5 (2016-04-25)
- ------------------
- *Final 2.1.X release*
- Bugfixes
- ~~~~~~~~
- - Correctly forbid pseudo-headers that were not defined in RFC 7540.
- - Ignore AltSvc frames, rather than exploding when receiving them.
- 2.2.3 (2016-04-13)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Allowed the 4.X series of hyperframe releases as dependencies.
- 2.1.4 (2016-04-13)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Allowed the 4.X series of hyperframe releases as dependencies.
- 2.2.2 (2016-04-05)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Fixed issue where informational responses were erroneously not allowed to be
- sent in the ``HALF_CLOSED_REMOTE`` state.
- - Fixed issue where informational responses were erroneously not allowed to be
- received in the ``HALF_CLOSED_LOCAL`` state.
- - Fixed issue where we allowed information responses to be sent or received
- after final responses.
- 2.2.1 (2016-03-23)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Fixed issue where users using locales that did not default to UTF-8 were
- unable to install source distributions of the package.
- 2.2.0 (2016-03-23)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added support for sending informational responses (responses with 1XX status)
- codes as part of the standard flow. HTTP/2 allows zero or more informational
- responses with no upper limit: hyper-h2 does too.
- - Added support for receiving informational responses (responses with 1XX
- status) codes as part of the standard flow. HTTP/2 allows zero or more
- informational responses with no upper limit: hyper-h2 does too.
- - Added a new event: ``ReceivedInformationalResponse``. This response is fired
- when informational responses (those with 1XX status codes).
- - Added an ``additional_data`` field to the ``ConnectionTerminated`` event that
- carries any additional data sent on the GOAWAY frame. May be ``None`` if no
- such data was sent.
- - Added the ``initial_values`` optional argument to the ``Settings`` object.
- Bugfixes
- ~~~~~~~~
- - Correctly reject all of the connection-specific headers mentioned in RFC 7540
- § 8.1.2.2, not just the ``Connection:`` header.
- - Defaulted the value of ``SETTINGS_MAX_CONCURRENT_STREAMS`` to 100, unless
- explicitly overridden. This is a safe defensive initial value for this
- setting.
- 2.1.3 (2016-03-16)
- ------------------
- Deprecations
- ~~~~~~~~~~~~
- - Passing dictionaries to ``send_headers`` as the header block is deprecated,
- and will be removed in 3.0.
- 2.1.2 (2016-02-17)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Reject attempts to push streams on streams that were themselves pushed:
- streams can only be pushed on streams that were initiated by the client.
- - Correctly allow CONTINUATION frames to extend the header block started by a
- PUSH_PROMISE frame.
- - Changed our handling of frames received on streams that were reset by the
- user.
- Previously these would, at best, cause ProtocolErrors to be raised and the
- connection to be torn down (rather defeating the point of resetting streams
- at all) and, at worst, would cause subtle inconsistencies in state between
- hyper-h2 and the remote peer that could lead to header block decoding errors
- or flow control blockages.
- Now when the user resets a stream all further frames received on that stream
- are ignored except where they affect some form of connection-level state,
- where they have their effect and are then ignored.
- - Fixed a bug whereby receiving a PUSH_PROMISE frame on a stream that was
- closed would cause a RST_STREAM frame to be emitted on the closed-stream,
- but not the newly-pushed one. Now this causes a ``ProtocolError``.
- 2.1.1 (2016-02-05)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Added debug representations for all events.
- - Fixed problems with setup.py that caused trouble on older setuptools/pip
- installs.
- 2.1.0 (2016-02-02)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added new field to ``DataReceived``: ``flow_controlled_length``. This is the
- length of the frame including padded data, allowing users to correctly track
- changes to the flow control window.
- - Defined new ``UnsupportedFrameError``, thrown when frames that are known to
- hyperframe but not supported by hyper-h2 are received. For
- backward-compatibility reasons, this is a ``ProtocolError`` *and* a
- ``KeyError``.
- Bugfixes
- ~~~~~~~~
- - Hyper-h2 now correctly accounts for padding when maintaining flow control
- windows.
- - Resolved a bug where hyper-h2 would mistakenly apply
- SETTINGS_INITIAL_WINDOW_SIZE to the connection flow control window in
- addition to the stream-level flow control windows.
- - Invalid Content-Length headers now throw ``ProtocolError`` exceptions and
- correctly tear the connection down, instead of leaving the connection in an
- indeterminate state.
- - Invalid header blocks now throw ``ProtocolError``, rather than a grab bag of
- possible other exceptions.
- 2.0.0 (2016-01-25)
- ------------------
- API Changes (Breaking)
- ~~~~~~~~~~~~~~~~~~~~~~
- - Attempts to open streams with invalid stream IDs, either by the remote peer
- or by the user, are now rejected as a ``ProtocolError``. Previously these
- were allowed, and would cause remote peers to error.
- - Receiving frames that have invalid padding now causes the connection to be
- terminated with a ``ProtocolError`` being raised. Previously these passed
- undetected.
- - Settings values set by both the user and the remote peer are now validated
- when they're set. If they're invalid, a new ``InvalidSettingsValueError`` is
- raised and, if set by the remote peer, a connection error is signaled.
- Previously, it was possible to set invalid values. These would either be
- caught when building frames, or would be allowed to stand.
- - Settings changes no longer require user action to be acknowledged: hyper-h2
- acknowledges them automatically. This moves the location where some
- exceptions may be thrown, and also causes the ``acknowledge_settings`` method
- to be removed from the public API.
- - Removed a number of methods on the ``H2Connection`` object from the public,
- semantically versioned API, by renaming them to have leading underscores.
- Specifically, removed:
- - ``get_stream_by_id``
- - ``get_or_create_stream``
- - ``begin_new_stream``
- - ``receive_frame``
- - ``acknowledge_settings``
- - Added full support for receiving CONTINUATION frames, including policing
- logic about when and how they are received. Previously, receiving
- CONTINUATION frames was not supported and would throw exceptions.
- - All public API functions on ``H2Connection`` except for ``receive_data`` no
- longer return lists of events, because these lists were always empty. Events
- are now only raised by ``receive_data``.
- - Calls to ``increment_flow_control_window`` with out of range values now raise
- ``ValueError`` exceptions. Previously they would be allowed, or would cause
- errors when serializing frames.
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added ``PriorityUpdated`` event for signaling priority changes.
- - Added ``get_next_available_stream_id`` function.
- - Receiving DATA frames on streams not in the OPEN or HALF_CLOSED_LOCAL states
- now causes a stream reset, rather than a connection reset. The error is now
- also classified as a ``StreamClosedError``, rather than a more generic
- ``ProtocolError``.
- - Receiving HEADERS or PUSH_PROMISE frames in the HALF_CLOSED_REMOTE state now
- causes a stream reset, rather than a connection reset.
- - Receiving frames that violate the max frame size now causes connection errors
- with error code FRAME_SIZE_ERROR, not a generic PROTOCOL_ERROR. This
- condition now also raises a ``FrameTooLargeError``, a new subclass of
- ``ProtocolError``.
- - Made ``NoSuchStreamError`` a subclass of ``ProtocolError``.
- - The ``StreamReset`` event is now also fired whenever a protocol error from
- the remote peer forces a stream to close early. This is only fired once.
- - The ``StreamReset`` event now carries a flag, ``remote_reset``, that is set
- to ``True`` in all cases where ``StreamReset`` would previously have fired
- (e.g. when the remote peer sent a RST_STREAM), and is set to ``False`` when
- it fires because the remote peer made a protocol error.
- - Hyper-h2 now rejects attempts by peers to increment a flow control window by
- zero bytes.
- - Hyper-h2 now rejects peers sending header blocks that are ill-formed for a
- number of reasons as set out in RFC 7540 Section 8.1.2.
- - Attempting to send non-PRIORITY frames on closed streams now raises
- ``StreamClosedError``.
- - Remote peers attempting to increase the flow control window beyond
- ``2**31 - 1``, either by window increment or by settings frame, are now
- rejected as ``ProtocolError``.
- - Local attempts to increase the flow control window beyond ``2**31 - 1`` by
- window increment are now rejected as ``ProtocolError``.
- - The bytes that represent individual settings are now available in
- ``h2.settings``, instead of needing users to import them from hyperframe.
- Bugfixes
- ~~~~~~~~
- - RFC 7540 requires that a separate minimum stream ID be used for inbound and
- outbound streams. Hyper-h2 now obeys this requirement.
- - Hyper-h2 now does a better job of reporting the last stream ID it has
- partially handled when terminating connections.
- - Fixed an error in the arguments of ``StreamIDTooLowError``.
- - Prevent ``ValueError`` leaking from Hyperframe.
- - Prevent ``struct.error`` and ``InvalidFrameError`` leaking from Hyperframe.
- 1.1.1 (2015-11-17)
- ------------------
- Bugfixes
- ~~~~~~~~
- - Forcibly lowercase all header names to improve compatibility with
- implementations that demand lower-case header names.
- 1.1.0 (2015-10-28)
- ------------------
- API Changes (Backward-Compatible)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Added a new ``ConnectionTerminated`` event, which fires when GOAWAY frames
- are received.
- - Added a subclass of ``NoSuchStreamError``, called ``StreamClosedError``, that
- fires when actions are taken on a stream that is closed and has had its state
- flushed from the system.
- - Added ``StreamIDTooLowError``, raised when the user or the remote peer
- attempts to create a stream with an ID lower than one previously used in the
- dialog. Inherits from ``ValueError`` for backward-compatibility reasons.
- Bugfixes
- ~~~~~~~~
- - Do not throw ``ProtocolError`` when attempting to send multiple GOAWAY
- frames on one connection.
- - We no longer forcefully change the decoder table size when settings changes
- are ACKed, instead waiting for remote acknowledgement of the change.
- - Improve the performance of checking whether a stream is open.
- - We now attempt to lazily garbage collect closed streams, to avoid having the
- state hang around indefinitely, leaking memory.
- - Avoid further per-stream allocations, leading to substantial performance
- improvements when many short-lived streams are used.
- 1.0.0 (2015-10-15)
- ------------------
- - First production release!
|