conn.go 974 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package v2rayhttp
  2. import (
  3. "io"
  4. "net"
  5. "net/http"
  6. "os"
  7. "time"
  8. "github.com/sagernet/sing/common"
  9. )
  10. type HTTPConn struct {
  11. reader io.Reader
  12. writer io.Writer
  13. }
  14. func (c *HTTPConn) Read(b []byte) (n int, err error) {
  15. return c.reader.Read(b)
  16. }
  17. func (c *HTTPConn) Write(b []byte) (n int, err error) {
  18. return c.writer.Write(b)
  19. }
  20. func (c *HTTPConn) Close() error {
  21. return common.Close(c.reader, c.writer)
  22. }
  23. func (c *HTTPConn) LocalAddr() net.Addr {
  24. return nil
  25. }
  26. func (c *HTTPConn) RemoteAddr() net.Addr {
  27. return nil
  28. }
  29. func (c *HTTPConn) SetDeadline(t time.Time) error {
  30. return os.ErrInvalid
  31. }
  32. func (c *HTTPConn) SetReadDeadline(t time.Time) error {
  33. return os.ErrInvalid
  34. }
  35. func (c *HTTPConn) SetWriteDeadline(t time.Time) error {
  36. return os.ErrInvalid
  37. }
  38. type ServerHTTPConn struct {
  39. HTTPConn
  40. flusher http.Flusher
  41. }
  42. func (c *ServerHTTPConn) Write(b []byte) (n int, err error) {
  43. n, err = c.writer.Write(b)
  44. if err == nil {
  45. c.flusher.Flush()
  46. }
  47. return
  48. }