@@ -247,7 +247,6 @@ private def resetForNextMessage (machine : Machine ty) : Machine ty :=
247247 knownSize := none,
248248 messageHead := {},
249249 userClosedBody := false ,
250- canSendData := true ,
251250 sentMessage := false
252251 },
253252 events := machine.events.push .next,
@@ -347,7 +346,7 @@ def closeReader (machine : Machine dir) : Machine dir :=
347346/-- Signal that the writer cannot send more messages because the socket closed. -/
348347@[inline]
349348def closeWriter (machine : Machine dir) : Machine dir :=
350- machine.modifyWriter ({ · with canSendData := false })
349+ machine.modifyWriter ({ · with state := .closed, userClosedBody := true })
351350
352351/-- Signal that the user is not sending data anymore. -/
353352@[inline]
@@ -416,16 +415,9 @@ def startNextCycle (machine : Machine dir) : Machine dir :=
416415partial def processWrite (machine : Machine dir) : Machine dir :=
417416 match machine.writer.state with
418417 | .pending =>
419- if ¬machine.writer.canSendData ∨ machine.isReaderClosed then
420- machine.setWriterState .closed
421- else
422- machine
418+ machine
423419 | .waitingHeaders =>
424- if ¬machine.writer.canSendData then
425- machine.setWriterState .closed
426- else
427- machine.addEvent .needAnswer
428-
420+ machine.addEvent .needAnswer
429421 | .waitingForFlush =>
430422 if machine.shouldFlush then
431423 machine.setHeaders machine.writer.messageHead
@@ -553,25 +545,24 @@ partial def processRead (machine : Machine dir) : Machine dir :=
553545 match result with
554546 | some (size, ext) =>
555547 machine
556- |>.setReaderState (.needChunkedBody size)
557- |>.setEvent (some ext <&> .chunkExt)
548+ |>.setReaderState (.needChunkedBody ext size)
558549 |> processRead
559550 | none =>
560551 machine
561552
562- | .needChunkedBody 0 =>
553+ | .needChunkedBody ext 0 =>
563554 let (machine, result) := parseWith machine (parseLastChunkBody machine.config) (limit := some 1 )
564555
565556 match result with
566557 | some _ =>
567558 machine
568559 |>.setReaderState .complete
569- |>.addEvent (.gotData true .empty)
560+ |>.addEvent (.gotData true ext .empty)
570561 |> processRead
571562 | none =>
572563 machine
573564
574- | .needChunkedBody size =>
565+ | .needChunkedBody ext size =>
575566 let (machine, result) := parseWith machine
576567 (parseChunkedSizedData size) (limit := none) (some size)
577568
@@ -580,19 +571,19 @@ partial def processRead (machine : Machine dir) : Machine dir :=
580571 | .complete body =>
581572 machine
582573 |>.setReaderState .needChunkedSize
583- |>.addEvent (.gotData false body)
574+ |>.addEvent (.gotData false ext body)
584575 |> processRead
585576 | .incomplete body remaining =>
586577 machine
587- |>.setReaderState (.needChunkedBody remaining)
588- |>.addEvent (.gotData false body)
578+ |>.setReaderState (.needChunkedBody ext remaining)
579+ |>.addEvent (.gotData false ext body)
589580 else
590581 machine
591582
592583 | .needFixedBody 0 =>
593584 machine
594585 |>.setReaderState .complete
595- |>.addEvent (.gotData true .empty)
586+ |>.addEvent (.gotData true #[] .empty)
596587 |> processRead
597588
598589 | .needFixedBody size =>
@@ -603,20 +594,17 @@ partial def processRead (machine : Machine dir) : Machine dir :=
603594 | .complete body =>
604595 machine
605596 |>.setReaderState .complete
606- |>.addEvent (.gotData true body)
597+ |>.addEvent (.gotData true #[] body)
607598 |> processRead
608599 | .incomplete body remaining =>
609600 machine
610601 |>.setReaderState (.needFixedBody remaining)
611- |>.addEvent (.gotData false body)
602+ |>.addEvent (.gotData false #[] body)
612603 else
613604 machine
614605
615- | .requireOutgoing _ =>
616- machine
617-
618606 | .complete =>
619- if ¬machine.keepAlive then
607+ if ¬machine.keepAlive ∨ machine.reader.noMoreInput then
620608 machine.setReaderState .closed
621609 else
622610 machine
0 commit comments