diff --git a/heff/http.go b/heff/http.go index 717fbc3..bbcc44f 100644 --- a/heff/http.go +++ b/heff/http.go @@ -7,26 +7,30 @@ import ( "sync" ) -var pool sync.Pool +var DefaultHoneypot = NewHoneypot(DefaultMarkovMap, 100*1<<10) -func getBuffer() []byte { - x := pool.Get() - if buf, ok := x.([]byte); ok { - return buf - } else { - return make([]byte, 100*1<<10) +func NewHoneypot(mm MarkovMap, buffsize int) http.HandlerFunc { + var pool sync.Pool + + getBuffer := func() []byte { + x := pool.Get() + if buf, ok := x.([]byte); ok { + return buf + } else { + return make([]byte, buffsize) + } + } + + putBuffer := func(buf []byte) { + pool.Put(buf) + } + + return func(w http.ResponseWriter, r *http.Request) { + log.Printf("Started writing: %v", r.URL) + buf := getBuffer() + defer putBuffer(buf) + io.WriteString(w, "\n\n") + n, err := io.CopyBuffer(w, DefaultMarkovMap, buf) + log.Printf("Wrote: %d (%v)", n, err) } } - -func putBuffer(buf []byte) { - pool.Put(buf) -} - -func Honeypot(w http.ResponseWriter, r *http.Request) { - log.Printf("Started writing: %v", r.URL) - buf := getBuffer() - defer putBuffer(buf) - io.WriteString(w, "\n\n") - n, err := io.CopyBuffer(w, DefaultMarkovMap, buf) - log.Printf("Wrote: %d (%v)", n, err) -} diff --git a/heffalump.go b/heffalump.go index bec1f6b..346af81 100644 --- a/heffalump.go +++ b/heffalump.go @@ -37,7 +37,7 @@ func main() { path = "/" } - http.HandleFunc(path, heff.Honeypot) + http.HandleFunc(path, heff.DefaultHoneypot) log.Fatal(http.ListenAndServe(addr, nil))