chunk.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include <util/stream/output.h>
  3. #include <util/generic/maybe.h>
  4. #include <util/generic/ptr.h>
  5. class THttpHeaders;
  6. /// @addtogroup Streams_Chunked
  7. /// @{
  8. /// Ввод данных порциями.
  9. /// @details Последовательное чтение блоков данных. Предполагается, что
  10. /// данные записаны в виде <длина блока><блок данных>.
  11. class TChunkedInput: public IInputStream {
  12. public:
  13. /// Если передан указатель на trailers, то туда будут записаны HTTP trailer'ы (возможно пустые),
  14. /// которые идут после чанков.
  15. TChunkedInput(IInputStream* slave, TMaybe<THttpHeaders>* trailers = nullptr);
  16. ~TChunkedInput() override;
  17. private:
  18. size_t DoRead(void* buf, size_t len) override;
  19. size_t DoSkip(size_t len) override;
  20. private:
  21. class TImpl;
  22. THolder<TImpl> Impl_;
  23. };
  24. /// Вывод данных порциями.
  25. /// @details Вывод данных блоками в виде <длина блока><блок данных>. Если объем
  26. /// данных превышает 64K, они записываются в виде n блоков по 64K + то, что осталось.
  27. class TChunkedOutput: public IOutputStream {
  28. public:
  29. TChunkedOutput(IOutputStream* slave);
  30. ~TChunkedOutput() override;
  31. private:
  32. void DoWrite(const void* buf, size_t len) override;
  33. void DoFlush() override;
  34. void DoFinish() override;
  35. private:
  36. class TImpl;
  37. THolder<TImpl> Impl_;
  38. };
  39. /// @}