package hook import ( "bufio" "tunnel/pkg/http" "tunnel/pkg/server/env" "tunnel/pkg/server/queue" ) type infoHttpHook struct{} type infoHttp struct { env env.Env } func (info *infoHttp) 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 method, uri, _, ok := http.ParseRequestLine(s.Text()); ok { info.env.Set("info", method+" "+uri) } } q.Dry() return nil } func (info *infoHttp) Recv(rq, wq queue.Q) error { return queue.Copy(rq, wq) } func (infoHttpHook) New(env env.Env) (interface{}, error) { return &infoHttp{env: env}, nil } func init() { register("info-http", infoHttpHook{}) }