commit
54593ff5c2
7 changed files with 21 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
|||
language: go
|
||||
|
||||
go: 1.3
|
||||
go: 1.4
|
||||
|
||||
before_install:
|
||||
- go get github.com/tools/godep
|
||||
|
|
12
Godeps/Godeps.json
generated
12
Godeps/Godeps.json
generated
|
@ -1,12 +1,7 @@
|
|||
{
|
||||
"ImportPath": "github.com/chihaya/chihaya",
|
||||
"GoVersion": "go1.3.3",
|
||||
"GoVersion": "go1.4.1",
|
||||
"Deps": [
|
||||
{
|
||||
"ImportPath": "code.google.com/p/go.net/netutil",
|
||||
"Comment": "null-164",
|
||||
"Rev": "6122c8c304675f19800c917359e02dd68e760a5b"
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/chihaya/bencode",
|
||||
"Rev": "1df51811f3440202aa39df93596654319ea5ff57"
|
||||
|
@ -34,6 +29,11 @@
|
|||
{
|
||||
"ImportPath": "github.com/stretchr/pat/stop",
|
||||
"Rev": "f7fe051f2b9bcaca162b38de4f93c9a8457160b9"
|
||||
},
|
||||
{
|
||||
"ImportPath": "golang.org/x/net/netutil",
|
||||
"Comment": "null-204",
|
||||
"Rev": "8fd8d3a0313cb59e495106ac76df5da29381fa24"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
2
Godeps/_workspace/.gitignore
generated
vendored
Normal file
2
Godeps/_workspace/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/pkg
|
||||
/bin
|
|
@ -32,7 +32,7 @@ use-cases).
|
|||
|
||||
## Building & Installing
|
||||
|
||||
Chihaya requires Go 1.3, [Godep], and a [Go environment] previously setup.
|
||||
Chihaya requires Go 1.4, [Godep], and a [Go environment] previously setup.
|
||||
|
||||
[Godep]: https://github.com/tools/godep
|
||||
[Go environment]: https://golang.org/doc/code.html
|
||||
|
|
13
http/http.go
13
http/http.go
|
@ -19,13 +19,17 @@ import (
|
|||
"github.com/chihaya/chihaya/tracker"
|
||||
)
|
||||
|
||||
// ResponseHandler is an HTTP handler that returns a status code.
|
||||
type ResponseHandler func(http.ResponseWriter, *http.Request, httprouter.Params) (int, error)
|
||||
|
||||
// Server represents an HTTP serving torrent tracker.
|
||||
type Server struct {
|
||||
config *config.Config
|
||||
tracker *tracker.Tracker
|
||||
}
|
||||
|
||||
// makeHandler wraps our ResponseHandlers while timing requests, collecting,
|
||||
// stats, logging, and handling errors.
|
||||
func makeHandler(handler ResponseHandler) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||
var msg string
|
||||
|
@ -63,6 +67,7 @@ func makeHandler(handler ResponseHandler) httprouter.Handle {
|
|||
}
|
||||
}
|
||||
|
||||
// newRouter returns a router with all the routes.
|
||||
func newRouter(s *Server) *httprouter.Router {
|
||||
r := httprouter.New()
|
||||
|
||||
|
@ -91,6 +96,8 @@ func newRouter(s *Server) *httprouter.Router {
|
|||
return r
|
||||
}
|
||||
|
||||
// connState is used by graceful in order to gracefully shutdown. It also
|
||||
// keeps track of connection stats.
|
||||
func (s *Server) connState(conn net.Conn, state http.ConnState) {
|
||||
switch state {
|
||||
case http.StateNew:
|
||||
|
@ -102,14 +109,16 @@ func (s *Server) connState(conn net.Conn, state http.ConnState) {
|
|||
case http.StateHijacked:
|
||||
panic("connection impossibly hijacked")
|
||||
|
||||
case http.StateActive: // Ignore.
|
||||
case http.StateIdle: // Ignore.
|
||||
// Ignore the following cases.
|
||||
case http.StateActive, http.StateIdle:
|
||||
|
||||
default:
|
||||
glog.Errorf("Connection transitioned to unknown state %s (%d)", state, state)
|
||||
}
|
||||
}
|
||||
|
||||
// Serve creates a new Server and proceeds to block while handling requests
|
||||
// until a graceful shutdown.
|
||||
func Serve(cfg *config.Config, tkr *tracker.Tracker) {
|
||||
srv := &Server{
|
||||
config: cfg,
|
||||
|
|
Loading…
Reference in a new issue