mirror of
https://gogs.blitter.com/RLabs/xs
synced 2024-08-14 10:26:42 +00:00
hkexcp: fixed copy chunked payload logic (now 2*32-1 MAX_PAYLOAD_LEN w/chunking)
This commit is contained in:
parent
c842d36319
commit
7295492aa3
2 changed files with 18 additions and 11 deletions
|
@ -42,6 +42,8 @@ const (
|
||||||
CSOChaff // Dummy packet, do not pass beyond decryption
|
CSOChaff // Dummy packet, do not pass beyond decryption
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
|
||||||
|
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -376,7 +378,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
|
||||||
// (on server side) err.Error() == "<iface/addr info ...>: use of closed network connection"
|
// (on server side) err.Error() == "<iface/addr info ...>: use of closed network connection"
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
||||||
log.Println("unexpected Read() err:", err)
|
log.Println("[1]unexpected Read() err:", err)
|
||||||
} else {
|
} else {
|
||||||
log.Println("[Client hung up]")
|
log.Println("[Client hung up]")
|
||||||
}
|
}
|
||||||
|
@ -386,7 +388,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
|
||||||
err = binary.Read(hc.c, binary.BigEndian, &payloadLen)
|
err = binary.Read(hc.c, binary.BigEndian, &payloadLen)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() != "EOF" {
|
if err.Error() != "EOF" {
|
||||||
log.Println("unexpected Read() err:", err)
|
log.Println("[2]unexpected Read() err:", err)
|
||||||
//panic(err)
|
//panic(err)
|
||||||
// Cannot just return 0, err here - client won't hang up properly
|
// Cannot just return 0, err here - client won't hang up properly
|
||||||
// when 'exit' from shell. TODO: try server sending ctrlStatOp to
|
// when 'exit' from shell. TODO: try server sending ctrlStatOp to
|
||||||
|
@ -394,7 +396,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if payloadLen > 8192 {
|
if payloadLen > MAX_PAYLOAD_LEN {
|
||||||
log.Printf("[Insane payloadLen:%v]\n", payloadLen)
|
log.Printf("[Insane payloadLen:%v]\n", payloadLen)
|
||||||
hc.Close()
|
hc.Close()
|
||||||
return 1, errors.New("Insane payloadLen")
|
return 1, errors.New("Insane payloadLen")
|
||||||
|
@ -409,7 +411,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
|
||||||
// (on server side) err.Error() == "<iface/addr info ...>: use of closed network connection"
|
// (on server side) err.Error() == "<iface/addr info ...>: use of closed network connection"
|
||||||
if err != nil && err.Error() != "EOF" {
|
if err != nil && err.Error() != "EOF" {
|
||||||
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
||||||
log.Println("unexpected Read() err:", err)
|
log.Println("[3]unexpected Read() err:", err)
|
||||||
} else {
|
} else {
|
||||||
log.Println("[Client hung up]")
|
log.Println("[Client hung up]")
|
||||||
}
|
}
|
||||||
|
@ -498,11 +500,15 @@ func (hc Conn) WritePacket(b []byte, op byte) (n int, err error) {
|
||||||
//
|
//
|
||||||
// Would be nice to determine if the mutex scope
|
// Would be nice to determine if the mutex scope
|
||||||
// could be tightened.
|
// could be tightened.
|
||||||
hc.m.Lock()
|
|
||||||
for uint32(len(b)) > 0 {
|
for uint32(len(b)) > 0 {
|
||||||
|
hc.m.Lock()
|
||||||
|
fmt.Printf("--== TOTAL payloadLen (b):%d\n", len(b))
|
||||||
payloadLen = uint32(len(b))
|
payloadLen = uint32(len(b))
|
||||||
if payloadLen > 8192 {
|
if payloadLen > MAX_PAYLOAD_LEN {
|
||||||
payloadLen = 8192
|
payloadLen = MAX_PAYLOAD_LEN
|
||||||
|
//fmt.Printf("--== payloadLen:%d\n", payloadLen)
|
||||||
|
} else {
|
||||||
|
//fmt.Printf("--== payloadLen:%d\n", payloadLen)
|
||||||
}
|
}
|
||||||
log.Printf(" :>ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen]))
|
log.Printf(" :>ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen]))
|
||||||
|
|
||||||
|
@ -521,7 +527,7 @@ func (hc Conn) WritePacket(b []byte, op byte) (n int, err error) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
log.Printf(" ->ctext:\r\n%s\r\n", hex.Dump(wb.Bytes()))
|
log.Printf(" ->ctext:\r\n%s\r\n", hex.Dump(wb.Bytes()))
|
||||||
|
|
||||||
ctrlStatOp := op
|
ctrlStatOp := op
|
||||||
err = binary.Write(hc.c, binary.BigEndian, &ctrlStatOp)
|
err = binary.Write(hc.c, binary.BigEndian, &ctrlStatOp)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -534,9 +540,11 @@ func (hc Conn) WritePacket(b []byte, op byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Advance to next full (or final, partial) chunk of payload
|
||||||
b = b[payloadLen:]
|
b = b[payloadLen:]
|
||||||
|
hc.m.Unlock()
|
||||||
|
time.Sleep(200 * time.Millisecond)
|
||||||
}
|
}
|
||||||
hc.m.Unlock()
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//panic(err)
|
//panic(err)
|
||||||
|
|
|
@ -114,7 +114,7 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *cmdSpec)
|
||||||
// changes to the dest dir *as it sees each one*. This enables
|
// changes to the dest dir *as it sees each one*. This enables
|
||||||
// its use below, where clients can send scattered sets of source
|
// its use below, where clients can send scattered sets of source
|
||||||
// files and dirs to be extracted to a single dest dir server-side,
|
// files and dirs to be extracted to a single dest dir server-side,
|
||||||
// whilst preserving the subtrees of dirs on the other side. :)
|
// whilst preserving the subtrees of dirs on the other side.
|
||||||
// Eg., tar -c -f /dev/stdout -C /dirA fileInA -C /some/where/dirB fileInB /foo/dirC
|
// Eg., tar -c -f /dev/stdout -C /dirA fileInA -C /some/where/dirB fileInB /foo/dirC
|
||||||
// packages fileInA, fileInB, and dirC at a single toplevel in the tar.
|
// packages fileInA, fileInB, and dirC at a single toplevel in the tar.
|
||||||
// The tar authors are/were real smarties :)
|
// The tar authors are/were real smarties :)
|
||||||
|
@ -130,7 +130,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *cmdSpec)
|
||||||
} else {
|
} else {
|
||||||
cmdArgs = append(cmdArgs, "-C", dirTmp, fileTmp)
|
cmdArgs = append(cmdArgs, "-C", dirTmp, fileTmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
//cmdArgs = append(cmdArgs, v)
|
//cmdArgs = append(cmdArgs, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue