response.ex (1023B)
1 defmodule Mint.HTTP1.Response do 2 @moduledoc false 3 4 alias Mint.Core.Util 5 6 def decode_status_line(binary) do 7 case :erlang.decode_packet(:http_bin, binary, []) do 8 {:ok, {:http_response, version, status, reason}, rest} -> 9 {:ok, {version, status, reason}, rest} 10 11 {:ok, _other, _rest} -> 12 :error 13 14 {:more, _length} -> 15 :more 16 17 {:error, _reason} -> 18 :error 19 end 20 end 21 22 def decode_header(binary) do 23 case :erlang.decode_packet(:httph_bin, binary, []) do 24 {:ok, {:http_header, _unused, name, _reserved, value}, rest} -> 25 {:ok, {header_name(name), value}, rest} 26 27 {:ok, :http_eoh, rest} -> 28 {:ok, :eof, rest} 29 30 {:ok, _other, _rest} -> 31 :error 32 33 {:more, _length} -> 34 :more 35 36 {:error, _reason} -> 37 :error 38 end 39 end 40 41 defp header_name(atom) when is_atom(atom), do: atom |> Atom.to_string() |> Util.downcase_ascii() 42 defp header_name(binary) when is_binary(binary), do: Util.downcase_ascii(binary) 43 end