package hook import ( "encoding/base64" "tunnel/pkg/netstring" "tunnel/pkg/server/queue" ) var b64Enc = base64.RawStdEncoding type b64Pipe struct{} func (b64Pipe) Send(rq, wq queue.Q) error { e := netstring.NewEncoder(wq.Writer()) for b := range rq { e.Encode(b64Enc.EncodeToString(b)) } return nil } func (b64Pipe) 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 init() { registerPipe("b64", "base64 filter out/in", b64Pipe{}) }