@@ -60,7 +60,7 @@ defmodule GenLSP.Communication.TCP do
60
60
end
61
61
62
62
def read ( state , buffer ) do
63
- { % { "Content-Length" => length } , buffer } = read_headers ( buffer )
63
+ { % { "Content-Length" => length } , buffer } = read_headers ( buffer , state . socket )
64
64
65
65
{ body , buffer } = read_body ( state . socket , buffer , String . to_integer ( length ) )
66
66
@@ -80,23 +80,34 @@ defmodule GenLSP.Communication.TCP do
80
80
read_body ( socket , buffer <> packet , length )
81
81
end
82
82
83
- defp read_headers ( packet ) do
83
+ defp read_headers ( packet , socket ) do
84
84
packet
85
- |> decode_header ( )
86
- |> read_headers ( Map . new ( ) )
85
+ |> decode_header ( socket )
86
+ |> read_headers ( Map . new ( ) , socket )
87
87
end
88
88
89
- defp read_headers ( { :ok , :http_eoh , body } , headers ) do
89
+ defp read_headers ( { :ok , :http_eoh , body } , headers , _socket ) do
90
90
{ headers , body }
91
91
end
92
92
93
- defp read_headers ( { :ok , { :http_header , _ , header , _header , value } , more } , headers ) do
93
+ defp read_headers ( { :ok , { :http_header , _ , header , _header , value } , more } , headers , socket ) do
94
94
headers = Map . put ( headers , to_string ( header ) , value )
95
95
96
96
more
97
- |> decode_header ( )
98
- |> read_headers ( headers )
97
+ |> decode_header ( socket )
98
+ |> read_headers ( headers , socket )
99
99
end
100
100
101
- defp decode_header ( packet ) , do: :erlang . decode_packet ( :httph_bin , packet , [ ] )
101
+ defp decode_header ( packet , socket ) do
102
+ case :erlang . decode_packet ( :httph_bin , packet , [ ] ) do
103
+ { :more , size } ->
104
+ size = if size == :undefined , do: 0 , else: size
105
+ { :ok , more } = :gen_tcp . recv ( socket , size )
106
+
107
+ decode_header ( packet <> more , socket )
108
+
109
+ other ->
110
+ other
111
+ end
112
+ end
102
113
end
0 commit comments