summaryrefslogtreecommitdiff
path: root/pkg/server/hook/hex.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/hook/hex.go')
-rw-r--r--pkg/server/hook/hex.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/pkg/server/hook/hex.go b/pkg/server/hook/hex.go
new file mode 100644
index 0000000..beaadeb
--- /dev/null
+++ b/pkg/server/hook/hex.go
@@ -0,0 +1,37 @@
+package hook
+
+import (
+ "encoding/hex"
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/opts"
+ "tunnel/pkg/server/queue"
+)
+
+type hexHook struct{}
+
+func (h hexHook) Send(rq, wq queue.Q) error {
+ enc := hex.NewEncoder(wq.Writer())
+
+ for b := range rq {
+ enc.Write(b)
+ }
+
+ return nil
+}
+
+func (h hexHook) Recv(rq, wq queue.Q) error {
+ r := hex.NewDecoder(rq.Reader())
+ return queue.IoCopy(r, wq.Writer())
+}
+
+func (h hexHook) Open(env.Env) (interface{}, error) {
+ return h, nil
+}
+
+func newHexHook(opts.Opts, env.Env) (hook, error) {
+ return hexHook{}, nil
+}
+
+func init() {
+ register("hex", newHexHook)
+}