diff options
Diffstat (limited to 'pkg/server/module/tee.go')
| -rw-r--r-- | pkg/server/module/tee.go | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/pkg/server/module/tee.go b/pkg/server/module/tee.go deleted file mode 100644 index 7953247..0000000 --- a/pkg/server/module/tee.go +++ /dev/null @@ -1,112 +0,0 @@ -package module - -import ( - "bytes" - "fmt" - "os" - "encoding/hex" - "sync" - "tunnel/pkg/server/env" - "tunnel/pkg/server/opts" - "tunnel/pkg/server/queue" -) - -const teeDefaultPath = "/tmp/tunnel.dump" - -type tee struct { - f *os.File - mu sync.Mutex - wg sync.WaitGroup -} - -type teeModule struct { - path string -} - -func (t *tee) dump(s string, p []byte) error { - var out bytes.Buffer - - fmt.Fprintln(&out, s, len(p)) - - w := hex.Dumper(&out) - w.Write(p) - w.Close() - - if _, err := t.f.Write(out.Bytes()); err != nil { - return err - } - - return nil -} - -func (t *tee) Send(rq, wq queue.Q) error { - defer t.wg.Done() - - for b := range rq { - t.dump(">", b) - wq <- b - } - - return nil -} - -func (t *tee) Recv(rq, wq queue.Q) error { - defer t.wg.Done() - - for b := range rq { - t.dump("<", b) - wq <- b - } - - return nil -} - -func (m *teeModule) where(env env.Env) string { - if m.path != "" { - return m.path - } - - if v := env.Eval("@{tunnel.@{tunnel}.tee.path}"); v != "" { - return v - } - - if v, ok := env.Find("module.tee.path"); ok { - return v - } - - return teeDefaultPath -} - -func (m *teeModule) Open(env env.Env) (interface{}, error) { - tid, sid := env.Get("tunnel"), env.Get("stream") - name := fmt.Sprintf("%s.%s.%s", m.where(env), tid, sid) - - var t tee - - if f, err := os.Create(name); err != nil { - return nil, err - } else { - t.f = f - } - - t.wg.Add(2) - - go func() { - t.wg.Wait() - t.f.Close() - }() - - return &t, nil -} - -func newTeeModule(opts opts.Opts, env env.Env) (module, error) { - m := &teeModule{} - if path, ok := opts["path"]; ok { - m.path = path - } - return m, nil -} - -func init() { - register("tee", newTeeModule) -} |
