package hook import ( "bufio" "strings" "tunnel/pkg/server/env" "tunnel/pkg/server/opts" "tunnel/pkg/server/queue" ) type lookHttpHook struct{} type lookHttp struct { env env.Env } func (look *lookHttp) Send(rq, wq queue.Q) error { q := queue.New() s := bufio.NewScanner(q.Reader()) go func() { for b := range rq { q <- b wq <- b } close(q) }() if s.Scan() { if w := strings.Split(s.Text(), " "); len(w) > 1 { switch m := strings.ToUpper(w[0]); m { case "CONNECT", "GET", "POST": look.env.Set("look.info", m+" "+w[1]) } } } q.Dry() return nil } func (look *lookHttp) Recv(rq, wq queue.Q) error { return queue.Copy(rq, wq) } func (lookHttpHook) Open(env env.Env) (interface{}, error) { return &lookHttp{env: env}, nil } func newLookHttpHook(opts opts.Opts, env env.Env) (hook, error) { return lookHttpHook{}, nil } func init() { register("look-http", newLookHttpHook) }