diff --git a/code/client/conn/send_code.go b/code/client/conn/send_code.go index 9192dd5..e19d4ef 100644 --- a/code/client/conn/send_code.go +++ b/code/client/conn/send_code.go @@ -32,7 +32,7 @@ func (conn *Conn) SendCodeRequest(to, linkID string, requestID uint64, RequestId: requestID, Method: method, Uri: uri, - Body: body, + Body: dup(body), Header: makeCodeHeader(header), }, } @@ -87,7 +87,7 @@ func (conn *Conn) SendCodeResponseBody(to, linkID string, requestID uint64, RequestId: requestID, Index: idx, Mask: mask, - Body: data, + Body: dup(data), }, } select { diff --git a/code/client/conn/send_shell.go b/code/client/conn/send_shell.go index feb67b5..91c1756 100644 --- a/code/client/conn/send_shell.go +++ b/code/client/conn/send_shell.go @@ -9,11 +9,6 @@ import ( // SendShellData send shell data func (conn *Conn) SendShellData(to string, id string, data []byte) uint64 { - dup := func(data []byte) []byte { - ret := make([]byte, len(data)) - copy(ret, data) - return ret - } var msg network.Msg msg.To = to msg.XType = network.Msg_shell_data diff --git a/code/client/conn/send_vnc.go b/code/client/conn/send_vnc.go index 218be67..1603fc7 100644 --- a/code/client/conn/send_vnc.go +++ b/code/client/conn/send_vnc.go @@ -10,11 +10,6 @@ import ( // SendVNCImage send vnc image data func (conn *Conn) SendVNCImage(to string, id string, screen, rect image.Rectangle, encode network.VncImageEncoding, data []byte) { - dup := func(data []byte) []byte { - ret := make([]byte, len(data)) - copy(ret, data) - return ret - } var msg network.Msg msg.To = to msg.XType = network.Msg_vnc_image diff --git a/code/client/conn/utils.go b/code/client/conn/utils.go new file mode 100644 index 0000000..fe8ce12 --- /dev/null +++ b/code/client/conn/utils.go @@ -0,0 +1,7 @@ +package conn + +func dup(data []byte) []byte { + ret := make([]byte, len(data)) + copy(ret, data) + return ret +} diff --git a/code/client/rule/code/h_forward_request.go b/code/client/rule/code/h_forward_request.go index 260ce69..d9660c5 100644 --- a/code/client/rule/code/h_forward_request.go +++ b/code/client/rule/code/h_forward_request.go @@ -2,15 +2,12 @@ package code import ( "bytes" - "compress/gzip" "fmt" "io" - "io/ioutil" "net/http" "github.com/lwch/logging" "github.com/lwch/natpass/code/network" - "github.com/lwch/runtime" ) func (code *Code) handleRequest(workspace *Workspace, w http.ResponseWriter, r *http.Request) { @@ -20,8 +17,6 @@ func (code *Code) handleRequest(workspace *Workspace, w http.ResponseWriter, r * http.Error(w, err.Error(), http.StatusBadGateway) return } - logging.Info("send request [%s] [%s] successed, request_id=%d", - workspace.id, workspace.name, reqID) defer workspace.closeMessage(reqID) resp := workspace.onResponse(reqID) if resp == nil { @@ -30,8 +25,6 @@ func (code *Code) handleRequest(workspace *Workspace, w http.ResponseWriter, r * http.Error(w, "no response", http.StatusInternalServerError) return } - logging.Info("wait response [%s] [%s] successed, request_id=%d", - workspace.id, workspace.name, reqID) if resp.GetXType() != network.Msg_code_response_hdr { logging.Error("got invalid message type [%s] [%s]: %s", @@ -50,7 +43,6 @@ func (code *Code) handleRequest(workspace *Workspace, w http.ResponseWriter, r * w.WriteHeader(int(hdr.GetCode())) var idx uint32 - var buf []byte for { msg := workspace.onResponse(reqID) if msg == nil { @@ -75,22 +67,12 @@ func (code *Code) handleRequest(workspace *Workspace, w http.ResponseWriter, r * http.Error(w, fmt.Sprintf("read error: %s", string(resp.GetBody())), http.StatusResetContent) return } - buf = append(buf, resp.GetBody()...) - // _, err = buf.Write(resp.GetBody()) - // if err != nil { - // logging.Error("write body: %v", err) - // return - // } + _, err = io.Copy(w, bytes.NewReader(resp.GetBody())) + if err != nil { + logging.Error("write body: %v", err) + return + } if resp.GetMask()&2 > 0 { - _, err = io.Copy(w, bytes.NewReader(buf)) - if err != nil { - logging.Info("header: %s", hdr.String()) - r, err := gzip.NewReader(bytes.NewReader(buf)) - runtime.Assert(err) - data, err := ioutil.ReadAll(r) - runtime.Assert(err) - logging.Error("write body: %v\n%s", err, string(data)) - } return } idx++ diff --git a/code/client/rule/code/workspace_local_request.go b/code/client/rule/code/workspace_local_request.go index 06e4ded..85ef5b1 100644 --- a/code/client/rule/code/workspace_local_request.go +++ b/code/client/rule/code/workspace_local_request.go @@ -17,7 +17,7 @@ func (ws *Workspace) SendRequest(r *http.Request) (uint64, error) { return 0, err } ws.Lock() - ws.onMessage[reqID] = make(chan *network.Msg) + ws.onMessage[reqID] = make(chan *network.Msg, 1024) ws.Unlock() send := ws.remote.SendCodeRequest(ws.target, ws.id, reqID, r.Method, r.URL.RequestURI(), body, r.Header) diff --git a/go.sum b/go.sum index c95efc7..6fa1e6e 100644 --- a/go.sum +++ b/go.sum @@ -49,8 +49,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49 h1:TMjZDarEwf621XDryfitp/8awEhiZNiwgphKlTMGRIg= golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=