Creates a #SoupMessageHeaders. (#SoupMessage does this automatically for its own headers. You would only need to use this method if you are manually parsing or generating message headers.)
the type of headers
Appends a new header with name name
and value value
to hdrs
. (If
there is an existing header with name name,
then this creates a
second one, which is only allowed for list-valued headers; see also
soup_message_headers_replace().)
The caller is expected to make sure that name
and value
are
syntactically correct.
the header name to add
the new value of name
Removes all the headers listed in the Connection header.
Clears hdrs
.
Calls func
once for each header value in hdrs
.
Beware that unlike soup_message_headers_get_list(), this processes the headers in exactly the way they were added, rather than concatenating multiple same-named headers into a single value. (This is intentional; it ensures that if you call soup_message_headers_append() multiple times with the same name, then the I/O code will output multiple copies of the header when sending the message to the remote implementation, which may be required for interoperability in some cases.)
You may not modify the headers from func
.
callback function to run for each header
Looks up the "Content-Disposition" header in hdrs,
parses it, and
returns its value in *disposition
and *params
. params
can be
%NULL if you are only interested in the disposition-type.
In HTTP, the most common use of this header is to set a
disposition-type of "attachment", to suggest to the browser that a
response should be saved to disk rather than displayed in the
browser. If params
contains a "filename" parameter, this is a
suggestion of a filename to use. (If the parameter value in the
header contains an absolute or relative path, libsoup will truncate
it down to just the final path component, so you do not need to
test this yourself.)
Content-Disposition is also used in "multipart/form-data", however this is handled automatically by #SoupMultipart and the associated form methods.
Gets the message body length that hdrs
declare. This will only
be non-0 if soup_message_headers_get_encoding() returns
%SOUP_ENCODING_CONTENT_LENGTH.
Parses hdrs'
s Content-Range header and returns it in start,
end,
and total_length
. If the total length field in the header
was specified as "*", then total_length
will be set to -1.
Looks up the "Content-Type" header in hdrs,
parses it, and returns
its value in *content_type
and *params
. params
can be %NULL if you
are only interested in the content type itself.
Gets the expectations declared by hdrs'
s "Expect" header.
Currently this will either be %SOUP_EXPECTATION_CONTINUE or
%SOUP_EXPECTATION_UNRECOGNIZED.
Gets the type of headers.
Gets the value of header name
in hdrs
. Use this for headers whose
values are comma-delimited lists, and which are therefore allowed
to appear multiple times in the headers. For non-list-valued
headers, use soup_message_headers_get_one().
If name
appears multiple times in hdrs,
soup_message_headers_get_list() will concatenate all of the values
together, separated by commas. This is sometimes awkward to parse
(eg, WWW-Authenticate, Set-Cookie), but you have to be able to deal
with it anyway, because the HTTP spec explicitly states that this
transformation is allowed, and so an upstream proxy could do the
same thing.
header name
Gets the value of header name
in hdrs
. Use this for headers whose
values are
If hdrs
does erroneously contain multiple copies of the header, it
is not defined which one will be returned. (Ideally, it will return
whichever one makes libsoup most compatible with other HTTP
implementations.)
header name
Parses hdrs'
s Range header and returns an array of the requested
byte ranges. The returned array must be freed with
soup_message_headers_free_ranges().
If total_length
is non-0, its value will be used to adjust the
returned ranges to have explicit start and end values, and the
returned ranges will be sorted and non-overlapping. If
total_length
is 0, then some ranges may have an end value of -1,
as described under #SoupRange, and some of the ranges may be
redundant.
Beware that even if given a total_length,
this function does not
check that the ranges are satisfiable.
The only time you need to process the Range header yourself is if either you need to stream the response body rather than returning it all at once, or you do not already have the complete response body available, and only want to generate the parts that were actually requested by the client.
the total_length of the response body
Checks whether the list-valued header name
is present in hdrs,
and contains a case-insensitive match for token
.
(If name
is present in hdrs,
then this is equivalent to calling
soup_header_contains() on its value.)
header name
token to look for
Checks whether the header name
is present in hdrs
and is
(case-insensitively) equal to value
.
header name
expected value
Atomically increments the reference count of hdrs
by one.
Removes name
from hdrs
. If there are multiple values for name,
they are all removed.
the header name to remove
Replaces the value of the header name
in hdrs
with value
. (See
also soup_message_headers_append().)
The caller is expected to make sure that name
and value
are
syntactically correct.
the header name to replace
the new value of name
Sets the "Content-Disposition" header in hdrs
to disposition,
optionally with additional parameters specified in params
.
See soup_message_headers_get_content_disposition() for a discussion of how Content-Disposition is used in HTTP.
the disposition-type
additional parameters, or %NULL
Sets the message body length that hdrs
will declare, and sets
hdrs'
s encoding to %SOUP_ENCODING_CONTENT_LENGTH.
You do not normally need to call this; if hdrs
is set to use
Content-Length encoding, libsoup will automatically set its
Content-Length header for you immediately before sending the
headers. One situation in which this method is useful is when
generating the response to a HEAD request; Calling
soup_message_headers_set_content_length() allows you to put the
correct content length into the response without needing to waste
memory by filling in a response body which won't actually be sent.
the message body length
Sets hdrs'
s Content-Range header according to the given values.
(Note that total_length
is the total length of the entire resource
that this is a range of, not simply end
- start
+ 1.)
the start of the range
the end of the range
the total length of the resource, or -1 if unknown
Sets the "Content-Type" header in hdrs
to content_type,
optionally with additional parameters specified in params
.
the MIME type
additional parameters, or %NULL
Sets hdrs'
s "Expect" header according to expectations
.
Currently %SOUP_EXPECTATION_CONTINUE is the only known expectation value. You should set this value on a request if you are sending a large message body (eg, via POST or PUT), and want to give the server a chance to reject the request after seeing just the headers (eg, because it will require authentication before allowing you to post, or because you're POSTing to a URL that doesn't exist). This saves you from having to transmit the large request body when the server is just going to ignore it anyway.
the expectations to set
Sets hdrs'
s Range header to request the indicated range.
start
and end
are interpreted as in a #SoupRange.
If you need to request multiple ranges, use soup_message_headers_set_ranges().
the start of the range to request
the end of the range to request
Atomically decrements the reference count of hdrs
by one.
When the reference count reaches zero, the resources allocated by
hdrs
are freed
Creates a #SoupMessageHeaders. (#SoupMessage does this automatically for its own headers. You would only need to use this method if you are manually parsing or generating message headers.)
the type of headers
The HTTP message headers associated with a request or response.