1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
package forward
import (
"net/http"
"net/url"
)
// Connection states.
const (
StateConnected = iota
StateDisconnected
)
// URLForwardingStateListener URL forwarding state listener.
type URLForwardingStateListener func(*url.URL, int)
// StateListener listens on state change for urls.
type StateListener struct {
next http.Handler
stateListener URLForwardingStateListener
}
// NewStateListener creates a new StateListener middleware.
func NewStateListener(next http.Handler, stateListener URLForwardingStateListener) *StateListener {
return &StateListener{next: next, stateListener: stateListener}
}
func (s *StateListener) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
s.stateListener(req.URL, StateConnected)
s.next.ServeHTTP(rw, req)
s.stateListener(req.URL, StateDisconnected)
}
|