# Changes

## [3.9.2] - 2026-04-07

* Fix shutdown handling, could dead lock in edge cases

## [3.9.1] - 2026-03-08

* Resize buffer in blocks

## [3.9.0] - 2026-02-16

* SharedCfg is not Copy

## [3.8.0] - 2026-02-03

* Refactor Io filter management

## [3.7.0] - 2026-01-31

* Fix BufferCfg::resize_min()

* Drop Dispatcher

## [3.6.0] - 2026-01-29

* Deprecated Dispatcher

## [3.5.0] - 2026-01-21

* Set IoConfig ref lifetime

## [3.4.0] - 2026-01-17

* Updates ntex-codec and ntex-bytes usage

## [3.3.2] - 2026-01-08

* Add FilterCtx::io()

## [3.3.1] - 2025-12-18

* Add IoTaskStatus::ready() helper method

## [3.3.0] - 2025-12-17

* Upgrade to ntex-service v4

## [3.2.0] - 2025-12-16

* Shutdown service if readiness fails

## [3.1.1] - 2025-12-14

* Add fmt::Debug impl for RecvError

## [3.1.0] - 2025-12-14

* Remove RecvError::Stop and IoStatusUpdate::Stop

## [3.0.0-pre.0] - 2025-11-27

* New configuration subsystem

* Refactor io layer support

## [2.15.1] - 2025-11-12

* Resolve keep-alive handling for the dispatcher's idle state

## [2.15.0] - 2025-11-06

* Api for forcing keep-alive error

## [2.14.0] - 2025-07-20

* Add .add_filter() support to Io<Sealed>

## [2.13.3] - 2025-06-21

* Check io closed state

## [2.13.2] - 2025-05-22

* Improve buffer stack management

## [2.13.1] - 2025-05-21

* Make Readiness::merge() public

## [2.13.0] - 2025-05-21

* Refine `Filter` trait

* Allow to wrap io's filter

## [2.12.2] - 2025-05-19

* Pause on recv back-pressure

## [2.12.1] - 2025-05-08

* Fix filter shutdown handling

## [2.11.1] - 2025-03-20

* Add readiness check support

## [2.11.0] - 2025-03-10

* Add single io context

## [2.10.0] - 2025-02-26

* Impl Filter for Sealed #506

## [2.9.3] - 2025-01-21

* Allow to access io write destination buffer

## [2.9.2] - 2024-12-05

* Better error handling

## [2.9.1] - 2024-12-04

* Check service readiness for every turn

## [2.9.0] - 2024-12-04

* Use updated Service trait

## [2.8.3] - 2024-11-10

* Check service readiness once per decoded item

* Run un-readiness check in separate task

## [2.8.2] - 2024-11-05

* Do not rely on not_ready(), always check service readiness

## [2.8.1] - 2024-11-04

* Periodically check readiness

## [2.8.0] - 2024-11-04

* Use updated Service trait

## [2.7.1] - 2024-10-15

* Disconnect on error from service readiness check

## [2.7.0] - 2024-10-10

* Do not check readiness for dispatcher call

* Handle service readiness errors during shutdown in dispatcher

## [2.6.1] - 2024-10-07

* Return error for Io::poll_read_ready() if io is closed.

## [2.6.0] - 2024-10-07

* Return error for IoRef::write(), IoRef::with_write_buf(), Io::poll_flush() if io is closed.

## [2.5.0] - 2024-09-10

* Refactor async io support

## [2.3.1] - 2024-09-05

* Tune async io tasks support

## [2.3.0] - 2024-08-28

* Extend io task contexts, for "compio" runtime compatibility

## [2.2.0] - 2024-08-12

* Allow to notify dispatcher from IoRef

## [2.1.0] - 2024-07-30

* Optimize `Io` layout

## [2.0.0] - 2024-05-28

* Use async fn for Service::ready() and Service::shutdown()

## [1.2.0] - 2024-05-12

* Better write back-pressure handling

* Dispatcher optimization for handling first item

## [1.1.0] - 2024-05-01

* Add IoRef::notify_timeout() helper method

* Fix KeepAlive timeout handling in default dispatcher

## [1.0.2] - 2024-03-31

* Add IoRef::is_wr_backpressure() method

## [1.0.1] - 2024-02-05

* Add IoBoxed::take() method

## [1.0.0] - 2024-01-09

* Release

## [1.0.0-b.1] - 2024-01-08

* Remove FilterFactory trait and related utils

## [1.0.0-b.0] - 2024-01-07

* Use "async fn" in trait for Service definition

* Min timeout more than 1sec

## [0.3.17] - 2023-12-25

* Fix filter leak during Io drop

## [0.3.16] - 2023-12-14

* Better io tags handling

## [0.3.15] - 2023-12-12

* Add io tags for logging

* Stop dispatcher timers on memory pool pause

## [0.3.14] - 2023-12-10

* Fix KEEP-ALIVE timer handling

## [0.3.13] - 2023-12-02

* Optimize KEEP-ALIVE timer

## [0.3.12] - 2023-11-29

* Refactor io timers

* Tune logging

## [0.3.11] - 2023-11-25

* Fix keep-alive timeout handling

## [0.3.10] - 2023-11-23

* Refactor slow frame timeout handling

## [0.3.9] - 2023-11-21

* Remove slow frame timer if service is not ready

* Do not process data in Dispatcher from read buffer after disconnect

## [0.3.8] - 2023-11-17

* Remove useless logs

## [0.3.7] - 2023-11-12

* Handle io flush during write back-pressure

## [0.3.6] - 2023-11-11

* Add support for frame read timeout

* Add DispatcherConfig type

## [0.3.5] - 2023-11-03

* Add Io::force_ready_ready() and Io::poll_force_ready_ready() methods

## [0.3.3] - 2023-09-11

* Add missing fmt::Debug impls

## [0.3.2] - 2023-08-10

* Replace `PipelineCall` with `ServiceCall<'static, S, R>`

## [0.3.1] - 2023-06-23

* `PipelineCall` is static

## [0.3.0] - 2023-06-22

* Release v0.3.0

## [0.3.0-beta.3] - 2023-06-21

* Use static ContainerCall for dispatcher

## [0.3.0-beta.0] - 2023-06-16

* Migrate to ntex-service 1.2

## [0.2.10] - 2023-05-10

* ReadBuf::set_dst()/WriteBuf::set_dst() extend existing buffer if exists

## [0.2.9] - 2023-01-31

* Register Dispatcher waker when service is not ready

* Add Io::poll_read_pause() method, pauses read task and check io status

## [0.2.8] - 2023-01-30

* Check for nested io operations

## [0.2.7] - 2023-01-29

* Refactor buffer api

## [0.2.6] - 2023-01-27

* Add IoRef::with_rw_buf() helper

## [0.2.5] - 2023-01-27

* Custom panic message for nested buffer borrow

## [0.2.4] - 2023-01-26

* Refactor write task management

## [0.2.3] - 2023-01-25

* Optimize buffers layout

* Release empty buffers

## [0.2.2] - 2023-01-24

* Process write buffer if filter wrote to write buffer during reading

## [0.2.1] - 2023-01-23

* Refactor Io and Filter types

## [0.2.0] - 2023-01-04

* Release

## [0.2.0-beta.0] - 2022-12-28

* Upgrade to ntex-service 1.0

* Restart timer after runtime stop

## [0.1.11] - 2022-12-02

* Expose IoRef::start_keepalive_timer() and IoRef::remove_keepalive_timer() methods

## [0.1.10] - 2022-10-31

* Fix compilation errors in the openwrt environment #140

## [0.1.9] - 2022-10-03

* Fix on-disconnect never resolving #135

## [0.1.8] - 2022-02-19

* Add HttpProtocol type from ntex-tls

## [0.1.7] - 2022-01-30

* Use BytesVec type for buffers and Filter trait

## [0.1.6] - 2022-01-27

* Optimize Io memory layout

## [0.1.5] - 2022-01-23

* Add Eq,PartialEq,Hash,Debug impls to Io asn IoRef

## [0.1.4] - 2022-01-17

* Add Io::take() method

## [0.1.3] - 2022-01-12

* Refactor Filter trait, fix read buffer processing

## [0.1.2] - 2022-01-10

* Remove unneeded boxed types

* Add Framed::into_inner() helper method

## [0.1.1] - 2022-01-03

* Move tokio support to separate crate

* Move async-std support to separate crate

## [0.1.0] - 2021-12-30

* Unify keep-alive timers

* Add Io::poll_status_update() method to use instead of register_dispatcher()

* Reset DSP_STOP and DSP_KEEPALIVE flags

## [0.1.0-b.10] - 2021-12-30

* IoRef::close() method initiates io stream shutdown

* IoRef::force_close() method terminates io stream

* Cleanup Filter trait, removed closed,want_read,want_shutdown methods

* Cleanup internal flags on io error

## [0.1.0-b.9] - 2021-12-29

* Add `async-std` support

## [0.1.0-b.8] - 2021-12-28

* Fix error handing for nested filters

* Improve tokio streams support

## [0.1.0-b.7] - 2021-12-27

* Do not swallow decoded read bytes in case of filter error

## [0.1.0-b.6] - 2021-12-26

* Rename `RecvError::StopDispatcher` to `RecvError::Stop`

* Better error information for .poll_recv() method.

* Remove redundant Io::poll_write_backpressure() method.

* Add Framed type

* Fix read filters ordering

* Fix read filter root buffer

## [0.1.0-b.5] - 2021-12-24

* Use new ntex-service traits

* Make `IoBoxed` into spearate type

* Add `SealedService` and `SealedFactory` helpers

## [0.1.0-b.4] - 2021-12-23

* Introduce `Sealed` type instead of `Box<dyn Filter>`

## [0.1.0-b.3] - 2021-12-22

* Add .poll_write_backpressure()

* Rename .poll_read_next() to .poll_recv()

* Rename .poll_write_ready() to .poll_flush()

* Rename .next() to .recv()

* Rename .write_ready() to .flush()

* .poll_read_ready() cleanups RD_PAUSED state

## [0.1.0-b.2] - 2021-12-20

* Removed `WriteRef` and `ReadRef`

* Better Io/IoRef api separation

* DefaultFilter renamed to Base

## [0.1.0-b.1] - 2021-12-19

* Remove ReadFilter/WriteFilter traits.

## [0.1.0-b.0] - 2021-12-18

* Refactor ntex::framed to ntex-io
