diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-03-12 14:28:15 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-03-12 18:55:50 +0300 |
| commit | 60d62593545c8e2473d1c5c823c358d5db492085 (patch) | |
| tree | d90f8695bc1b33e54fd9cb401247984e4b7ccaa7 /pkg/server/hook | |
| parent | 4043b758ddd8a760eb93821ec901b78f98908c3d (diff) | |
add b64 (base64) hook
Diffstat (limited to 'pkg/server/hook')
| -rw-r--r-- | pkg/server/hook/b64.go | 52 |
1 files changed, 52 insertions, 0 deletions
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) +} |
