mirror of
https://github.com/mjl-/mox.git
synced 2025-06-30 17:18:18 +03:00

to compress the entire IMAP connection. tested with thunderbird, meli, k9, ios mail. the initial implementation had interoperability issues with some of these clients: if they write the deflate stream and flush in "partial mode", the go stdlib flate reader does not return any data (until there is an explicit zero-length "sync flush" block, or until the history/sliding window is full), blocking progress, resulting in clients closing the seemingly stuck connection after considering the connection timed out. this includes a coy of the flate package with a new reader that returns partially flushed blocks earlier. this also adds imap trace logging to imapclient.Conn, which was useful for debugging.
https://pkg.go.dev/compress/flate from go1.24.0, with flate.NewReaderPartial added: a Reader that returns data from blocks flushed with mode "partial flush", without blocking on reading the next flate block. Without NewReaderPartial, protocols that expect a response after writing a short compressed request that was flushed in "partial flush" mode can get stuck.
Writes/flushes in "partial flush" mode are not implemented.