some code touch-up
This commit is contained in:
parent
22542537bf
commit
ea56287eb4
20
hodu.go
20
hodu.go
@ -186,3 +186,23 @@ func write_empty_resp_header(w http.ResponseWriter, status_code int) int {
|
|||||||
w.WriteHeader(status_code)
|
w.WriteHeader(status_code)
|
||||||
return status_code
|
return status_code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func server_route_to_proxy_info(r *ServerRoute) *ServerRouteProxyInfo {
|
||||||
|
return &ServerRouteProxyInfo{
|
||||||
|
SvcOption: r.SvcOption,
|
||||||
|
PtcName: r.PtcName,
|
||||||
|
PtcAddr: r.PtcAddr,
|
||||||
|
SvcAddr: r.SvcAddr,
|
||||||
|
SvcPermNet: r.SvcPermNet,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func proxy_info_to_server_route(pi *ServerRouteProxyInfo) *ServerRoute {
|
||||||
|
return &ServerRoute{
|
||||||
|
SvcOption: pi.SvcOption,
|
||||||
|
PtcName: pi.PtcName,
|
||||||
|
PtcAddr: pi.PtcAddr,
|
||||||
|
SvcAddr: pi.SvcAddr,
|
||||||
|
SvcPermNet: pi.SvcPermNet,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -286,16 +286,7 @@ func (ctl *server_ctl_server_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
|
|||||||
// currenly, this is invoked via wpx only for ssh from xterm.html
|
// currenly, this is invoked via wpx only for ssh from xterm.html
|
||||||
// ugly, but hard-code the type to "ssh" here for now...
|
// ugly, but hard-code the type to "ssh" here for now...
|
||||||
pi, err = ctl.s.wpx_foreign_port_proxy_maker("ssh", conn_id)
|
pi, err = ctl.s.wpx_foreign_port_proxy_maker("ssh", conn_id)
|
||||||
if err == nil {
|
if err == nil { r = proxy_info_to_server_route(pi) } // fake route
|
||||||
// fake route
|
|
||||||
r = &ServerRoute{
|
|
||||||
SvcOption: pi.SvcOption,
|
|
||||||
PtcName: pi.PtcName,
|
|
||||||
PtcAddr: pi.PtcAddr,
|
|
||||||
SvcAddr: pi.SvcAddr,
|
|
||||||
SvcPermNet: pi.SvcPermNet,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -198,7 +198,6 @@ func (pxy *server_proxy_http_main) get_route(req *http.Request, in_wpx_mode bool
|
|||||||
var r *ServerRoute
|
var r *ServerRoute
|
||||||
var pi *ServerRouteProxyInfo
|
var pi *ServerRouteProxyInfo
|
||||||
var path_prefix string
|
var path_prefix string
|
||||||
var is_foreign bool
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if in_wpx_mode { // for wpx
|
if in_wpx_mode { // for wpx
|
||||||
@ -221,24 +220,14 @@ func (pxy *server_proxy_http_main) get_route(req *http.Request, in_wpx_mode bool
|
|||||||
// call this callback only in the wpx mode
|
// call this callback only in the wpx mode
|
||||||
pi, err = pxy.s.wpx_foreign_port_proxy_maker("http", conn_id)
|
pi, err = pxy.s.wpx_foreign_port_proxy_maker("http", conn_id)
|
||||||
if err != nil { return nil, err }
|
if err != nil { return nil, err }
|
||||||
|
|
||||||
pi.PathPrefix = path_prefix
|
|
||||||
pi.ConnId = conn_id
|
|
||||||
pi.RouteId = conn_id
|
|
||||||
pi.IsForeign = true // just to ensure this
|
pi.IsForeign = true // just to ensure this
|
||||||
} else {
|
} else {
|
||||||
pi = &ServerRouteProxyInfo{
|
pi = server_route_to_proxy_info(r)
|
||||||
SvcOption: r.SvcOption,
|
pi.IsForeign = false
|
||||||
PtcAddr: r.PtcAddr,
|
|
||||||
PtcName: r.PtcName,
|
|
||||||
SvcAddr: r.SvcAddr,
|
|
||||||
SvcPermNet: r.SvcPermNet,
|
|
||||||
PathPrefix: path_prefix,
|
|
||||||
ConnId: conn_id,
|
|
||||||
RouteId: route_id,
|
|
||||||
IsForeign: is_foreign,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
pi.PathPrefix = path_prefix
|
||||||
|
pi.ConnId = conn_id
|
||||||
|
pi.RouteId = route_id
|
||||||
|
|
||||||
return pi, nil
|
return pi, nil
|
||||||
}
|
}
|
||||||
@ -344,7 +333,7 @@ func (pxy *server_proxy_http_main) req_to_proxy_url (req *http.Request, r *Serve
|
|||||||
|
|
||||||
func (pxy *server_proxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Request) (int, error) {
|
func (pxy *server_proxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Request) (int, error) {
|
||||||
var s *Server
|
var s *Server
|
||||||
var r *ServerRouteProxyInfo
|
var pi *ServerRouteProxyInfo
|
||||||
var status_code int
|
var status_code int
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var in_wpx_mode bool
|
var in_wpx_mode bool
|
||||||
@ -359,26 +348,26 @@ func (pxy *server_proxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Re
|
|||||||
s = pxy.s
|
s = pxy.s
|
||||||
in_wpx_mode = (pxy.prefix == PORT_ID_MARKER)
|
in_wpx_mode = (pxy.prefix == PORT_ID_MARKER)
|
||||||
|
|
||||||
r, err = pxy.get_route(req, in_wpx_mode)
|
pi, err = pxy.get_route(req, in_wpx_mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status_code = write_empty_resp_header(w, http.StatusNotFound)
|
status_code = write_empty_resp_header(w, http.StatusNotFound)
|
||||||
goto oops
|
goto oops
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if r.SvcOption & (RouteOption(ROUTE_OPTION_HTTP) | RouteOption(ROUTE_OPTION_HTTPS)) == 0 {
|
if pi.SvcOption & (RouteOption(ROUTE_OPTION_HTTP) | RouteOption(ROUTE_OPTION_HTTPS)) == 0 {
|
||||||
status_code = write_empty_resp_header(w, http.StatusForbidden)
|
status_code = write_empty_resp_header(w, http.StatusForbidden)
|
||||||
err = fmt.Errorf("target not http/https")
|
err = fmt.Errorf("target not http/https")
|
||||||
goto oops
|
goto oops
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
addr = svc_addr_to_dst_addr(r.SvcAddr)
|
addr = svc_addr_to_dst_addr(pi.SvcAddr)
|
||||||
transport, err = pxy.addr_to_transport(s.ctx, addr)
|
transport, err = pxy.addr_to_transport(s.ctx, addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status_code = write_empty_resp_header(w, http.StatusBadGateway)
|
status_code = write_empty_resp_header(w, http.StatusBadGateway)
|
||||||
goto oops
|
goto oops
|
||||||
}
|
}
|
||||||
proxy_url = pxy.req_to_proxy_url(req, r)
|
proxy_url = pxy.req_to_proxy_url(req, pi)
|
||||||
|
|
||||||
s.log.Write(pxy.id, LOG_INFO, "[%s] %s %s -> %+v", req.RemoteAddr, req.Method, req.URL.String(), proxy_url)
|
s.log.Write(pxy.id, LOG_INFO, "[%s] %s %s -> %+v", req.RemoteAddr, req.Method, req.URL.String(), proxy_url)
|
||||||
|
|
||||||
@ -387,7 +376,7 @@ func (pxy *server_proxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Re
|
|||||||
status_code = write_empty_resp_header(w, http.StatusInternalServerError)
|
status_code = write_empty_resp_header(w, http.StatusInternalServerError)
|
||||||
goto oops
|
goto oops
|
||||||
}
|
}
|
||||||
upgrade_required = mutate_proxy_req_headers(req, proxy_req, r.PathPrefix, in_wpx_mode)
|
upgrade_required = mutate_proxy_req_headers(req, proxy_req, pi.PathPrefix, in_wpx_mode)
|
||||||
|
|
||||||
if in_wpx_mode {
|
if in_wpx_mode {
|
||||||
proxy_req.Header.Set("Accept-Encoding", "")
|
proxy_req.Header.Set("Accept-Encoding", "")
|
||||||
@ -420,7 +409,7 @@ func (pxy *server_proxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Re
|
|||||||
resp_body = resp.Body
|
resp_body = resp.Body
|
||||||
|
|
||||||
if in_wpx_mode && s.wpx_resp_tf != nil {
|
if in_wpx_mode && s.wpx_resp_tf != nil {
|
||||||
resp_body = s.wpx_resp_tf(r, resp)
|
resp_body = s.wpx_resp_tf(pi, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
outhdr = w.Header()
|
outhdr = w.Header()
|
||||||
@ -672,13 +661,7 @@ func (pxy *server_proxy_ssh_ws) ServeWebsocket(ws *websocket.Conn) {
|
|||||||
// some pointer fields are nil. extra care needs to be taken
|
// some pointer fields are nil. extra care needs to be taken
|
||||||
// below to ensure it doesn't access undesired fields when exitending
|
// below to ensure it doesn't access undesired fields when exitending
|
||||||
// code further
|
// code further
|
||||||
r = &ServerRoute{
|
r = proxy_info_to_server_route(pi)
|
||||||
SvcOption: pi.SvcOption,
|
|
||||||
PtcName: pi.PtcName,
|
|
||||||
PtcAddr: pi.PtcAddr,
|
|
||||||
SvcAddr: pi.SvcAddr,
|
|
||||||
SvcPermNet: pi.SvcPermNet,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
pxy.send_ws_data(ws, "error", err.Error())
|
pxy.send_ws_data(ws, "error", err.Error())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user