forked from tslocum/twins
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.0 KiB
57 lines
1.0 KiB
package main |
|
|
|
import ( |
|
"bytes" |
|
"io" |
|
"io/ioutil" |
|
"net" |
|
"net/http" |
|
"net/url" |
|
|
|
"github.com/yookoala/gofast" |
|
) |
|
|
|
type responseWriter struct { |
|
io.WriteCloser |
|
header http.Header |
|
} |
|
|
|
func newResponseWriter(out io.WriteCloser) *responseWriter { |
|
return &responseWriter{ |
|
WriteCloser: out, |
|
header: make(http.Header), |
|
} |
|
} |
|
|
|
func (w *responseWriter) Header() http.Header { |
|
return w.header |
|
} |
|
|
|
func (w *responseWriter) WriteHeader(statusCode int) { |
|
// Do nothing |
|
} |
|
|
|
func serveFastCGI(c net.Conn, connFactory gofast.ConnFactory, u *url.URL, filePath string) { |
|
header := map[string][]string{ |
|
"Accept": {"*/*"}, |
|
"Host": {u.Hostname()}, |
|
} |
|
|
|
r := &http.Request{ |
|
Method: "GET", |
|
URL: u, |
|
Proto: "HTTP/1.1", |
|
ProtoMajor: 1, |
|
ProtoMinor: 1, |
|
Header: header, |
|
Body: ioutil.NopCloser(bytes.NewReader(nil)), |
|
Host: u.Host, |
|
} |
|
|
|
gofast. |
|
NewHandler( |
|
gofast.NewFileEndpoint(filePath)(gofast.BasicSession), |
|
gofast.SimpleClientFactory(connFactory, 0), |
|
). |
|
ServeHTTP(newResponseWriter(c), r) |
|
}
|
|
|