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) }