Source File
pending_queue.go
Belonging Package
github.com/pion/sctp
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>// SPDX-License-Identifier: MITpackage sctpimport ()// pendingBaseQueuetype pendingBaseQueue struct {queue []*chunkPayloadData}func newPendingBaseQueue() *pendingBaseQueue {return &pendingBaseQueue{queue: []*chunkPayloadData{}}}func ( *pendingBaseQueue) ( *chunkPayloadData) {.queue = append(.queue, )}func ( *pendingBaseQueue) () *chunkPayloadData {if len(.queue) == 0 {return nil}:= .queue[0].queue = .queue[1:]return}func ( *pendingBaseQueue) ( int) *chunkPayloadData {if len(.queue) == 0 || < 0 || >= len(.queue) {return nil}return .queue[]}func ( *pendingBaseQueue) () int {return len(.queue)}// pendingQueuetype pendingQueue struct {unorderedQueue *pendingBaseQueueorderedQueue *pendingBaseQueuenBytes intselected boolunorderedIsSelected bool}// Pending queue errors.var (ErrUnexpectedChuckPoppedUnordered = errors.New("unexpected chunk popped (unordered)")ErrUnexpectedChuckPoppedOrdered = errors.New("unexpected chunk popped (ordered)")ErrUnexpectedQState = errors.New("unexpected q state (should've been selected)"))func newPendingQueue() *pendingQueue {return &pendingQueue{unorderedQueue: newPendingBaseQueue(),orderedQueue: newPendingBaseQueue(),}}func ( *pendingQueue) ( *chunkPayloadData) {if .unordered {.unorderedQueue.push()} else {.orderedQueue.push()}.nBytes += len(.userData)}func ( *pendingQueue) () *chunkPayloadData {if .selected {if .unorderedIsSelected {return .unorderedQueue.get(0)}return .orderedQueue.get(0)}if := .unorderedQueue.get(0); != nil {return}return .orderedQueue.get(0)}func ( *pendingQueue) ( *chunkPayloadData) error { //nolint:cyclopif .selected { //nolint:nestifvar *chunkPayloadDataif .unorderedIsSelected {= .unorderedQueue.pop()if != {return ErrUnexpectedChuckPoppedUnordered}} else {= .orderedQueue.pop()if != {return ErrUnexpectedChuckPoppedOrdered}}if .endingFragment {.selected = false}} else {if !.beginningFragment {return ErrUnexpectedQState}if .unordered {:= .unorderedQueue.pop()if != {return ErrUnexpectedChuckPoppedUnordered}if !.endingFragment {.selected = true.unorderedIsSelected = true}} else {:= .orderedQueue.pop()if != {return ErrUnexpectedChuckPoppedOrdered}if !.endingFragment {.selected = true.unorderedIsSelected = false}}}.nBytes -= len(.userData)return nil}func ( *pendingQueue) () int {return .nBytes}func ( *pendingQueue) () int {return .unorderedQueue.size() + .orderedQueue.size()}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |