Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
nitely committed Aug 25, 2024
1 parent 07ad029 commit 6a0d9aa
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
17 changes: 10 additions & 7 deletions src/hyperx/clientserver.nim
Original file line number Diff line number Diff line change
Expand Up @@ -458,26 +458,26 @@ proc read(client: ClientContext, frm: Frame) {.async.} =
debugInfo $frm
var payloadLen = frm.payloadLen.int
check payloadLen <= stgInitialMaxFrameSize.int, newConnError(errFrameSizeError)
var paddingLen = 0
if frmfPadded in frm.flags and frm.typ in frmPaddedTypes:
var paddingLen = 0'u8
if frm.isPadded:
debugInfo "Padding"
check payloadLen >= frmPaddingSize, newConnError(errProtocolError)
check not client.sock.isClosed, newConnClosedError()
let paddingRln = await client.sock.recvInto(addr paddingLen, frmPaddingSize)
check paddingRln == frmPaddingSize, newConnClosedError()
payloadLen -= frmPaddingSize
# prio is deprecated so do nothing with it
if frmfPriority in frm.flags and frm.typ == frmtHeaders:
if frm.hasPrio:
debugInfo "Priority"
check payloadLen >= frmPrioritySize, newConnError(errProtocolError)
var prio = [byte 0, 0, 0, 0, 0]
var prio = [0'u8, 0, 0, 0, 0]
check not client.sock.isClosed, newConnClosedError()
let prioRln = await client.sock.recvInto(addr prio, prio.len)
check prioRln == frmPrioritySize, newConnClosedError()
check prioDependency(prio) != frm.sid, newConnError(errProtocolError)
payloadLen -= frmPrioritySize
# padding can be equal at this point, because we don't count frmPaddingSize
check payloadLen >= paddingLen, newConnError(errProtocolError)
check payloadLen >= paddingLen.int, newConnError(errProtocolError)
check isValidSize(frm, payloadLen), newConnError(errFrameSizeError)
if payloadLen > 0:
frm.grow payloadLen
Expand All @@ -488,7 +488,7 @@ proc read(client: ClientContext, frm: Frame) {.async.} =
check payloadRln == payloadLen, newConnClosedError()
debugInfo frm.debugPayload
if paddingLen > 0:
frm.shrink paddingLen
frm.shrink paddingLen.int
if frmfEndHeaders notin frm.flags and frm.typ in {frmtHeaders, frmtPushPromise}:
debugInfo "Continuation"
await client.readUntilEnd(frm)
Expand Down Expand Up @@ -879,6 +879,9 @@ proc write(strm: ClientStream, frm: Frame): Future[void] =
template stream: untyped = strm.stream
# This is done in the next headers after settings ACK put
if frm.typ == frmtHeaders and client.headersEnc.hasResized():
# XXX handle padding and prio
doAssert not frm.isPadded
doAssert not frm.hasPrio
# XXX avoid copy?
var payload = newSeq[byte]()
client.headersEnc.encodeLastResize(payload)
Expand Down Expand Up @@ -1113,7 +1116,7 @@ proc sendHeadersImpl*(
frm.add headers[]
frm.setTyp frmtHeaders
frm.setSid strm.stream.id.FrmSid
frm.setPayloadLen frm.payloadSize.FrmPayloadLen
frm.setPayloadLen frm.payload.len.FrmPayloadLen
frm.flags.incl frmfEndHeaders
if finish:
frm.flags.incl frmfEndStream
Expand Down
9 changes: 6 additions & 3 deletions src/hyperx/frame.nim
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,6 @@ func len*(frm: Frame): int {.inline, raises: [].} =
template payload*(frm: Frame): untyped =
toOpenArray(frm.s, frmHeaderSize, frm.s.len-1)

func payloadSize*(frm: Frame): int {.raises: [].} =
frm.len-frmHeaderSize

func grow*(frm: Frame, size: int) {.inline, raises: [].} =
frm.s.setLen frm.s.len+size

Expand Down Expand Up @@ -220,6 +217,12 @@ func isValidSize*(frm: Frame, size: int): bool {.inline, raises: [].} =
else:
true

func isPadded*(frm: Frame): bool {.raises: [].} =
frmfPadded in frm.flags and frm.typ in frmPaddedTypes

func hasPrio*(frm: Frame): bool {.raises: [].} =
frmfPriority in frm.flags and frm.typ == frmtHeaders

template assignAt(s: var seq[byte], i: int, x: uint32): untyped =
s[i+0] = ((x shr 24) and 8.ones).byte
s[i+1] = ((x shr 16) and 8.ones).byte
Expand Down

0 comments on commit 6a0d9aa

Please sign in to comment.