mirror of https://github.com/fatedier/frp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
744 B
38 lines
744 B
package rpc |
|
|
|
import ( |
|
"bytes" |
|
"encoding/binary" |
|
"errors" |
|
"fmt" |
|
"io" |
|
) |
|
|
|
func WriteBytes(w io.Writer, buf []byte) (int, error) { |
|
out := bytes.NewBuffer(nil) |
|
if err := binary.Write(out, binary.BigEndian, int64(len(buf))); err != nil { |
|
return 0, err |
|
} |
|
|
|
out.Write(buf) |
|
return w.Write(out.Bytes()) |
|
} |
|
|
|
func ReadBytes(r io.Reader) ([]byte, error) { |
|
var length int64 |
|
if err := binary.Read(r, binary.BigEndian, &length); err != nil { |
|
return nil, err |
|
} |
|
if length < 0 || length > 10*1024*1024 { |
|
return nil, fmt.Errorf("invalid length") |
|
} |
|
buffer := make([]byte, length) |
|
n, err := io.ReadFull(r, buffer) |
|
if err != nil { |
|
return nil, err |
|
} |
|
if int64(n) != length { |
|
return nil, errors.New("invalid length") |
|
} |
|
return buffer, nil |
|
}
|
|
|