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  }