@@ -548,103 +548,34 @@ defmodule Mint.HTTP1 do
548
548
}
549
549
"""
550
550
def recv_response ( conn , ref , timeout ) do
551
- recv_response ( conn , ref , timeout , % { status: nil , headers: [ ] , body: "" } , fn
552
- conn , { :status , status } , acc ->
553
- { :cont , conn , % { acc | status: status } }
554
-
555
- conn , { :headers , headers } , acc ->
556
- { :cont , conn , update_in ( acc . headers , & ( & 1 ++ headers ) ) }
557
-
558
- conn , { :data , data } , acc ->
559
- { :cont , conn , update_in ( acc . body , & ( & 1 <> data ) ) }
560
-
561
- conn , :done , acc ->
562
- { :cont , conn , acc }
563
- end )
551
+ recv_response ( [ ] , % { status: nil , headers: [ ] , body: "" } , conn , ref , timeout )
564
552
end
565
553
566
- @ doc """
567
- TODO
568
-
569
- ## Examples
570
-
571
- iex> {:ok, conn} = Mint.HTTP1.connect(:https, "httpbin.org", 443, mode: :passive)
572
- iex> {:ok, conn, ref} = Mint.HTTP1.request(conn, "GET", "/user-agent", [], nil)
573
- iex> {:ok, _conn, _acc} =
574
- ...> Mint.HTTP1.recv_response(conn, ref, 5000, nil, fn
575
- ...> conn, entry, acc ->
576
- ...> IO.inspect(entry)
577
- ...> {:cont, conn, acc}
578
- ...> end)
579
-
580
- Outputs:
581
-
582
- {:status, 201}
583
- {:headers, [{"date", ...}, ...]}
584
- {:data, "{\\ n \\ "user-agent\\ ": \\ "mint/1.6.2\\ "\\ n}\\ n"}
585
- :done
586
- """
587
- def recv_response ( conn , ref , timeout , acc , fun ) do
588
- recv_response ( [ ] , acc , fun , conn , ref , timeout )
554
+ defp recv_response ( [ { :status , ref , status } | rest ] , acc , conn , ref , timeout ) do
555
+ acc = put_in ( acc . status , status )
556
+ recv_response ( rest , acc , conn , ref , timeout )
589
557
end
590
558
591
- defp recv_response ( [ { :status , ref , status } | rest ] , acc , fun , conn , ref , timeout ) do
592
- case fun . ( conn , { :status , status } , acc ) do
593
- { :cont , conn , acc } ->
594
- recv_response ( rest , acc , fun , conn , ref , timeout )
595
-
596
- { :halt , conn , acc } ->
597
- { :ok , conn , acc }
598
-
599
- other ->
600
- raise ArgumentError ,
601
- "expected {:cont, conn, acc} or {:halt, conn, acc}, got: #{ inspect ( other ) } "
602
- end
559
+ defp recv_response ( [ { :headers , ref , headers } | rest ] , acc , conn , ref , timeout ) do
560
+ acc = update_in ( acc . headers , & ( & 1 ++ headers ) )
561
+ recv_response ( rest , acc , conn , ref , timeout )
603
562
end
604
563
605
- defp recv_response ( [ { :headers , ref , headers } | rest ] , acc , fun , conn , ref , timeout ) do
606
- case fun . ( conn , { :headers , headers } , acc ) do
607
- { :cont , conn , acc } ->
608
- recv_response ( rest , acc , fun , conn , ref , timeout )
609
-
610
- { :halt , conn , acc } ->
611
- { :ok , conn , acc }
612
-
613
- other ->
614
- raise ArgumentError ,
615
- "expected {:cont, conn, acc} or {:halt, conn, acc}, got: #{ inspect ( other ) } "
616
- end
564
+ defp recv_response ( [ { :data , ref , data } | rest ] , acc , conn , ref , timeout ) do
565
+ acc = update_in ( acc . body , & ( & 1 <> data ) )
566
+ recv_response ( rest , acc , conn , ref , timeout )
617
567
end
618
568
619
- defp recv_response ( [ { :data , ref , data } | rest ] , acc , fun , conn , ref , timeout ) do
620
- case fun . ( conn , { :data , data } , acc ) do
621
- { :cont , conn , acc } ->
622
- recv_response ( rest , acc , fun , conn , ref , timeout )
623
-
624
- { :halt , conn , acc } ->
625
- { :ok , conn , acc }
626
-
627
- other ->
628
- raise ArgumentError ,
629
- "expected {:cont, conn, acc} or {:halt, conn, acc}, got: #{ inspect ( other ) } "
630
- end
569
+ defp recv_response ( [ { :done , ref } | _ ] , acc , conn , ref , _timeout ) do
570
+ { :ok , conn , acc }
631
571
end
632
572
633
- defp recv_response ( [ { :done , ref } | _ ] , acc , fun , conn , ref , _timeout ) do
634
- case fun . ( conn , :done , acc ) do
635
- { :cont , conn , acc } ->
636
- { :ok , conn , acc }
637
-
638
- { :halt , conn , acc } ->
639
- { :ok , conn , acc }
640
-
641
- other ->
642
- raise ArgumentError ,
643
- "expected {:cont, conn, acc} or {:halt, conn, acc}, got: #{ inspect ( other ) } "
644
- end
573
+ # Ignore entries from other requests.
574
+ defp recv_response ( [ _entry | rest ] , acc , conn , ref , timeout ) do
575
+ recv_response ( rest , acc , conn , ref , timeout )
645
576
end
646
577
647
- defp recv_response ( [ ] , acc , fun , conn , ref , timeout ) do
578
+ defp recv_response ( [ ] , acc , conn , ref , timeout ) do
648
579
start_time = System . monotonic_time ( :millisecond )
649
580
650
581
with { :ok , conn , entries } <- recv ( conn , 0 , timeout ) do
@@ -655,7 +586,7 @@ defmodule Mint.HTTP1 do
655
586
timeout
656
587
end
657
588
658
- recv_response ( entries , acc , fun , conn , ref , timeout )
589
+ recv_response ( entries , acc , conn , ref , timeout )
659
590
end
660
591
end
661
592
0 commit comments