summaryrefslogtreecommitdiff
path: root/pkg/server/hook/tee.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/hook/tee.go')
-rw-r--r--pkg/server/hook/tee.go21
1 files changed, 15 insertions, 6 deletions
diff --git a/pkg/server/hook/tee.go b/pkg/server/hook/tee.go
index 3f61b50..34b2eca 100644
--- a/pkg/server/hook/tee.go
+++ b/pkg/server/hook/tee.go
@@ -6,6 +6,8 @@ import (
"fmt"
"os"
"path"
+ "time"
+ "tunnel/pkg/config"
"tunnel/pkg/server/env"
"tunnel/pkg/server/opts"
"tunnel/pkg/server/queue"
@@ -15,16 +17,23 @@ const teeDefaultFile = "/tmp/tunnel/dump"
type tee struct {
f *os.File
+ h *teeHook
}
type teeHook struct {
file string
+ time bool
}
func (t *tee) dump(s string, p []byte) error {
var out bytes.Buffer
- fmt.Fprintln(&out, s, len(p))
+ if t.h.time {
+ now := time.Now().Format(config.TimeMsFormat)
+ fmt.Fprintln(&out, now, s, len(p))
+ } else {
+ fmt.Fprintln(&out, s, len(p))
+ }
w := hex.Dumper(&out)
w.Write(p)
@@ -82,7 +91,7 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) {
tid, sid := env.Get("tunnel"), env.Get("stream")
name := fmt.Sprintf("%s.%s.%s", file, tid, sid)
- var t tee
+ t := &tee{h: h}
if f, err := os.Create(name); err != nil {
return nil, err
@@ -90,13 +99,13 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) {
t.f = f
}
- return &t, nil
+ return t, nil
}
func newTeeHook(opts opts.Opts) (hook, error) {
- h := &teeHook{}
- if file, ok := opts["file"]; ok {
- h.file = file
+ h := &teeHook{
+ file: opts["file"],
+ time: opts.Bool("time"),
}
return h, nil
}