mirror of
https://github.com/amnezia-vpn/amneziawg-go.git
synced 2026-10-12 22:24:18 +03:00
Replace hot-path bytes.NewBuffer usage with slice-backed readers and writers, and build FlexBuffer-backed read/write contexts by value. Remove defer from the targeted per-message and per-batch write paths, return pooled buffers explicitly after downstream writes complete, and keep TCP/UDP prelude behavior unchanged. Add focused regression tests for stream, UDP, and batch masquerade and prelude writes, and fix write-side bookkeeping to emit the actual encoded bytes.
43 lines
662 B
Go
43 lines
662 B
Go
package conceal
|
|
|
|
import "io"
|
|
|
|
type sliceReader struct {
|
|
buf []byte
|
|
}
|
|
|
|
func newSliceReader(buf []byte) sliceReader {
|
|
return sliceReader{buf: buf}
|
|
}
|
|
|
|
func (r *sliceReader) Read(p []byte) (n int, err error) {
|
|
if len(r.buf) == 0 {
|
|
return 0, io.EOF
|
|
}
|
|
|
|
n = copy(p, r.buf)
|
|
r.buf = r.buf[n:]
|
|
return n, nil
|
|
}
|
|
|
|
type sliceWriter struct {
|
|
buf []byte
|
|
}
|
|
|
|
func newSliceWriter(buf []byte) sliceWriter {
|
|
return sliceWriter{buf: buf[:0]}
|
|
}
|
|
|
|
func (w *sliceWriter) Reset(buf []byte) {
|
|
w.buf = buf[:0]
|
|
}
|
|
|
|
func (w *sliceWriter) Write(p []byte) (n int, err error) {
|
|
w.buf = append(w.buf, p...)
|
|
return len(p), nil
|
|
}
|
|
|
|
func (w *sliceWriter) Bytes() []byte {
|
|
return w.buf
|
|
}
|