transport.go 967 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package io
  2. import (
  3. "io"
  4. "github.com/v2ray/v2ray-core/common/alloc"
  5. )
  6. func RawReaderToChan(stream chan<- *alloc.Buffer, reader io.Reader) error {
  7. return ReaderToChan(stream, NewAdaptiveReader(reader))
  8. }
  9. // ReaderToChan dumps all content from a given reader to a chan by constantly reading it until EOF.
  10. func ReaderToChan(stream chan<- *alloc.Buffer, reader Reader) error {
  11. for {
  12. buffer, err := reader.Read()
  13. if buffer.Len() > 0 {
  14. stream <- buffer
  15. } else {
  16. buffer.Release()
  17. }
  18. if err != nil {
  19. return err
  20. }
  21. }
  22. }
  23. func ChanToRawWriter(writer io.Writer, stream <-chan *alloc.Buffer) error {
  24. return ChanToWriter(NewAdaptiveWriter(writer), stream)
  25. }
  26. // ChanToWriter dumps all content from a given chan to a writer until the chan is closed.
  27. func ChanToWriter(writer Writer, stream <-chan *alloc.Buffer) error {
  28. for buffer := range stream {
  29. err := writer.Write(buffer)
  30. buffer.Release()
  31. if err != nil {
  32. return err
  33. }
  34. }
  35. return nil
  36. }