File: middlewares.go

package info (click to toggle)
golang-github-vulcand-oxy 2.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 728 kB
  • sloc: makefile: 14
file content (32 lines) | stat: -rw-r--r-- 816 bytes parent folder | download
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)
}