static AZ_NODISCARD az_result _az_http_client_curl_send_request_impl_process()

in sdk/src/azure/platform/az_curl.c [548:597]


static AZ_NODISCARD az_result _az_http_client_curl_send_request_impl_process(
    CURL* ref_curl,
    az_http_request const* request,
    az_http_response* ref_response)
{
  _az_PRECONDITION_NOT_NULL(ref_curl);
  _az_PRECONDITION_NOT_NULL(request);

  az_result result = AZ_ERROR_ARG;

  struct curl_slist* list = NULL;
  _az_RETURN_IF_FAILED(_az_http_client_curl_setup_headers(ref_curl, &list, request));

  _az_RETURN_IF_FAILED(_az_http_client_curl_setup_url(ref_curl, request));

  _az_RETURN_IF_FAILED(_az_http_client_curl_setup_response_redirect(ref_curl, ref_response));

  az_http_method method;
  _az_RETURN_IF_FAILED(az_http_request_get_method(request, &method));

  if (az_span_is_content_equal(method, az_http_method_get()))
  {
    result = _az_http_client_curl_send_get_request(ref_curl);
  }
  else if (az_span_is_content_equal(method, az_http_method_delete()))
  {
    result = _az_http_client_curl_send_delete_request(ref_curl);
  }
  else if (az_span_is_content_equal(method, az_http_method_post()))
  {
    _az_RETURN_IF_FAILED(_az_http_client_curl_add_expect_header(ref_curl, &list));
    result = _az_http_client_curl_send_post_request(ref_curl, request);
  }
  else if (az_span_is_content_equal(method, az_http_method_put()))
  {
    // As of CURL 7.12.1 CURLOPT_PUT is deprecated.  PUT requests should be made using
    // CURLOPT_UPLOAD
    _az_RETURN_IF_FAILED(_az_http_client_curl_add_expect_header(ref_curl, &list));
    result = _az_http_client_curl_send_upload_request(ref_curl, request);
  }
  else
  {
    return AZ_ERROR_HTTP_INVALID_METHOD_VERB;
  }

  // Clean custom headers previously appended
  curl_slist_free_all(list);

  return result;
}