From 60d62593545c8e2473d1c5c823c358d5db492085 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 12 Mar 2020 14:28:15 +0300 Subject: add b64 (base64) hook --- pkg/server/hook/b64.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pkg/server/hook/b64.go diff --git a/pkg/server/hook/b64.go b/pkg/server/hook/b64.go new file mode 100644 index 0000000..3c21474 --- /dev/null +++ b/pkg/server/hook/b64.go @@ -0,0 +1,52 @@ +package hook + +import ( + "encoding/base64" + "tunnel/pkg/netstring" + "tunnel/pkg/server/env" + "tunnel/pkg/server/opts" + "tunnel/pkg/server/queue" +) + +var b64Enc = base64.RawStdEncoding + +type b64Hook struct{} + +func (b64Hook) Send(rq, wq queue.Q) error { + e := netstring.NewEncoder(wq.Writer()) + + for b := range rq { + e.Encode(b64Enc.EncodeToString(b)) + } + + return nil +} + +func (b64Hook) Recv(rq, wq queue.Q) error { + d := netstring.NewDecoder(rq.Reader()) + + for { + s, err := d.Decode() + if err != nil { + return err + } + + if b, err := b64Enc.DecodeString(s); err != nil { + return err + } else { + wq <- b + } + } +} + +func (h b64Hook) Open(env.Env) (interface{}, error) { + return h, nil +} + +func newB64Hook(opts.Opts, env.Env) (hook, error) { + return b64Hook{}, nil +} + +func init() { + register("b64", newB64Hook) +} -- cgit v1.2.3-70-g09d2