Function libnghttp2_sys::nghttp2_submit_response [−][src]
pub unsafe extern "C" fn nghttp2_submit_response(
session: *mut nghttp2_session,
stream_id: i32,
nva: *const nghttp2_nv,
nvlen: usize,
data_prd: *const nghttp2_data_provider
) -> c_int
@function
Submits response HEADERS frame and optionally one or more DATA frames against the stream |stream_id|.
The |nva| is an array of name/value pair :type:nghttp2_nv
with
|nvlen| elements. The application is responsible to include
required pseudo-header fields (header field whose name starts with
“:”) in |nva| and must place pseudo-headers before regular header
fields.
This function creates copies of all name/value pairs in |nva|. It
also lower-cases all names in |nva|. The order of elements in
|nva| is preserved. For header fields with
:enum:NGHTTP2_NV_FLAG_NO_COPY_NAME
and
:enum:NGHTTP2_NV_FLAG_NO_COPY_VALUE
are set, header field name
and value are not copied respectively. With
:enum:NGHTTP2_NV_FLAG_NO_COPY_NAME
, application is responsible to
pass header field name in lowercase. The application should
maintain the references to them until
:type:nghttp2_on_frame_send_callback
or
:type:nghttp2_on_frame_not_send_callback
is called.
HTTP/2 specification has requirement about header fields in the response HEADERS. See the specification for more details.
If |data_prd| is not NULL
, it provides data which will be sent
in subsequent DATA frames. This function does not take ownership
of the |data_prd|. The function copies the members of the
|data_prd|. If |data_prd| is NULL
, HEADERS will have
END_STREAM flag set.
This method can be used as normal HTTP response and push response.
When pushing a resource using this function, the |session| must be
configured using nghttp2_session_server_new()
or its variants and
the target stream denoted by the |stream_id| must be reserved using
nghttp2_submit_push_promise()
.
To send non-final response headers (e.g., HTTP status 101), don’t
use this function because this function half-closes the outbound
stream. Instead, use nghttp2_submit_headers()
for this purpose.
This function returns 0 if it succeeds, or one of the following negative error codes:
:enum:NGHTTP2_ERR_NOMEM
Out of memory.
:enum:NGHTTP2_ERR_INVALID_ARGUMENT
The |stream_id| is 0.
:enum:NGHTTP2_ERR_DATA_EXIST
DATA or HEADERS has been already submitted and not fully
processed yet. Normally, this does not happen, but when
application wrongly calls nghttp2_submit_response()
twice,
this may happen.
:enum:NGHTTP2_ERR_PROTO
The |session| is client session.
.. warning::
Calling this function twice for the same stream ID may lead to program crash. It is generally considered to a programming error to commit response twice.