mirror of
https://github.com/lwch/natpass.git
synced 2024-04-21 12:41:54 +00:00
修正转发问题
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package conn
|
||||
|
||||
func dup(data []byte) []byte {
|
||||
ret := make([]byte, len(data))
|
||||
copy(ret, data)
|
||||
return ret
|
||||
}
|
||||
@@ -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++
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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=
|
||||
|
||||
Reference in New Issue
Block a user