From c55afd2de177f128fae6e1c52d0c56af17096258 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Sat, 29 Feb 2020 00:58:01 +0300 Subject: rename module to hook --- pkg/server/hook/zip.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pkg/server/hook/zip.go (limited to 'pkg/server/hook/zip.go') diff --git a/pkg/server/hook/zip.go b/pkg/server/hook/zip.go new file mode 100644 index 0000000..61264c9 --- /dev/null +++ b/pkg/server/hook/zip.go @@ -0,0 +1,55 @@ +package hook + +import ( + "compress/flate" + "io" + "tunnel/pkg/server/env" + "tunnel/pkg/server/opts" + "tunnel/pkg/server/queue" +) + +type zipHook struct{} + +func (m zipHook) Send(rq, wq queue.Q) error { + w, err := flate.NewWriter(wq.Writer(), flate.BestCompression) + if err != nil { + return err + } + + for b := range rq { + if _, err := w.Write(b); err != nil { + return err + } + if err := w.Flush(); err != nil { + return err + } + } + + return w.Close() +} + +func (m zipHook) Recv(rq, wq queue.Q) error { + r := flate.NewReader(rq.Reader()) + + // FIXME: not received ending due to ultimate conn.Close + if err := queue.IoCopy(r, wq.Writer()); err != nil { + if err == io.ErrUnexpectedEOF { + return nil + } + return err + } + + return r.Close() +} + +func (m zipHook) Open(env.Env) (interface{}, error) { + return m, nil +} + +func newZipHook(opts.Opts, env.Env) (hook, error) { + return zipHook{}, nil +} + +func init() { + register("zip", newZipHook) +} -- cgit v1.2.3-70-g09d2