Skip to content

Commit 16a00e0

Browse files
committed
bugfix, issue ./src/toppage_handler.erl
1 parent f20af96 commit 16a00e0

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

src/toppage_handler.erl

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ handle(
7171
RewriteResult
7272
end,
7373
lager:debug("~p Fetching ~s", [self(), Url]),
74+
AcceptGzip = lists:any(
75+
fun(X) -> X == "gzip" end,
76+
string:tokens(
77+
lists:filter(
78+
fun(X) -> X =/= 16#20 end,
79+
binary_to_list(proplists:lookup(<<"accept-encoding">>))
80+
), ","
81+
)
82+
),
7483
ModifiedHeaders = modify_req_headers(Headers, ThisNode),
7584
{ibrowse_req_id, _RequestId} = ibrowse:send_req(
7685
binary_to_list(Url),
@@ -81,7 +90,7 @@ handle(
8190
infinity
8291
),
8392

84-
FinalReq = receive_loop(State, Req, State#state.default_callbacks),
93+
FinalReq = receive_loop(State, Req, State#state.default_callbacks, AcceptGzip),
8594
lager:debug("~p Done", [self()]),
8695
{ok, FinalReq, State}.
8796

@@ -139,30 +148,36 @@ init_default_callbacks() ->
139148
end.
140149

141150
receive_loop(
142-
State, Req,
151+
#state { enable_gzip = EnableGzip } = State,
152+
Req,
143153
#callbacks {
144154
processor = Processor,
145155
finalizer = Finalizer,
146156
stream_next = StreamNext,
147157
stream_close = StreamClose
148-
} = Callbacks) ->
158+
} = Callbacks,
159+
AcceptGzip) ->
149160
receive
150161
{ ibrowse_async_headers, RequestId, Code, IBrowseHeaders } ->
151162
ok = StreamNext(RequestId),
152163
Headers = headers_ibrowse_to_cowboy(IBrowseHeaders),
153164
ModifiedHeaders = modify_res_headers(Headers),
154165

155166
{ NewHeaders, NewCallbacks} =
156-
optional_add_gzip_compression(
157-
State, ModifiedHeaders, Callbacks
158-
),
159-
167+
case EnableGzip and AcceptGzip of
168+
true ->
169+
optional_add_gzip_compression(
170+
ModifiedHeaders, Callbacks
171+
);
172+
false ->
173+
{ ModifiedHeaders, Callbacks }
174+
end,
160175
{ ok, NewReq } = send_headers(Req, Code, NewHeaders),
161-
receive_loop(State, NewReq, NewCallbacks);
176+
receive_loop(State, NewReq, NewCallbacks, AcceptGzip);
162177
{ ibrowse_async_response, RequestId, Data } ->
163178
ok = StreamNext(RequestId),
164179
ok = send_chunk(Req, Processor(Data)),
165-
receive_loop(State, Req, Callbacks);
180+
receive_loop(State, Req, Callbacks, AcceptGzip);
166181

167182
{ ibrowse_async_response_end, RequestId } ->
168183
ok = StreamClose(RequestId),
@@ -188,13 +203,10 @@ apply_rewrite_rules(Url, [{CompiledRe,ReplaceString}|OtherRules]) ->
188203
false -> apply_rewrite_rules(Url, OtherRules)
189204
end.
190205

191-
-spec optional_add_gzip_compression(
192-
#state{}, headers(), #callbacks{}) ->
193-
{ headers(), #callbacks{} }.
194-
optional_add_gzip_compression(
195-
#state{ enable_gzip = EnableGzip }, Headers, Callbacks) ->
196-
case { EnableGzip, proplists:get_value(<<"content-encoding">>, Headers) } of
197-
{ true, undefined } ->
206+
-spec optional_add_gzip_compression(headers(), #callbacks{}) -> { headers(), #callbacks{} }.
207+
optional_add_gzip_compression(Headers, Callbacks) ->
208+
case proplists:get_value(<<"content-encoding">>, Headers) of
209+
undefined ->
198210
lager:debug("~p Using gzip compression", [self()]),
199211
ZlibStream = zlib:open(),
200212
ok = zlib:deflateInit(ZlibStream, default, deflated, 16+?MAX_WBITS, 8, default),

0 commit comments

Comments
 (0)