github.com/AntonOrnatskyi/goproxy@v0.0.0-20190205095733-4526a9fa18b4/core/lib/transport/compress.go (about) 1 package transport 2 3 import ( 4 "net" 5 "time" 6 7 "github.com/golang/snappy" 8 ) 9 10 func NewCompStream(conn net.Conn) *CompStream { 11 c := new(CompStream) 12 c.conn = conn 13 c.w = snappy.NewBufferedWriter(conn) 14 c.r = snappy.NewReader(conn) 15 return c 16 } 17 func NewCompConn(conn net.Conn) net.Conn { 18 c := CompStream{} 19 c.conn = conn 20 c.w = snappy.NewBufferedWriter(conn) 21 c.r = snappy.NewReader(conn) 22 return &c 23 } 24 25 type CompStream struct { 26 net.Conn 27 conn net.Conn 28 w *snappy.Writer 29 r *snappy.Reader 30 } 31 32 func (c *CompStream) Read(p []byte) (n int, err error) { 33 return c.r.Read(p) 34 } 35 36 func (c *CompStream) Write(p []byte) (n int, err error) { 37 n, err = c.w.Write(p) 38 err = c.w.Flush() 39 return n, err 40 } 41 42 func (c *CompStream) Close() (err error) { 43 err = c.conn.Close() 44 c.r = nil 45 c.w = nil 46 return 47 } 48 func (c *CompStream) LocalAddr() net.Addr { 49 return c.conn.LocalAddr() 50 } 51 func (c *CompStream) RemoteAddr() net.Addr { 52 return c.conn.RemoteAddr() 53 } 54 func (c *CompStream) SetDeadline(t time.Time) error { 55 return c.conn.SetDeadline(t) 56 } 57 func (c *CompStream) SetReadDeadline(t time.Time) error { 58 return c.conn.SetReadDeadline(t) 59 } 60 func (c *CompStream) SetWriteDeadline(t time.Time) error { 61 return c.conn.SetWriteDeadline(t) 62 }