chunk.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. protected:
  32. void DoWrite(const void* buf, size_t len) override;
  33. private:
  34. void DoFlush() override;
  35. void DoFinish() override;
  36. private:
  37. class TImpl;
  38. THolder<TImpl> Impl_;
  39. };
  40. /// @}