libp2p/stream/lpstream

Search:
Group by:
Source   Edit  

Length Prefixed stream implementation

Types

Direction {.pure.} = enum
  In, Out
Source   Edit  
LPStream = ref object of RootObj
  closeEvent*: AsyncEvent
  isClosed*: bool
  isEof*: bool
  objName*: string
  oid*: Oid
  dir*: Direction
  isClosedRemotely*: bool
Source   Edit  
LPStreamError = object of LPError
Source   Edit  
MaxSizeError = object of LPStreamError
Source   Edit  
StreamTracker = ref object of TrackerBase
  opened*: uint64
  closed*: uint64
Source   Edit  

Consts

Eof = []
Source   Edit  
LPStreamTrackerName = "LPStream"
Source   Edit  

Procs

proc closeWithEOF(s: LPStream): InternalRaisesFuture[void, void] {.public,
    ...stackTrace: false, raises: [], gcsafe, gcsafe, raises: [],
    tags: [RootEffect], forbids: [].}

Close the stream and wait for EOF - use this with half-closed streams where an EOF is expected to arrive from the other end.

Note - this should only be used when there has been an in-protocol notification that no more data will arrive and that the only thing left for the other end to do is to close the stream gracefully.

In particular, it must not be used when there is another concurrent read ongoing (which may be the case during cancellations)!

Source   Edit  
proc newLPStreamClosedError(): ref LPStreamClosedError {....gcsafe, raises: [],
    tags: [], forbids: [].}
Source   Edit  
proc newLPStreamConnDownError(parentException: ref Exception = nil): ref LPStreamConnDownError {.
    ...gcsafe, raises: [], tags: [], forbids: [].}
Source   Edit  
proc newLPStreamEOFError(): ref LPStreamEOFError {....gcsafe, raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc newLPStreamIncompleteError(): ref LPStreamIncompleteError {....gcsafe,
    raises: [], tags: [], forbids: [].}
Source   Edit  
proc newLPStreamLimitError(): ref LPStreamLimitError {....gcsafe, raises: [],
    tags: [], forbids: [].}
Source   Edit  
proc newLPStreamRemoteClosedError(): ref LPStreamRemoteClosedError {....gcsafe,
    raises: [], tags: [], forbids: [].}
Source   Edit  
proc newLPStreamResetError(): ref LPStreamResetError {....gcsafe, raises: [],
    tags: [], forbids: [].}
Source   Edit  
func shortLog(s: LPStream): auto {....gcsafe, raises: [], tags: [], forbids: [].}
Source   Edit  
proc write(s: LPStream; msg: string): InternalRaisesFuture[void,
    (CancelledError, LPStreamError)] {.public, ...stackTrace: false, raises: [],
                                       gcsafe, gcsafe, raises: [],
                                       tags: [RootEffect], forbids: [].}
Source   Edit  

Methods

method atEof(s: LPStream): bool {.base, public, ...gcsafe, raises: [], tags: [],
                                  forbids: [].}
Source   Edit  
method close(s: LPStream): InternalRaisesFuture[void, void] {.base, public,
    ...stackTrace: false, raises: [], gcsafe, gcsafe, raises: [],
    tags: [RootEffect], forbids: [].}
Source   Edit  
method closed(s: LPStream): bool {.base, public, ...gcsafe, raises: [], tags: [],
                                   forbids: [].}
Source   Edit  
method closeImpl(s: LPStream): InternalRaisesFuture[void, void] {.base,
    ...stackTrace: false, raises: [], gcsafe, gcsafe, raises: [], tags: [],
    forbids: [].}
Source   Edit  
method initStream(s: LPStream) {.base, ...gcsafe, raises: [], tags: [TimeEffect],
                                 forbids: [].}
Source   Edit  
method join(s: LPStream): InternalRaisesFuture[void, (CancelledError,)] {.base,
    public, ...stackTrace: false, raises: [], gcsafe, gcsafe, raises: [], tags: [],
    forbids: [].}
Source   Edit  
method readExactly(s: LPStream; pbytes: pointer; nbytes: int): InternalRaisesFuture[
    void, (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
    raises: [], gcsafe, gcsafe, raises: [], tags: [RootEffect], forbids: [].}
Waits for nbytes to be available, then read them and return them Source   Edit  
method readLine(s: LPStream; limit = 0; sep = "\r\n"): InternalRaisesFuture[
    string, (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
    raises: [], gcsafe, gcsafe, raises: [], tags: [RootEffect], forbids: [].}
Reads up to limit bytes are read, or a sep is found Source   Edit  
method readLp(s: LPStream; maxSize: int): InternalRaisesFuture[seq[byte],
    (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
                                       raises: [], gcsafe, gcsafe, raises: [],
                                       tags: [RootEffect], forbids: [].}
read length prefixed msg, with the length encoded as a varint Source   Edit  
method readOnce(s: LPStream; pbytes: pointer; nbytes: int): InternalRaisesFuture[
    int, (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
    raises: [], gcsafe, gcsafe, raises: [], tags: [], forbids: [].}
Source   Edit  
method readVarint(conn: LPStream): InternalRaisesFuture[uint64,
    (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
                                       raises: [], gcsafe, gcsafe, raises: [],
                                       tags: [RootEffect], forbids: [].}
Source   Edit  
method write(s: LPStream; msg: seq[byte]): InternalRaisesFuture[void,
    (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
                                       raises: [], gcsafe, gcsafe, raises: [],
                                       tags: [], forbids: [].}
Source   Edit  
method writeLp(s: LPStream; msg: openArray[byte]): InternalRaisesFuture[void,
    (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
                                       raises: [], gcsafe, gcsafe, raises: [],
                                       tags: [RootEffect], forbids: [].}
Source   Edit  
method writeLp(s: LPStream; msg: string): InternalRaisesFuture[void,
    (CancelledError, LPStreamError)] {.base, public, ...stackTrace: false,
                                       raises: [], gcsafe, gcsafe, raises: [],
                                       tags: [RootEffect], forbids: [].}
Source   Edit  

Templates

template formatItIMPL(it: LPStream): auto {..}
Source   Edit