added a new endpoint - /_ctl/server-routes
This commit is contained in:
parent
e01a6b347c
commit
41503373d3
@ -28,7 +28,7 @@ type json_in_client_conn struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_in_client_route struct {
|
type json_in_client_route struct {
|
||||||
Id RouteId `json:"id"` // 0 for auto-assignement.
|
RId RouteId `json:"route-id"` // 0 for auto-assignement.
|
||||||
ClientPeerAddr string `json:"client-peer-addr"`
|
ClientPeerAddr string `json:"client-peer-addr"`
|
||||||
ClientPeerName string `json:"client-peer-name"`
|
ClientPeerName string `json:"client-peer-name"`
|
||||||
ServerPeerOption string `json:"server-peer-option"`
|
ServerPeerOption string `json:"server-peer-option"`
|
||||||
@ -42,15 +42,15 @@ type json_in_client_route struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_in_client_route_update struct {
|
type json_in_client_route_update struct {
|
||||||
Lifetime string `sjon:"lifetime"`
|
Lifetime string `json:"lifetime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type json_out_client_conn_id struct {
|
type json_out_client_conn_id struct {
|
||||||
Id ConnId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type json_out_client_conn struct {
|
type json_out_client_conn struct {
|
||||||
Id ConnId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
ReqServerAddrs []string `json:"req-server-addrs"` // server addresses requested. may include a domain name
|
ReqServerAddrs []string `json:"req-server-addrs"` // server addresses requested. may include a domain name
|
||||||
CurrentServerIndex int `json:"current-server-index"`
|
CurrentServerIndex int `json:"current-server-index"`
|
||||||
ServerAddr string `json:"server-addr"` // actual server address
|
ServerAddr string `json:"server-addr"` // actual server address
|
||||||
@ -60,12 +60,13 @@ type json_out_client_conn struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_out_client_route_id struct {
|
type json_out_client_route_id struct {
|
||||||
Id RouteId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
CtsId ConnId `json:"conn-id"`
|
RId RouteId `json:"route-id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type json_out_client_route struct {
|
type json_out_client_route struct {
|
||||||
Id RouteId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
|
RId RouteId `json:"route-id"`
|
||||||
ClientPeerAddr string `json:"client-peer-addr"`
|
ClientPeerAddr string `json:"client-peer-addr"`
|
||||||
ClientPeerName string `json:"client-peer-name"`
|
ClientPeerName string `json:"client-peer-name"`
|
||||||
ServerPeerOption string `json:"server-peer-option"`
|
ServerPeerOption string `json:"server-peer-option"`
|
||||||
@ -80,7 +81,9 @@ type json_out_client_route struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_out_client_peer struct {
|
type json_out_client_peer struct {
|
||||||
Id PeerId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
|
RId RouteId `json:"route-id"`
|
||||||
|
PId PeerId `json:"peer-id"`
|
||||||
ClientPeerAddr string `json:"client-peer-addr"`
|
ClientPeerAddr string `json:"client-peer-addr"`
|
||||||
ClientLocalAddr string `json:"client-local-addr"`
|
ClientLocalAddr string `json:"client-local-addr"`
|
||||||
ServerPeerAddr string `json:"server-peer-addr"`
|
ServerPeerAddr string `json:"server-peer-addr"`
|
||||||
@ -252,7 +255,8 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
|
|
||||||
lftsta, lftdur = r.GetLifetimeInfo()
|
lftsta, lftdur = r.GetLifetimeInfo()
|
||||||
jsp = append(jsp, json_out_client_route{
|
jsp = append(jsp, json_out_client_route{
|
||||||
Id: r.Id,
|
CId: cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PeerAddr,
|
ClientPeerAddr: r.PeerAddr,
|
||||||
ClientPeerName: r.PeerName,
|
ClientPeerName: r.PeerName,
|
||||||
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
||||||
@ -265,7 +269,7 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
cts.route_mtx.Unlock()
|
cts.route_mtx.Unlock()
|
||||||
|
|
||||||
js = append(js, json_out_client_conn{
|
js = append(js, json_out_client_conn{
|
||||||
Id: cts.Id,
|
CId: cts.Id,
|
||||||
ReqServerAddrs: cts.cfg.ServerAddrs,
|
ReqServerAddrs: cts.cfg.ServerAddrs,
|
||||||
CurrentServerIndex: cts.cfg.Index,
|
CurrentServerIndex: cts.cfg.Index,
|
||||||
ServerAddr: cts.remote_addr.Get(),
|
ServerAddr: cts.remote_addr.Get(),
|
||||||
@ -306,7 +310,7 @@ func (ctl *client_ctl_client_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
goto oops
|
goto oops
|
||||||
} else {
|
} else {
|
||||||
status_code = WriteJsonRespHeader(w, http.StatusCreated)
|
status_code = WriteJsonRespHeader(w, http.StatusCreated)
|
||||||
if err = je.Encode(json_out_client_conn_id{Id: cts.Id}); err != nil { goto oops }
|
if err = je.Encode(json_out_client_conn_id{CId: cts.Id}); err != nil { goto oops }
|
||||||
}
|
}
|
||||||
|
|
||||||
case http.MethodDelete:
|
case http.MethodDelete:
|
||||||
@ -367,7 +371,8 @@ func (ctl *client_ctl_client_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
|||||||
|
|
||||||
lftsta, lftdur = r.GetLifetimeInfo()
|
lftsta, lftdur = r.GetLifetimeInfo()
|
||||||
jsp = append(jsp, json_out_client_route{
|
jsp = append(jsp, json_out_client_route{
|
||||||
Id: r.Id,
|
CId: cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PeerAddr,
|
ClientPeerAddr: r.PeerAddr,
|
||||||
ClientPeerName: r.PeerName,
|
ClientPeerName: r.PeerName,
|
||||||
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
||||||
@ -380,7 +385,7 @@ func (ctl *client_ctl_client_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
|||||||
cts.route_mtx.Unlock()
|
cts.route_mtx.Unlock()
|
||||||
|
|
||||||
js = &json_out_client_conn{
|
js = &json_out_client_conn{
|
||||||
Id: cts.Id,
|
CId: cts.Id,
|
||||||
ReqServerAddrs: cts.cfg.ServerAddrs,
|
ReqServerAddrs: cts.cfg.ServerAddrs,
|
||||||
CurrentServerIndex: cts.cfg.Index,
|
CurrentServerIndex: cts.cfg.Index,
|
||||||
ServerAddr: cts.remote_addr.Get(),
|
ServerAddr: cts.remote_addr.Get(),
|
||||||
@ -445,7 +450,8 @@ func (ctl *client_ctl_client_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
|||||||
|
|
||||||
lftsta, lftdur = r.GetLifetimeInfo()
|
lftsta, lftdur = r.GetLifetimeInfo()
|
||||||
jsp = append(jsp, json_out_client_route{
|
jsp = append(jsp, json_out_client_route{
|
||||||
Id: r.Id,
|
CId: r.cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PeerAddr,
|
ClientPeerAddr: r.PeerAddr,
|
||||||
ClientPeerName: r.PeerName,
|
ClientPeerName: r.PeerName,
|
||||||
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
||||||
@ -494,7 +500,7 @@ func (ctl *client_ctl_client_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = &ClientRouteConfig{
|
rc = &ClientRouteConfig{
|
||||||
Id: jcr.Id,
|
Id: jcr.RId,
|
||||||
PeerAddr: jcr.ClientPeerAddr,
|
PeerAddr: jcr.ClientPeerAddr,
|
||||||
PeerName: jcr.ClientPeerName,
|
PeerName: jcr.ClientPeerName,
|
||||||
Option: server_peer_option,
|
Option: server_peer_option,
|
||||||
@ -511,7 +517,7 @@ func (ctl *client_ctl_client_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
|||||||
goto oops
|
goto oops
|
||||||
} else {
|
} else {
|
||||||
status_code = WriteJsonRespHeader(w, http.StatusCreated)
|
status_code = WriteJsonRespHeader(w, http.StatusCreated)
|
||||||
if err = je.Encode(json_out_client_route_id{Id: r.Id, CtsId: r.cts.Id}); err != nil { goto oops }
|
if err = je.Encode(json_out_client_route_id{RId: r.Id, CId: r.cts.Id}); err != nil { goto oops }
|
||||||
}
|
}
|
||||||
|
|
||||||
case http.MethodDelete:
|
case http.MethodDelete:
|
||||||
@ -562,7 +568,8 @@ func (ctl *client_ctl_client_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
|
|||||||
|
|
||||||
lftsta, lftdur = r.GetLifetimeInfo()
|
lftsta, lftdur = r.GetLifetimeInfo()
|
||||||
err = je.Encode(json_out_client_route{
|
err = je.Encode(json_out_client_route{
|
||||||
Id: r.Id,
|
CId: r.cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PeerAddr,
|
ClientPeerAddr: r.PeerAddr,
|
||||||
ClientPeerName: r.PeerName,
|
ClientPeerName: r.PeerName,
|
||||||
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
||||||
@ -649,7 +656,8 @@ func (ctl *client_ctl_client_conns_id_routes_spsp) ServeHTTP(w http.ResponseWrit
|
|||||||
|
|
||||||
lftsta, lftdur = r.GetLifetimeInfo()
|
lftsta, lftdur = r.GetLifetimeInfo()
|
||||||
err = je.Encode(json_out_client_route{
|
err = je.Encode(json_out_client_route{
|
||||||
Id: r.Id,
|
CId: r.cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PeerAddr,
|
ClientPeerAddr: r.PeerAddr,
|
||||||
ClientPeerName: r.PeerName,
|
ClientPeerName: r.PeerName,
|
||||||
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
ServerPeerSvcAddr: r.ServerPeerSvcAddr,
|
||||||
@ -738,7 +746,9 @@ func (ctl *client_ctl_client_conns_id_routes_id_peers) ServeHTTP(w http.Response
|
|||||||
|
|
||||||
p = r.ptc_map[pi]
|
p = r.ptc_map[pi]
|
||||||
jcp = append(jcp, json_out_client_peer{
|
jcp = append(jcp, json_out_client_peer{
|
||||||
Id: p.conn_id,
|
CId: r.cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
|
PId: p.conn_id,
|
||||||
ClientPeerAddr: p.conn.RemoteAddr().String(),
|
ClientPeerAddr: p.conn.RemoteAddr().String(),
|
||||||
ClientLocalAddr: p.conn.LocalAddr().String(),
|
ClientLocalAddr: p.conn.LocalAddr().String(),
|
||||||
ServerPeerAddr: p.pts_raddr,
|
ServerPeerAddr: p.pts_raddr,
|
||||||
@ -795,7 +805,9 @@ func (ctl *client_ctl_client_conns_id_routes_id_peers_id) ServeHTTP(w http.Respo
|
|||||||
var jcp *json_out_client_peer
|
var jcp *json_out_client_peer
|
||||||
|
|
||||||
jcp = &json_out_client_peer{
|
jcp = &json_out_client_peer{
|
||||||
Id: p.conn_id,
|
CId: p.route.cts.Id,
|
||||||
|
RId: p.route.Id,
|
||||||
|
PId: p.conn_id,
|
||||||
ClientPeerAddr: p.conn.RemoteAddr().String(),
|
ClientPeerAddr: p.conn.RemoteAddr().String(),
|
||||||
ClientLocalAddr: p.conn.LocalAddr().String(),
|
ClientLocalAddr: p.conn.LocalAddr().String(),
|
||||||
ServerPeerAddr: p.pts_raddr,
|
ServerPeerAddr: p.pts_raddr,
|
||||||
|
@ -23,7 +23,7 @@ type json_out_token struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_out_server_conn struct {
|
type json_out_server_conn struct {
|
||||||
Id ConnId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
ServerAddr string `json:"server-addr"`
|
ServerAddr string `json:"server-addr"`
|
||||||
ClientAddr string `json:"client-addr"`
|
ClientAddr string `json:"client-addr"`
|
||||||
ClientToken string `json:"client-token"`
|
ClientToken string `json:"client-token"`
|
||||||
@ -32,7 +32,8 @@ type json_out_server_conn struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_out_server_route struct {
|
type json_out_server_route struct {
|
||||||
Id RouteId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
|
RId RouteId `json:"route-id"`
|
||||||
ClientPeerAddr string `json:"client-peer-addr"`
|
ClientPeerAddr string `json:"client-peer-addr"`
|
||||||
ClientPeerName string `json:"client-peer-name"`
|
ClientPeerName string `json:"client-peer-name"`
|
||||||
ServerPeerOption string `json:"server-peer-option"`
|
ServerPeerOption string `json:"server-peer-option"`
|
||||||
@ -42,7 +43,9 @@ type json_out_server_route struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type json_out_server_peer struct {
|
type json_out_server_peer struct {
|
||||||
Id PeerId `json:"id"`
|
CId ConnId `json:"conn-id"`
|
||||||
|
RId RouteId `json:"route-id"`
|
||||||
|
PId PeerId `json:"peer-id"`
|
||||||
ServerPeerAddr string `json:"server-peer-addr"`
|
ServerPeerAddr string `json:"server-peer-addr"`
|
||||||
ServerLocalAddr string `json:"server-local-addr"`
|
ServerLocalAddr string `json:"server-local-addr"`
|
||||||
ClientPeerAddr string `json:"client-peer-addr"`
|
ClientPeerAddr string `json:"client-peer-addr"`
|
||||||
@ -102,6 +105,10 @@ type server_ctl_server_conns_id_routes_id_peers_id struct {
|
|||||||
server_ctl
|
server_ctl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type server_ctl_server_routes struct {
|
||||||
|
server_ctl
|
||||||
|
}
|
||||||
|
|
||||||
type server_ctl_server_peers struct {
|
type server_ctl_server_peers struct {
|
||||||
server_ctl
|
server_ctl
|
||||||
}
|
}
|
||||||
@ -225,7 +232,8 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
var r *ServerRoute
|
var r *ServerRoute
|
||||||
r = cts.route_map[ri]
|
r = cts.route_map[ri]
|
||||||
jsp = append(jsp, json_out_server_route{
|
jsp = append(jsp, json_out_server_route{
|
||||||
Id: r.Id,
|
CId: cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PtcAddr,
|
ClientPeerAddr: r.PtcAddr,
|
||||||
ClientPeerName: r.PtcName,
|
ClientPeerName: r.PtcName,
|
||||||
ServerPeerSvcAddr: r.SvcAddr.String(),
|
ServerPeerSvcAddr: r.SvcAddr.String(),
|
||||||
@ -238,7 +246,7 @@ func (ctl *server_ctl_server_conns) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
js = append(js, json_out_server_conn{
|
js = append(js, json_out_server_conn{
|
||||||
Id: cts.Id,
|
CId: cts.Id,
|
||||||
ClientAddr: cts.RemoteAddr.String(),
|
ClientAddr: cts.RemoteAddr.String(),
|
||||||
ServerAddr: cts.LocalAddr.String(),
|
ServerAddr: cts.LocalAddr.String(),
|
||||||
ClientToken: cts.ClientToken.Get(),
|
ClientToken: cts.ClientToken.Get(),
|
||||||
@ -308,7 +316,8 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
|||||||
|
|
||||||
r = cts.route_map[ri]
|
r = cts.route_map[ri]
|
||||||
jsp = append(jsp, json_out_server_route{
|
jsp = append(jsp, json_out_server_route{
|
||||||
Id: r.Id,
|
CId: cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PtcAddr,
|
ClientPeerAddr: r.PtcAddr,
|
||||||
ClientPeerName: r.PtcName,
|
ClientPeerName: r.PtcName,
|
||||||
ServerPeerSvcAddr: r.SvcAddr.String(),
|
ServerPeerSvcAddr: r.SvcAddr.String(),
|
||||||
@ -320,7 +329,7 @@ func (ctl *server_ctl_server_conns_id) ServeHTTP(w http.ResponseWriter, req *htt
|
|||||||
cts.route_mtx.Unlock()
|
cts.route_mtx.Unlock()
|
||||||
}
|
}
|
||||||
js = &json_out_server_conn{
|
js = &json_out_server_conn{
|
||||||
Id: cts.Id,
|
CId: cts.Id,
|
||||||
ClientAddr: cts.RemoteAddr.String(),
|
ClientAddr: cts.RemoteAddr.String(),
|
||||||
ServerAddr: cts.LocalAddr.String(),
|
ServerAddr: cts.LocalAddr.String(),
|
||||||
ClientToken: cts.ClientToken.Get(),
|
ClientToken: cts.ClientToken.Get(),
|
||||||
@ -380,7 +389,8 @@ func (ctl *server_ctl_server_conns_id_routes) ServeHTTP(w http.ResponseWriter, r
|
|||||||
|
|
||||||
r = cts.route_map[ri]
|
r = cts.route_map[ri]
|
||||||
jsp = append(jsp, json_out_server_route{
|
jsp = append(jsp, json_out_server_route{
|
||||||
Id: r.Id,
|
CId: cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PtcAddr,
|
ClientPeerAddr: r.PtcAddr,
|
||||||
ClientPeerName: r.PtcName,
|
ClientPeerName: r.PtcName,
|
||||||
ServerPeerSvcAddr: r.SvcAddr.String(),
|
ServerPeerSvcAddr: r.SvcAddr.String(),
|
||||||
@ -468,7 +478,8 @@ func (ctl *server_ctl_server_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
|
|||||||
case http.MethodGet:
|
case http.MethodGet:
|
||||||
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
||||||
err = je.Encode(json_out_server_route{
|
err = je.Encode(json_out_server_route{
|
||||||
Id: r.Id,
|
CId: r.Cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
ClientPeerAddr: r.PtcAddr,
|
ClientPeerAddr: r.PtcAddr,
|
||||||
ClientPeerName: r.PtcName,
|
ClientPeerName: r.PtcName,
|
||||||
ServerPeerSvcAddr: r.SvcAddr.String(),
|
ServerPeerSvcAddr: r.SvcAddr.String(),
|
||||||
@ -533,7 +544,9 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers) ServeHTTP(w http.Response
|
|||||||
var p *ServerPeerConn
|
var p *ServerPeerConn
|
||||||
p = r.pts_map[pi]
|
p = r.pts_map[pi]
|
||||||
jcp = append(jcp, json_out_server_peer{
|
jcp = append(jcp, json_out_server_peer{
|
||||||
Id: p.conn_id,
|
CId: r.Cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
|
PId: p.conn_id,
|
||||||
ServerPeerAddr: p.conn.RemoteAddr().String(),
|
ServerPeerAddr: p.conn.RemoteAddr().String(),
|
||||||
ServerLocalAddr: p.conn.LocalAddr().String(),
|
ServerLocalAddr: p.conn.LocalAddr().String(),
|
||||||
ClientPeerAddr: p.client_peer_raddr.Get(),
|
ClientPeerAddr: p.client_peer_raddr.Get(),
|
||||||
@ -591,7 +604,9 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers_id) ServeHTTP(w http.Respo
|
|||||||
var jcp *json_out_server_peer
|
var jcp *json_out_server_peer
|
||||||
|
|
||||||
jcp = &json_out_server_peer{
|
jcp = &json_out_server_peer{
|
||||||
Id: p.conn_id,
|
CId: p.route.Cts.Id,
|
||||||
|
RId: p.route.Id,
|
||||||
|
PId: p.conn_id,
|
||||||
ServerPeerAddr: p.conn.RemoteAddr().String(),
|
ServerPeerAddr: p.conn.RemoteAddr().String(),
|
||||||
ServerLocalAddr: p.conn.LocalAddr().String(),
|
ServerLocalAddr: p.conn.LocalAddr().String(),
|
||||||
ClientPeerAddr: p.client_peer_raddr.Get(),
|
ClientPeerAddr: p.client_peer_raddr.Get(),
|
||||||
@ -613,6 +628,53 @@ func (ctl *server_ctl_server_conns_id_routes_id_peers_id) ServeHTTP(w http.Respo
|
|||||||
//done:
|
//done:
|
||||||
return status_code, nil
|
return status_code, nil
|
||||||
|
|
||||||
|
oops:
|
||||||
|
return status_code, err
|
||||||
|
}
|
||||||
|
// ------------------------------------
|
||||||
|
|
||||||
|
func (ctl *server_ctl_server_routes) ServeHTTP(w http.ResponseWriter, req *http.Request) (int, error) {
|
||||||
|
var s *Server
|
||||||
|
var status_code int
|
||||||
|
var je *json.Encoder
|
||||||
|
var err error
|
||||||
|
|
||||||
|
s = ctl.s
|
||||||
|
je = json.NewEncoder(w)
|
||||||
|
|
||||||
|
switch req.Method {
|
||||||
|
case http.MethodGet:
|
||||||
|
var js []json_out_server_route
|
||||||
|
var e *list.Element
|
||||||
|
|
||||||
|
js = make([]json_out_server_route, 0)
|
||||||
|
s.route_mtx.Lock()
|
||||||
|
for e = s.route_list.Front(); e != nil; e = e.Next() {
|
||||||
|
var r *ServerRoute
|
||||||
|
r = e.Value.(*ServerRoute)
|
||||||
|
js = append(js, json_out_server_route{
|
||||||
|
CId: r.Cts.Id,
|
||||||
|
RId: r.Id,
|
||||||
|
ClientPeerAddr: r.PtcAddr,
|
||||||
|
ClientPeerName: r.PtcName,
|
||||||
|
ServerPeerSvcAddr: r.SvcAddr.String(),
|
||||||
|
ServerPeerSvcNet: r.SvcPermNet.String(),
|
||||||
|
ServerPeerOption: r.SvcOption.String(),
|
||||||
|
CreatedMilli: r.Created.UnixMilli(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
s.route_mtx.Unlock()
|
||||||
|
|
||||||
|
status_code = WriteJsonRespHeader(w, http.StatusOK)
|
||||||
|
if err = je.Encode(js); err != nil { goto oops }
|
||||||
|
|
||||||
|
default:
|
||||||
|
status_code = WriteEmptyRespHeader(w, http.StatusMethodNotAllowed)
|
||||||
|
}
|
||||||
|
|
||||||
|
//done:
|
||||||
|
return status_code, nil
|
||||||
|
|
||||||
oops:
|
oops:
|
||||||
return status_code, err
|
return status_code, err
|
||||||
}
|
}
|
||||||
@ -629,18 +691,18 @@ func (ctl *server_ctl_server_peers) ServeHTTP(w http.ResponseWriter, req *http.R
|
|||||||
|
|
||||||
switch req.Method {
|
switch req.Method {
|
||||||
case http.MethodGet:
|
case http.MethodGet:
|
||||||
var js []ServerEventPeerAdded
|
var js []json_out_server_peer
|
||||||
var e *list.Element
|
var e *list.Element
|
||||||
|
|
||||||
js = make([]ServerEventPeerAdded, 0)
|
js = make([]json_out_server_peer, 0)
|
||||||
s.pts_mtx.Lock()
|
s.pts_mtx.Lock()
|
||||||
for e = s.pts_list.Front(); e != nil; e = e.Next() {
|
for e = s.pts_list.Front(); e != nil; e = e.Next() {
|
||||||
var pts *ServerPeerConn
|
var pts *ServerPeerConn
|
||||||
pts = e.Value.(*ServerPeerConn)
|
pts = e.Value.(*ServerPeerConn)
|
||||||
js = append(js, ServerEventPeerAdded{ // TODO: rename or create an alias type?
|
js = append(js, json_out_server_peer{
|
||||||
Conn: pts.route.Cts.Id,
|
CId: pts.route.Cts.Id,
|
||||||
Route: pts.route.Id,
|
RId: pts.route.Id,
|
||||||
Peer: pts.conn_id,
|
PId: pts.conn_id,
|
||||||
ServerPeerAddr: pts.conn.RemoteAddr().String(),
|
ServerPeerAddr: pts.conn.RemoteAddr().String(),
|
||||||
ServerLocalAddr: pts.conn.LocalAddr().String(),
|
ServerLocalAddr: pts.conn.LocalAddr().String(),
|
||||||
ClientPeerAddr: pts.client_peer_raddr.Get(),
|
ClientPeerAddr: pts.client_peer_raddr.Get(),
|
||||||
|
17
server.go
17
server.go
@ -175,6 +175,9 @@ type Server struct {
|
|||||||
pts_mtx sync.Mutex
|
pts_mtx sync.Mutex
|
||||||
pts_list *list.List
|
pts_list *list.List
|
||||||
|
|
||||||
|
route_mtx sync.Mutex
|
||||||
|
route_list *list.List
|
||||||
|
|
||||||
log Logger
|
log Logger
|
||||||
conn_notice_handlers []ServerConnNoticeHandler
|
conn_notice_handlers []ServerConnNoticeHandler
|
||||||
|
|
||||||
@ -223,6 +226,8 @@ type ServerRoute struct {
|
|||||||
Id RouteId
|
Id RouteId
|
||||||
Created time.Time
|
Created time.Time
|
||||||
|
|
||||||
|
node_in_server *list.Element
|
||||||
|
|
||||||
svc_l *net.TCPListener
|
svc_l *net.TCPListener
|
||||||
SvcAddr *net.TCPAddr // actual listening address
|
SvcAddr *net.TCPAddr // actual listening address
|
||||||
SvcReqAddr string
|
SvcReqAddr string
|
||||||
@ -430,6 +435,11 @@ func (r *ServerRoute) RunTask(wg *sync.WaitGroup) {
|
|||||||
|
|
||||||
r.Cts.RemoveServerRoute(r) // final phase...
|
r.Cts.RemoveServerRoute(r) // final phase...
|
||||||
|
|
||||||
|
r.Cts.S.route_mtx.Lock()
|
||||||
|
r.Cts.S.route_list.Remove(r.node_in_server)
|
||||||
|
r.node_in_server = nil
|
||||||
|
r.Cts.S.route_mtx.Unlock()
|
||||||
|
|
||||||
r.Cts.S.bulletin.Enqueue(
|
r.Cts.S.bulletin.Enqueue(
|
||||||
&ServerEvent{
|
&ServerEvent{
|
||||||
Kind: SERVER_EVENT_ROUTE_DELETED,
|
Kind: SERVER_EVENT_ROUTE_DELETED,
|
||||||
@ -574,6 +584,10 @@ func (cts *ServerConn) AddNewServerRoute(route_id RouteId, proto RouteOption, pt
|
|||||||
cts.S.stats.routes.Add(1)
|
cts.S.stats.routes.Add(1)
|
||||||
cts.route_mtx.Unlock()
|
cts.route_mtx.Unlock()
|
||||||
|
|
||||||
|
cts.S.route_mtx.Lock()
|
||||||
|
r.node_in_server = cts.S.route_list.PushBack(r)
|
||||||
|
cts.S.route_mtx.Unlock()
|
||||||
|
|
||||||
cts.S.bulletin.Enqueue(
|
cts.S.bulletin.Enqueue(
|
||||||
&ServerEvent{
|
&ServerEvent{
|
||||||
Kind: SERVER_EVENT_ROUTE_ADDED,
|
Kind: SERVER_EVENT_ROUTE_ADDED,
|
||||||
@ -1363,6 +1377,7 @@ func NewServer(ctx context.Context, name string, logger Logger, cfg *ServerConfi
|
|||||||
s.ext_svcs = make([]Service, 0, 1)
|
s.ext_svcs = make([]Service, 0, 1)
|
||||||
s.pts_limit = cfg.MaxPeers
|
s.pts_limit = cfg.MaxPeers
|
||||||
s.pts_list = list.New()
|
s.pts_list = list.New()
|
||||||
|
s.route_list = list.New()
|
||||||
s.cts_limit = cfg.RpcMaxConns
|
s.cts_limit = cfg.RpcMaxConns
|
||||||
s.cts_next_id = 1
|
s.cts_next_id = 1
|
||||||
s.cts_map = make(ServerConnMap)
|
s.cts_map = make(ServerConnMap)
|
||||||
@ -1400,6 +1415,8 @@ func NewServer(ctx context.Context, name string, logger Logger, cfg *ServerConfi
|
|||||||
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-conns/{conn_id}/routes/{route_id}/peers/{peer_id}",
|
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-conns/{conn_id}/routes/{route_id}/peers/{peer_id}",
|
||||||
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers_id{server_ctl{s: &s, id: HS_ID_CTL}}))
|
s.WrapHttpHandler(&server_ctl_server_conns_id_routes_id_peers_id{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||||
|
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-routes",
|
||||||
|
s.WrapHttpHandler(&server_ctl_server_routes{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-peers",
|
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/server-peers",
|
||||||
s.WrapHttpHandler(&server_ctl_server_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
s.WrapHttpHandler(&server_ctl_server_peers{server_ctl{s: &s, id: HS_ID_CTL}}))
|
||||||
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/notices",
|
s.ctl_mux.Handle(s.Cfg.CtlPrefix + "/_ctl/notices",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user