aboutsummaryrefslogtreecommitdiff
path: root/protocol/v0v1/server/session.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 16:22:03 +0000
committerGravatar Runxi Yu2026-03-25 16:22:03 +0000
commit311edcd50f3a84f4b860bde3cb887451d74eaa11 (patch)
treebe7aa5e9a51e636358f33b1c90637b5024b70dc3 /protocol/v0v1/server/session.go
parentREADME: Split off contrib, benchmarks, remove history for now I guess, etc. (diff)
signatureNo signature
network/protocol: Rename from protocol v0.1.110
Diffstat (limited to 'protocol/v0v1/server/session.go')
-rw-r--r--protocol/v0v1/server/session.go131
1 files changed, 0 insertions, 131 deletions
diff --git a/protocol/v0v1/server/session.go b/protocol/v0v1/server/session.go
deleted file mode 100644
index 81939540..00000000
--- a/protocol/v0v1/server/session.go
+++ /dev/null
@@ -1,131 +0,0 @@
-package server
-
-import (
- "io"
-
- objectid "codeberg.org/lindenii/furgit/object/id"
- "codeberg.org/lindenii/furgit/protocol/pktline"
- "codeberg.org/lindenii/furgit/protocol/sideband64k"
-)
-
-// Options configures one server-side v0/v1 session.
-type Options struct {
- // Version selects protocol v0 or v1 framing.
- Version Version
- // Algorithm is the repository object ID algorithm for this session.
- Algorithm objectid.Algorithm
-}
-
-// Session is one stateful server-side v0/v1 server protocol session.
-type Session struct {
- dec *pktline.Decoder
- enc *pktline.Encoder
- sideband *sideband64k.Encoder
- opts Options
- useSideBand bool
-}
-
-// NewSession creates one v0/v1 server session over r and w.
-func NewSession(r io.Reader, w pktline.WriteFlusher, opts Options) *Session {
- return &Session{
- dec: pktline.NewDecoder(r, pktline.ReadOptions{}),
- enc: pktline.NewEncoder(w),
- sideband: sideband64k.NewEncoder(w),
- opts: opts,
- }
-}
-
-// Algorithm returns the session object ID algorithm.
-func (session *Session) Algorithm() objectid.Algorithm {
- return session.opts.Algorithm
-}
-
-// ReadFrame reads one low-level pkt-line frame from the session input.
-func (session *Session) ReadFrame() (Frame, error) {
- return session.dec.ReadFrame()
-}
-
-// EnableSideBand64K enables side-band-64k output framing for subsequent data,
-// progress, error, and flush writes.
-func (session *Session) EnableSideBand64K() {
- session.useSideBand = true
-}
-
-// WriteData writes one primary output packet.
-func (session *Session) WriteData(p []byte) error {
- if session.useSideBand {
- return session.sideband.WriteData(p)
- }
-
- return session.enc.WriteData(p)
-}
-
-// WriteProgress writes one progress packet.
-func (session *Session) WriteProgress(p []byte) error {
- if !session.useSideBand {
- return ErrSideBandNotEnabled
- }
-
- return session.sideband.WriteProgress(p)
-}
-
-// WriteError writes one fatal error packet.
-func (session *Session) WriteError(p []byte) error {
- if !session.useSideBand {
- return ErrSideBandNotEnabled
- }
-
- return session.sideband.WriteError(p)
-}
-
-// WriteFlush writes one trailing flush packet.
-func (session *Session) WriteFlush() error {
- if session.useSideBand {
- return session.sideband.WriteFlush()
- }
-
- return session.enc.WriteFlush()
-}
-
-// FlushIO flushes buffered transport output without emitting pkt-line frames.
-func (session *Session) FlushIO() error {
- if session.useSideBand {
- return session.sideband.FlushIO()
- }
-
- return session.enc.FlushIO()
-}
-
-// ProgressWriter returns one chunking writer for sideband progress output.
-//
-// When side-band-64k was not negotiated, writes are discarded.
-func (session *Session) ProgressWriter() io.Writer {
- if !session.useSideBand {
- return io.Discard
- }
-
- return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandProgress)
-}
-
-// ErrorWriter returns one chunking writer for sideband error output.
-//
-// When side-band-64k was not negotiated, writes are discarded.
-func (session *Session) ErrorWriter() io.Writer {
- if !session.useSideBand {
- return io.Discard
- }
-
- return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandError)
-}
-
-// PrimaryDataWriter returns one chunking writer for primary output bytes.
-//
-// When side-band-64k is enabled, writes are chunked into band-1 sideband
-// frames. Otherwise writes are chunked into direct pkt-line data frames.
-func (session *Session) PrimaryDataWriter() io.Writer {
- if session.useSideBand {
- return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandData)
- }
-
- return pktline.NewChunkWriter(session.enc)
-}