   @doc """
   Forwards a response.
 
-  The topmost Via header of the response is removed before forwarding.
+  You should check and remove the topmost Via before calling this function.
 
   The response will find its way back to an existing server transaction, if one
   exists, or will be sent directly to the network transport otherwise.

  def forward_request(%Message{start_line: %RequestLine{}} = request) do
    if request.start_line.method == :ack do
      request
      |> do_add_max_forwards()
      |> do_add_hash_branch()
      |> Transports.send_message(nil)
    else
      request
      |> do_add_max_forwards()
      |> Transactions.send_request()
    end
  end

  defp do_add_max_forwards(message) do
    if message.headers |> Map.has_key?(:max_forwards) do
      max_fws = message.headers.max_forwards
      if max_fws <= 0 do


  A proxy must insert a Via header field value before the existing request Via
  header field values. If the `branch` parameter does not start with the magic
  cookie `"z9hG4bK"`, one will be added.
  """
  @spec add_via(Message.request, Message.protocol, host :: String.t,
                dport :: integer, branch :: String.t) :: Message.request
