mirror of
https://github.com/yunginnanet/HellPot
synced 2024-06-30 17:50:53 +00:00
Add documentation
This commit is contained in:
parent
77796bd6b3
commit
cfeee439d2
@ -7,8 +7,11 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DefaultHoneypot is an http.HandlerFunc that serves random HTML from the
|
||||||
|
// DefaultMarkovMap, 100KB at a time.
|
||||||
var DefaultHoneypot = NewHoneypot(DefaultMarkovMap, 100*1<<10)
|
var DefaultHoneypot = NewHoneypot(DefaultMarkovMap, 100*1<<10)
|
||||||
|
|
||||||
|
// NewHoneypot creates an http.HandlerFunc from a MarkovMap
|
||||||
func NewHoneypot(mm MarkovMap, buffsize int) http.HandlerFunc {
|
func NewHoneypot(mm MarkovMap, buffsize int) http.HandlerFunc {
|
||||||
var pool sync.Pool
|
var pool sync.Pool
|
||||||
|
|
||||||
@ -16,9 +19,8 @@ func NewHoneypot(mm MarkovMap, buffsize int) http.HandlerFunc {
|
|||||||
x := pool.Get()
|
x := pool.Get()
|
||||||
if buf, ok := x.([]byte); ok {
|
if buf, ok := x.([]byte); ok {
|
||||||
return buf
|
return buf
|
||||||
} else {
|
|
||||||
return make([]byte, buffsize)
|
|
||||||
}
|
}
|
||||||
|
return make([]byte, buffsize)
|
||||||
}
|
}
|
||||||
|
|
||||||
putBuffer := func(buf []byte) {
|
putBuffer := func(buf []byte) {
|
||||||
|
@ -53,16 +53,20 @@ func ScanHTML(data []byte, atEOF bool) (advance int, token []byte, err error) {
|
|||||||
|
|
||||||
type tokenPair [2]string
|
type tokenPair [2]string
|
||||||
|
|
||||||
|
// DefaultMarkovMap is a Markov chain based on Src.
|
||||||
var DefaultMarkovMap = MakeMarkovMap(strings.NewReader(Src))
|
var DefaultMarkovMap = MakeMarkovMap(strings.NewReader(Src))
|
||||||
|
|
||||||
|
// MarkovMap is a map that acts as a Markov chain generator.
|
||||||
type MarkovMap map[tokenPair][]string
|
type MarkovMap map[tokenPair][]string
|
||||||
|
|
||||||
|
// MakeMarkovMap makes an empty MakeMarkov and fills it with r.
|
||||||
func MakeMarkovMap(r io.Reader) MarkovMap {
|
func MakeMarkovMap(r io.Reader) MarkovMap {
|
||||||
m := MarkovMap{}
|
m := MarkovMap{}
|
||||||
m.Fill(r)
|
m.Fill(r)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fill adds all the tokens in r to a MarkovMap
|
||||||
func (mm MarkovMap) Fill(r io.Reader) {
|
func (mm MarkovMap) Fill(r io.Reader) {
|
||||||
var w1, w2, w3 string
|
var w1, w2, w3 string
|
||||||
|
|
||||||
@ -77,11 +81,13 @@ func (mm MarkovMap) Fill(r io.Reader) {
|
|||||||
mm.Add(w1, w2, w3)
|
mm.Add(w1, w2, w3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add adds a three token sequence to the map.
|
||||||
func (mm MarkovMap) Add(w1, w2, w3 string) {
|
func (mm MarkovMap) Add(w1, w2, w3 string) {
|
||||||
p := tokenPair{w1, w2}
|
p := tokenPair{w1, w2}
|
||||||
mm[p] = append(mm[p], w3)
|
mm[p] = append(mm[p], w3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get psuedo-randomly chooses a possible suffix to w1 and w2.
|
||||||
func (mm MarkovMap) Get(w1, w2 string) string {
|
func (mm MarkovMap) Get(w1, w2 string) string {
|
||||||
p := tokenPair{w1, w2}
|
p := tokenPair{w1, w2}
|
||||||
suffix, ok := mm[p]
|
suffix, ok := mm[p]
|
||||||
@ -93,6 +99,7 @@ func (mm MarkovMap) Get(w1, w2 string) string {
|
|||||||
return suffix[r]
|
return suffix[r]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read fills p with data from calling Get on the MarkovMap.
|
||||||
func (mm MarkovMap) Read(p []byte) (n int, err error) {
|
func (mm MarkovMap) Read(p []byte) (n int, err error) {
|
||||||
var w1, w2, w3 string
|
var w1, w2, w3 string
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package heff
|
package heff
|
||||||
|
|
||||||
|
// Src is A. A. Milne's "Once on a Time" as transcribed by Project Gutenberg.
|
||||||
const Src = `<H1 ALIGN="center">
|
const Src = `<H1 ALIGN="center">
|
||||||
ONCE ON A TIME
|
ONCE ON A TIME
|
||||||
</H1>
|
</H1>
|
||||||
|
Loading…
Reference in New Issue
Block a user