serverconn.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // +build !confonly
  2. package encoding
  3. import (
  4. "bytes"
  5. "context"
  6. "io"
  7. "net"
  8. "time"
  9. )
  10. type ServerConn struct {
  11. server GunService_TunServer
  12. reader io.Reader
  13. over context.CancelFunc
  14. }
  15. func (s *ServerConn) Read(b []byte) (n int, err error) {
  16. if s.reader == nil {
  17. h, err := s.server.Recv()
  18. if err != nil {
  19. return 0, newError("unable to read from gun tunnel").Base(err)
  20. }
  21. s.reader = bytes.NewReader(h.Data)
  22. }
  23. n, err = s.reader.Read(b)
  24. if err == io.EOF {
  25. s.reader = nil
  26. return n, nil
  27. }
  28. return n, err
  29. }
  30. func (s *ServerConn) Write(b []byte) (n int, err error) {
  31. err = s.server.Send(&Hunk{Data: b})
  32. if err != nil {
  33. return 0, newError("Unable to send data over gun").Base(err)
  34. }
  35. return len(b), nil
  36. }
  37. func (s *ServerConn) Close() error {
  38. s.over()
  39. return nil
  40. }
  41. func (*ServerConn) LocalAddr() net.Addr {
  42. return nil
  43. }
  44. func (*ServerConn) RemoteAddr() net.Addr {
  45. newError("gun transport do not support get remote address").AtWarning().WriteToLog()
  46. return &net.UnixAddr{
  47. Name: "@placeholder",
  48. Net: "unix",
  49. }
  50. }
  51. func (*ServerConn) SetDeadline(time.Time) error {
  52. return nil
  53. }
  54. func (*ServerConn) SetReadDeadline(time.Time) error {
  55. return nil
  56. }
  57. func (*ServerConn) SetWriteDeadline(time.Time) error {
  58. return nil
  59. }
  60. func NewServerConn(server GunService_TunServer, over context.CancelFunc) *ServerConn {
  61. return &ServerConn{
  62. server: server,
  63. reader: nil,
  64. over: over,
  65. }
  66. }