-
Notifications
You must be signed in to change notification settings - Fork 0
/
http.go
64 lines (47 loc) · 1.13 KB
/
http.go
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package http
import (
"net"
"net/http"
"strconv"
"github.com/costinm/meshauth"
)
// WIP: Normal http listener for a gateway.
//
// Most of the gate is concerned with L4 and L4S - routing on a hostname or VIP.
//
//
type HttpRoutes struct {
PortRoutes map[string]*ListenerRoutes
TargetHandlers map[string]http.Handler
}
type ListenerRoutes struct {
Listener *meshauth.PortListener
DefaultRoute *HttpRoute
Routes map[string]*HttpRoute `json:"routes,omitempty"`
Mux *http.ServeMux
}
type HttpRoute struct {
// Listener
ParentRef string
// ForwardTo where to forward the proxied connections.
// Used for accepting on a dedicated port. Will be set as MeshCluster in
// the stream, can be mesh node.
// host:port format.
ForwardTo string `json:"forwardTo,omitempty"`
}
func (ug *ListenerRoutes) FindRoutePrefix(dstaddr net.IP, p uint16, prefix string) *HttpRoute {
port := ":" + strconv.Itoa(int(p))
l := ug.Routes[prefix+dstaddr.String()+port]
if l != nil {
return l
}
l = ug.Routes[prefix+port]
if l != nil {
return l
}
l = ug.Routes[prefix+"-"+port]
if l != nil {
return l
}
return ug.DefaultRoute
}