aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/pktline/encoder.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-04-02 06:23:30 +0000
committerGravatar Runxi Yu2026-04-02 06:28:39 +0000
commita041d523de389b65b98a5373a8034041db2a8d83 (patch)
tree7b423dc735f463be616045f2c3c2095a7737aca7 /network/protocol/pktline/encoder.go
parentresearch: Add dynamic pack resources (diff)
signatureNo signature
*: Remove
Diffstat (limited to 'network/protocol/pktline/encoder.go')
-rw-r--r--network/protocol/pktline/encoder.go143
1 files changed, 0 insertions, 143 deletions
diff --git a/network/protocol/pktline/encoder.go b/network/protocol/pktline/encoder.go
deleted file mode 100644
index a7b17108..00000000
--- a/network/protocol/pktline/encoder.go
+++ /dev/null
@@ -1,143 +0,0 @@
-package pktline
-
-import (
- "fmt"
- "io"
-
- "codeberg.org/lindenii/furgit/common/iowrap"
-)
-
-// Encoder writes pkt-line frames to a flush-capable output transport.
-//
-// It writes exactly one frame per method call and does not auto-chunk data.
-//
-// Labels: MT-Unsafe.
-type Encoder struct {
- w iowrap.WriteFlusher
- maxData int
-}
-
-// NewEncoder creates an encoder over w.
-//
-// Labels: Deps-Borrowed, Life-Parent.
-func NewEncoder(w iowrap.WriteFlusher) *Encoder {
- return &Encoder{
- w: w,
- maxData: LargePacketDataMax,
- }
-}
-
-// SetMaxData sets the maximum payload size accepted by WriteData.
-//
-// Non-positive n resets to LargePacketDataMax.
-func (e *Encoder) SetMaxData(n int) {
- if n <= 0 {
- e.maxData = LargePacketDataMax
-
- return
- }
-
- e.maxData = n
-}
-
-func writeAll(w io.Writer, b []byte) error {
- for len(b) > 0 {
- n, err := w.Write(b)
- if err != nil {
- return err
- }
-
- if n <= 0 {
- return io.ErrShortWrite
- }
-
- b = b[n:]
- }
-
- return nil
-}
-
-// WriteData writes one data frame.
-//
-// Empty payload is encoded as 0004.
-func (e *Encoder) WriteData(p []byte) error {
- maxData := e.effectiveMaxData()
- if len(p) > maxData {
- return fmt.Errorf("%w: %d > %d", ErrTooLarge, len(p), maxData)
- }
-
- var hdr [4]byte
-
- err := EncodeLengthHeader(&hdr, len(p)+4)
- if err != nil {
- return err
- }
-
- err = writeAll(e.w, hdr[:])
- if err != nil {
- return err
- }
-
- return writeAll(e.w, p)
-}
-
-// WriteString writes one data frame containing s and returns len(s) on success.
-func (e *Encoder) WriteString(s string) (int, error) {
- err := e.WriteData([]byte(s))
- if err != nil {
- return 0, err
- }
-
- return len(s), nil
-}
-
-// WriteFlushPacket writes control frame 0000 (flush-pkt).
-func (e *Encoder) WriteFlushPacket() error {
- return e.writeControl(0)
-}
-
-// WriteDelimPacket writes control frame 0001 (delim-pkt).
-func (e *Encoder) WriteDelimPacket() error {
- return e.writeControl(1)
-}
-
-// WriteResponseEndPacket writes control frame 0002 (response-end-pkt).
-func (e *Encoder) WriteResponseEndPacket() error {
- return e.writeControl(2)
-}
-
-// Flush flushes buffered output in the underlying transport.
-//
-// Flush does not emit any pkt-line control frame.
-func (e *Encoder) Flush() error {
- return e.w.Flush()
-}
-
-// WriteFlushPacketAndFlush writes a flush-pkt (0000) then flushes transport I/O.
-func (e *Encoder) WriteFlushPacketAndFlush() error {
- err := e.WriteFlushPacket()
- if err != nil {
- return err
- }
-
- return e.Flush()
-}
-
-func (e *Encoder) writeControl(n int) error {
- var hdr [4]byte
-
- err := EncodeLengthHeader(&hdr, n)
- if err != nil {
- return err
- }
-
- return writeAll(e.w, hdr[:])
-}
-
-func (e *Encoder) effectiveMaxData() int {
- if e.maxData <= 0 || e.maxData > LargePacketDataMax {
- return LargePacketDataMax
- }
-
- return e.maxData
-}