Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
65486fd3
Commit
65486fd3
authored
Jan 05, 2016
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
https: improve documentation
parent
7c664b97
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
343 additions
and
47 deletions
+343
-47
doc/Doxyfile.in
doc/Doxyfile.in
+2
-1
modules/access/http/conn.h
modules/access/http/conn.h
+23
-2
modules/access/http/connmgr.h
modules/access/http/connmgr.h
+44
-0
modules/access/http/file.h
modules/access/http/file.h
+73
-8
modules/access/http/h2frame.h
modules/access/http/h2frame.h
+8
-0
modules/access/http/h2output.h
modules/access/http/h2output.h
+8
-0
modules/access/http/hpack.h
modules/access/http/hpack.h
+9
-0
modules/access/http/live.h
modules/access/http/live.h
+9
-0
modules/access/http/message.h
modules/access/http/message.h
+158
-36
modules/access/http/resource.h
modules/access/http/resource.h
+9
-0
No files found.
doc/Doxyfile.in
View file @
65486fd3
...
@@ -759,7 +759,8 @@ WARN_LOGFILE =
...
@@ -759,7 +759,8 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched.
# Note: If this tag is empty the current directory is searched.
INPUT = @top_srcdir@/src \
INPUT = @top_srcdir@/src \
@top_srcdir@/include
@top_srcdir@/include \
@top_srcdir@/modules/access/http
# This tag can be used to specify the character encoding of the source files
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
...
...
modules/access/http/conn.h
View file @
65486fd3
...
@@ -18,6 +18,13 @@
...
@@ -18,6 +18,13 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup http_conn Connections
* HTTP connections
* \ingroup http_connmgr
* @{
*/
struct
vlc_tls
;
struct
vlc_tls
;
struct
vlc_http_conn
;
struct
vlc_http_conn
;
struct
vlc_http_msg
;
struct
vlc_http_msg
;
...
@@ -47,8 +54,22 @@ static inline void vlc_http_conn_release(struct vlc_http_conn *conn)
...
@@ -47,8 +54,22 @@ static inline void vlc_http_conn_release(struct vlc_http_conn *conn)
conn
->
cbs
->
release
(
conn
);
conn
->
cbs
->
release
(
conn
);
}
}
/**
* \defgroup http1 HTTP/1.x
* @{
*/
struct
vlc_http_conn
*
vlc_h1_conn_create
(
struct
vlc_tls
*
,
bool
proxy
);
struct
vlc_http_conn
*
vlc_h1_conn_create
(
struct
vlc_tls
*
,
bool
proxy
);
struct
vlc_http_conn
*
vlc_h2_conn_create
(
struct
vlc_tls
*
);
struct
vlc_http_stream
*
vlc_chunked_open
(
struct
vlc_http_stream
*
,
struct
vlc_http_stream
*
vlc_chunked_open
(
struct
vlc_http_stream
*
,
struct
vlc_tls
*
);
struct
vlc_tls
*
);
/** @} */
/**
* \defgroup h2 HTTP/2.0
* @{
*/
struct
vlc_http_conn
*
vlc_h2_conn_create
(
struct
vlc_tls
*
);
/** @} */
/** @} */
modules/access/http/connmgr.h
View file @
65486fd3
...
@@ -18,19 +18,63 @@
...
@@ -18,19 +18,63 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup http HTTP
* Hyper-Text Transfer Protocol
* \defgroup http_connmgr Connection manager
* HTTP connection management
* \ingroup http
* @{
* \file connmgr.h
*/
struct
vlc_http_mgr
;
struct
vlc_http_mgr
;
struct
vlc_http_msg
;
struct
vlc_http_msg
;
struct
vlc_http_cookie_jar_t
;
struct
vlc_http_cookie_jar_t
;
/**
* Sends an HTTP request
*
* Sends an HTTP request, by either reusing an existing HTTP connection or
* establishing a new one. If succesful, the initial HTTP response header is
* returned.
*
* @param mgr HTTP connection manager
* @param https whether to use HTTPS (true) or unencrypted HTTP (false)
* @param host name of authoritative HTTP server to send the request to
* @param port TCP server port number, or 0 for the default port number
* @param req HTTP request header to send
*
* @return The initial HTTP response header, or NULL in case of failure.
*/
struct
vlc_http_msg
*
vlc_http_mgr_request
(
struct
vlc_http_mgr
*
mgr
,
bool
https
,
struct
vlc_http_msg
*
vlc_http_mgr_request
(
struct
vlc_http_mgr
*
mgr
,
bool
https
,
const
char
*
host
,
unsigned
port
,
const
char
*
host
,
unsigned
port
,
const
struct
vlc_http_msg
*
req
);
const
struct
vlc_http_msg
*
req
);
int
vlc_http_mgr_send_cookies
(
struct
vlc_http_mgr
*
,
struct
vlc_http_msg
*
);
int
vlc_http_mgr_send_cookies
(
struct
vlc_http_mgr
*
,
struct
vlc_http_msg
*
);
void
vlc_http_mgr_recv_cookies
(
struct
vlc_http_mgr
*
mgr
,
bool
https
,
void
vlc_http_mgr_recv_cookies
(
struct
vlc_http_mgr
*
mgr
,
bool
https
,
const
char
*
host
,
const
char
*
path
,
const
char
*
host
,
const
char
*
path
,
const
struct
vlc_http_msg
*
resp
);
const
struct
vlc_http_msg
*
resp
);
/**
* Creates an HTTP connection manager
*
* Allocates an HTTP client connections manager.
*
* @param obj parent VLC object
* @param jar HTTP cookies jar (NULL to disable cookies)
* @param h2c Favor unencrypted HTTP/2 over HTTP/1.1
*/
struct
vlc_http_mgr
*
vlc_http_mgr_create
(
vlc_object_t
*
obj
,
struct
vlc_http_mgr
*
vlc_http_mgr_create
(
vlc_object_t
*
obj
,
struct
vlc_http_cookie_jar_t
*
jar
,
struct
vlc_http_cookie_jar_t
*
jar
,
bool
h2c
);
bool
h2c
);
/**
* Destroys an HTTP connection manager
*
* Deallocates an HTTP client connections manager created by
* vlc_http_msg_destroy(). Any remaining connection is closed and destroyed.
*/
void
vlc_http_mgr_destroy
(
struct
vlc_http_mgr
*
mgr
);
void
vlc_http_mgr_destroy
(
struct
vlc_http_mgr
*
mgr
);
/** @} */
modules/access/http/file.h
View file @
65486fd3
...
@@ -20,20 +20,85 @@
...
@@ -20,20 +20,85 @@
#include <stdint.h>
#include <stdint.h>
/**
* \defgroup http_file Files
* HTTP read-only files
* \ingroup http_res
* @{
*/
struct
vlc_http_file
;
struct
vlc_http_file
;
struct
vlc_http_mgr
;
struct
vlc_http_mgr
;
struct
block_t
;
struct
block_t
;
/**
* Creates an HTTP file.
*
* Allocates a structure for a remote HTTP-served read-only file.
*
* @param url URL of the file to read
* @param ua user agent string (or NULL to ignore)
* @param ref referral URL (or NULL to ignore)
*/
struct
vlc_http_file
*
vlc_http_file_create
(
struct
vlc_http_mgr
*
mgr
,
struct
vlc_http_file
*
vlc_http_file_create
(
struct
vlc_http_mgr
*
mgr
,
const
char
*
url
,
const
char
*
ua
,
const
char
*
url
,
const
char
*
ua
,
const
char
*
ref
);
const
char
*
ref
);
void
vlc_http_file_destroy
(
struct
vlc_http_file
*
file
);
int
vlc_http_file_get_status
(
struct
vlc_http_file
*
file
);
/**
char
*
vlc_http_file_get_redirect
(
struct
vlc_http_file
*
file
);
* Destroys an HTTP file.
*
* Releases all resources allocated or held by the HTTP file object.
*/
void
vlc_http_file_destroy
(
struct
vlc_http_file
*
);
int
vlc_http_file_get_status
(
struct
vlc_http_file
*
);
/**
* Gets redirection URL.
*
* Checks if the file URL lead to a redirection. If so, return the redirect
* location.
*
* @return Heap-allocated URL or NULL if no redirection.
*/
char
*
vlc_http_file_get_redirect
(
struct
vlc_http_file
*
);
/**
* Gets file size.
*
* Determines the file size in bytes.
*
* @return Bytes count or (uintmax_t)-1 if unknown.
*/
uintmax_t
vlc_http_file_get_size
(
struct
vlc_http_file
*
);
/**
* Checks seeking support.
*
* @retval true if file supports seeking
* @retval false if file does not support seeking
*/
bool
vlc_http_file_can_seek
(
struct
vlc_http_file
*
);
/**
* Gets MIME type.
*
* @return Heap-allocated MIME type string, or NULL if unknown.
*/
char
*
vlc_http_file_get_type
(
struct
vlc_http_file
*
);
/**
* Sets the read offset.
*
* @param offset byte offset of next read
* @retval 0 if seek succeeded
* @retval -1 if seek failed
*/
int
vlc_http_file_seek
(
struct
vlc_http_file
*
,
uintmax_t
offset
);
/**
* Reads data.
*/
struct
block_t
*
vlc_http_file_read
(
struct
vlc_http_file
*
);
uintmax_t
vlc_http_file_get_size
(
struct
vlc_http_file
*
file
);
/** @} */
bool
vlc_http_file_can_seek
(
struct
vlc_http_file
*
file
);
char
*
vlc_http_file_get_type
(
struct
vlc_http_file
*
file
);
int
vlc_http_file_seek
(
struct
vlc_http_file
*
file
,
uintmax_t
offset
);
struct
block_t
*
vlc_http_file_read
(
struct
vlc_http_file
*
file
);
modules/access/http/h2frame.h
View file @
65486fd3
...
@@ -21,6 +21,12 @@
...
@@ -21,6 +21,12 @@
#include <stdbool.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdint.h>
/**
* \defgroup h2_frames HTTP/2 frames
* \ingroup h2
* @{
*/
struct
vlc_h2_frame
struct
vlc_h2_frame
{
{
struct
vlc_h2_frame
*
next
;
struct
vlc_h2_frame
*
next
;
...
@@ -128,3 +134,5 @@ const uint8_t *vlc_h2_frame_data_get(const struct vlc_h2_frame *f,
...
@@ -128,3 +134,5 @@ const uint8_t *vlc_h2_frame_data_get(const struct vlc_h2_frame *f,
const struct vlc_h2_frame *: (vlc_h2_frame_data_get)(f, l), \
const struct vlc_h2_frame *: (vlc_h2_frame_data_get)(f, l), \
struct vlc_h2_frame *: (uint8_t *)(vlc_h2_frame_data_get)(f, l))
struct vlc_h2_frame *: (uint8_t *)(vlc_h2_frame_data_get)(f, l))
#endif
#endif
/** @} */
modules/access/http/h2output.h
View file @
65486fd3
...
@@ -18,6 +18,12 @@
...
@@ -18,6 +18,12 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup h2_output HTTP/2 output
* \ingroup h2
* @{
*/
struct
vlc_h2_output
;
struct
vlc_h2_output
;
struct
vlc_h2_frame
;
struct
vlc_h2_frame
;
struct
vlc_tls
;
struct
vlc_tls
;
...
@@ -27,3 +33,5 @@ int vlc_h2_output_send(struct vlc_h2_output *, struct vlc_h2_frame *);
...
@@ -27,3 +33,5 @@ int vlc_h2_output_send(struct vlc_h2_output *, struct vlc_h2_frame *);
struct
vlc_h2_output
*
vlc_h2_output_create
(
struct
vlc_tls
*
,
bool
client
);
struct
vlc_h2_output
*
vlc_h2_output_create
(
struct
vlc_tls
*
,
bool
client
);
void
vlc_h2_output_destroy
(
struct
vlc_h2_output
*
);
void
vlc_h2_output_destroy
(
struct
vlc_h2_output
*
);
/** @} */
modules/access/http/hpack.h
View file @
65486fd3
...
@@ -18,6 +18,13 @@
...
@@ -18,6 +18,13 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup hpack HPACK compression
* HTTP/2 header compression (HPACK)
* \ingroup h2
* @{
*/
struct
hpack_decoder
;
struct
hpack_decoder
;
struct
hpack_decoder
*
hpack_decode_init
(
size_t
header_table_size
);
struct
hpack_decoder
*
hpack_decode_init
(
size_t
header_table_size
);
...
@@ -30,3 +37,5 @@ size_t hpack_encode_hdr_neverindex(uint8_t *restrict buf, size_t size,
...
@@ -30,3 +37,5 @@ size_t hpack_encode_hdr_neverindex(uint8_t *restrict buf, size_t size,
const
char
*
name
,
const
char
*
value
);
const
char
*
name
,
const
char
*
value
);
size_t
hpack_encode
(
uint8_t
*
restrict
buf
,
size_t
size
,
size_t
hpack_encode
(
uint8_t
*
restrict
buf
,
size_t
size
,
const
char
*
const
headers
[][
2
],
unsigned
count
);
const
char
*
const
headers
[][
2
],
unsigned
count
);
/** @} */
modules/access/http/live.h
View file @
65486fd3
...
@@ -18,6 +18,13 @@
...
@@ -18,6 +18,13 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup http_live Live streams
* Trivial HTTP-based live streams
* \ingroup http_res
* @{
*/
struct
vlc_http_live
;
struct
vlc_http_live
;
struct
block_t
;
struct
block_t
;
...
@@ -30,3 +37,5 @@ int vlc_http_live_get_status(struct vlc_http_live *live);
...
@@ -30,3 +37,5 @@ int vlc_http_live_get_status(struct vlc_http_live *live);
char
*
vlc_http_live_get_redirect
(
struct
vlc_http_live
*
live
);
char
*
vlc_http_live_get_redirect
(
struct
vlc_http_live
*
live
);
char
*
vlc_http_live_get_type
(
struct
vlc_http_live
*
live
);
char
*
vlc_http_live_get_type
(
struct
vlc_http_live
*
live
);
block_t
*
vlc_http_live_read
(
struct
vlc_http_live
*
live
);
block_t
*
vlc_http_live_read
(
struct
vlc_http_live
*
live
);
/** @} */
modules/access/http/message.h
View file @
65486fd3
...
@@ -20,6 +20,14 @@
...
@@ -20,6 +20,14 @@
#include <stdint.h>
#include <stdint.h>
/**
* \defgroup http_msg Messages
* HTTP messages, header formatting and parsing
* \ingroup http
* @{
* \file message.h
*/
struct
vlc_http_msg
;
struct
vlc_http_msg
;
struct
block_t
;
struct
block_t
;
struct
vlc_http_cookie_jar_t
;
struct
vlc_http_cookie_jar_t
;
...
@@ -52,51 +60,57 @@ struct vlc_http_msg *vlc_http_resp_create(unsigned status) VLC_USED;
...
@@ -52,51 +60,57 @@ struct vlc_http_msg *vlc_http_resp_create(unsigned status) VLC_USED;
/**
/**
* Destroys an HTTP message.
* Destroys an HTTP message.
*/
*/
void
vlc_http_msg_destroy
(
struct
vlc_http_msg
*
m
);
void
vlc_http_msg_destroy
(
struct
vlc_http_msg
*
);
/**
/**
* Formats a header.
* Formats a header
field
.
*
*
* Adds an HTTP message header to an HTTP request or response.
* Adds an HTTP message header to an HTTP request or response.
* All headers must be formatted before the message is sent.
* All headers must be formatted before the message is sent.
*
*
* @param name header name
* @param name header field name
* @param fmt printf-style format string
* @return 0 on success, -1 on error (out of memory)
* @return 0 on success, -1 on error (out of memory)
*/
*/
int
vlc_http_msg_add_header
(
struct
vlc_http_msg
*
m
,
const
char
*
name
,
int
vlc_http_msg_add_header
(
struct
vlc_http_msg
*
,
const
char
*
name
,
const
char
*
fmt
,
...)
VLC_FORMAT
(
3
,
4
);
const
char
*
fmt
,
...)
VLC_FORMAT
(
3
,
4
);
/**
/**
* Sets the agent
header
.
* Sets the agent
field
.
*
*
* Sets the User-Agent or Server header.
* Sets the User-Agent or Server header
field
.
*/
*/
int
vlc_http_msg_add_agent
(
struct
vlc_http_msg
*
m
,
const
char
*
str
);
int
vlc_http_msg_add_agent
(
struct
vlc_http_msg
*
,
const
char
*
);
const
char
*
vlc_http_msg_get_agent
(
const
struct
vlc_http_msg
*
m
);
/**
* Gets the agent field.
*
* Gets the User-Agent or Server header field.
*/
const
char
*
vlc_http_msg_get_agent
(
const
struct
vlc_http_msg
*
);
/**
/**
* Parses a timestamp header.
* Parses a timestamp header
field
.
*
*
* @param name header field name
* @param name header field name
* @return a timestamp value, or -1 on error.
* @return a timestamp value, or -1 on error.
*/
*/
time_t
vlc_http_msg_get_time
(
const
struct
vlc_http_msg
*
m
,
const
char
*
name
);
time_t
vlc_http_msg_get_time
(
const
struct
vlc_http_msg
*
,
const
char
*
name
);
/**
/**
* Adds a timestamp header.
* Adds a timestamp header
field
.
*
*
* @param name header field name
* @param name header field name
* @param t pointer to timestamp
* @param t pointer to timestamp
* @return 0 on success, -1 on error (errno is set accordingly)
* @return 0 on success, -1 on error (errno is set accordingly)
*/
*/
int
vlc_http_msg_add_time
(
struct
vlc_http_msg
*
m
,
const
char
*
name
,
int
vlc_http_msg_add_time
(
struct
vlc_http_msg
*
,
const
char
*
name
,
const
time_t
*
t
);
const
time_t
*
t
);
/**
/**
* Adds a Date header.
* Adds a Date header
field
.
*/
*/
int
vlc_http_msg_add_atime
(
struct
vlc_http_msg
*
m
);
int
vlc_http_msg_add_atime
(
struct
vlc_http_msg
*
);
/**
/**
* Gets message date.
* Gets message date.
...
@@ -105,7 +119,7 @@ int vlc_http_msg_add_atime(struct vlc_http_msg *m);
...
@@ -105,7 +119,7 @@ int vlc_http_msg_add_atime(struct vlc_http_msg *m);
*
*
* @return a time value on success, -1 on error.
* @return a time value on success, -1 on error.
*/
*/
time_t
vlc_http_msg_get_atime
(
const
struct
vlc_http_msg
*
m
);
time_t
vlc_http_msg_get_atime
(
const
struct
vlc_http_msg
*
);
/**
/**
* Gets resource date.
* Gets resource date.
...
@@ -115,7 +129,7 @@ time_t vlc_http_msg_get_atime(const struct vlc_http_msg *m);
...
@@ -115,7 +129,7 @@ time_t vlc_http_msg_get_atime(const struct vlc_http_msg *m);
*
*
* @return a time value on success, -1 on error.
* @return a time value on success, -1 on error.
*/
*/
time_t
vlc_http_msg_get_mtime
(
const
struct
vlc_http_msg
*
m
);
time_t
vlc_http_msg_get_mtime
(
const
struct
vlc_http_msg
*
);
/**
/**
* Gets retry timeout.
* Gets retry timeout.
...
@@ -126,7 +140,7 @@ time_t vlc_http_msg_get_mtime(const struct vlc_http_msg *m);
...
@@ -126,7 +140,7 @@ time_t vlc_http_msg_get_mtime(const struct vlc_http_msg *m);
*
*
* @return the time in seconds, zero if the date is overdue or on error.
* @return the time in seconds, zero if the date is overdue or on error.
*/
*/
unsigned
vlc_http_msg_get_retry_after
(
const
struct
vlc_http_msg
*
m
);
unsigned
vlc_http_msg_get_retry_after
(
const
struct
vlc_http_msg
*
);
void
vlc_http_msg_get_cookies
(
const
struct
vlc_http_msg
*
,
void
vlc_http_msg_get_cookies
(
const
struct
vlc_http_msg
*
,
struct
vlc_http_cookie_jar_t
*
,
bool
secure
,
struct
vlc_http_cookie_jar_t
*
,
bool
secure
,
...
@@ -135,23 +149,53 @@ int vlc_http_msg_add_cookies(struct vlc_http_msg *,
...
@@ -135,23 +149,53 @@ int vlc_http_msg_add_cookies(struct vlc_http_msg *,
struct
vlc_http_cookie_jar_t
*
);
struct
vlc_http_cookie_jar_t
*
);
/**
/**
* Looks up an
HTTP header
.
* Looks up an
header field
.
*
*
* Finds an HTTP header
by (case-insensitive) name inside an HTTP message.
* Finds an HTTP header
field by (case-insensitive) name inside an HTTP
*
If the message has more than one matching header, their value are folded
*
message header. If the message has more than one matching field, their value
*
(as permitted by
specifications).
*
are folded (as permitted by protocol
specifications).
*
*
* @return header value (valid until message is destroyed),
* @return header
field
value (valid until message is destroyed),
* or NULL if no
header
s matched
* or NULL if no
field
s matched
*/
*/
const
char
*
vlc_http_msg_get_header
(
const
struct
vlc_http_msg
*
m
,
const
char
*
vlc_http_msg_get_header
(
const
struct
vlc_http_msg
*
,
const
char
*
name
);
const
char
*
name
);
/**
* Gets response status code.
*
* @return status code (e.g. 404), or negative if request
*/
int
vlc_http_msg_get_status
(
const
struct
vlc_http_msg
*
m
);
int
vlc_http_msg_get_status
(
const
struct
vlc_http_msg
*
m
);
const
char
*
vlc_http_msg_get_method
(
const
struct
vlc_http_msg
*
m
);
const
char
*
vlc_http_msg_get_scheme
(
const
struct
vlc_http_msg
*
m
);
/**
const
char
*
vlc_http_msg_get_authority
(
const
struct
vlc_http_msg
*
m
);
* Gets request method.
const
char
*
vlc_http_msg_get_path
(
const
struct
vlc_http_msg
*
m
);
*
* @return request method (e.g. "GET"), or NULL if response
*/
const
char
*
vlc_http_msg_get_method
(
const
struct
vlc_http_msg
*
);
/**
* Gets request scheme.
*
* @return request scheme (e.g. "https"), or NULL if absent
*/
const
char
*
vlc_http_msg_get_scheme
(
const
struct
vlc_http_msg
*
);
/**
* Gets request authority.
*
* @return request authority (e.g. "www.example.com:8080"),
* or NULL if response
*/
const
char
*
vlc_http_msg_get_authority
(
const
struct
vlc_http_msg
*
);
/**
* Gets request absolute path.
*
* @return request absolute path (e.g. "/index.html"), or NULL if absent
*/
const
char
*
vlc_http_msg_get_path
(
const
struct
vlc_http_msg
*
);
/**
/**
* Looks up a token in a header field.
* Looks up a token in a header field.
...
@@ -168,16 +212,22 @@ const char *vlc_http_msg_get_token(const struct vlc_http_msg *,
...
@@ -168,16 +212,22 @@ const char *vlc_http_msg_get_token(const struct vlc_http_msg *,
/**
/**
* Finds next token.
* Finds next token.
*
*
* Finds the following token in a HTTP field value.
* Finds the following token in a HTTP header field value.
*
* @return First character of the following token,
* or NULL if there are no further tokens
*/
*/
const
char
*
vlc_http_next_token
(
const
char
*
);
const
char
*
vlc_http_next_token
(
const
char
*
);
/**
/**
* Gets HTTP payload length.
* Gets HTTP payload length.
*
*
* Determines the total length (in bytes) of the payload associated with the
* HTTP message.
*
* @return byte length, or (uintmax_t)-1 if unknown.
* @return byte length, or (uintmax_t)-1 if unknown.
*/
*/
uintmax_t
vlc_http_msg_get_size
(
const
struct
vlc_http_msg
*
m
);
uintmax_t
vlc_http_msg_get_size
(
const
struct
vlc_http_msg
*
);
/**
/**
* Gets next response headers.
* Gets next response headers.
...
@@ -188,9 +238,9 @@ uintmax_t vlc_http_msg_get_size(const struct vlc_http_msg *m);
...
@@ -188,9 +238,9 @@ uintmax_t vlc_http_msg_get_size(const struct vlc_http_msg *m);
*
*
* @param m current response headers (destroyed by the call)
* @param m current response headers (destroyed by the call)
*
*
* @return next response headers or NULL on error
.
* @return next response headers or NULL on error
*/
*/
struct
vlc_http_msg
*
vlc_http_msg_iterate
(
struct
vlc_http_msg
*
m
)
VLC_USED
;
struct
vlc_http_msg
*
vlc_http_msg_iterate
(
struct
vlc_http_msg
*
)
VLC_USED
;
/**
/**
* Gets final response headers.
* Gets final response headers.
...
@@ -202,9 +252,9 @@ struct vlc_http_msg *vlc_http_msg_iterate(struct vlc_http_msg *m) VLC_USED;
...
@@ -202,9 +252,9 @@ struct vlc_http_msg *vlc_http_msg_iterate(struct vlc_http_msg *m) VLC_USED;
* @param m current response headers or NULL
* @param m current response headers or NULL
*
*
* @return the final response headers (m if it was already final),
* @return the final response headers (m if it was already final),
* NULL if the parameter was NULL, or NULL on error
.
* NULL if the parameter was NULL, or NULL on error
*/
*/
struct
vlc_http_msg
*
vlc_http_msg_get_final
(
struct
vlc_http_msg
*
m
)
VLC_USED
;
struct
vlc_http_msg
*
vlc_http_msg_get_final
(
struct
vlc_http_msg
*
)
VLC_USED
;
/**
/**
* Receives HTTP data.
* Receives HTTP data.
...
@@ -215,15 +265,38 @@ struct vlc_http_msg *vlc_http_msg_get_final(struct vlc_http_msg *m) VLC_USED;
...
@@ -215,15 +265,38 @@ struct vlc_http_msg *vlc_http_msg_get_final(struct vlc_http_msg *m) VLC_USED;
*
*
* @return data block, or NULL on end-of-stream or error
* @return data block, or NULL on end-of-stream or error
*/
*/
struct
block_t
*
vlc_http_msg_read
(
struct
vlc_http_msg
*
m
)
VLC_USED
;
struct
block_t
*
vlc_http_msg_read
(
struct
vlc_http_msg
*
)
VLC_USED
;
/** @} */
/**
* \defgroup http_stream Streams
* \ingroup http_connmgr
*
* HTTP request/response streams
*
* A stream is initiated by a client-side request header. It includes a
* final response header, possibly preceded by one or more continuation
* response headers. After the response header, a stream usually carries
* a response payload.
*
* A stream may also carry a request payload (this is not supported so far).
*
* The HTTP stream constitutes the interface between an HTTP connection and
* the higher-level HTTP messages layer.
* @{
*/
/* Interfaces to lower layers */
struct
vlc_http_stream
;
struct
vlc_http_stream
;
void
vlc_http_msg_attach
(
struct
vlc_http_msg
*
m
,
struct
vlc_http_stream
*
s
);
void
vlc_http_msg_attach
(
struct
vlc_http_msg
*
m
,
struct
vlc_http_stream
*
s
);
struct
vlc_http_msg
*
vlc_http_msg_get_initial
(
struct
vlc_http_stream
*
s
)
struct
vlc_http_msg
*
vlc_http_msg_get_initial
(
struct
vlc_http_stream
*
s
)
VLC_USED
;
VLC_USED
;
/** HTTP stream callbacks
*
* Connection-specific callbacks for stream manipulation
*/
struct
vlc_http_stream_cbs
struct
vlc_http_stream_cbs
{
{
struct
vlc_http_msg
*
(
*
read_headers
)(
struct
vlc_http_stream
*
);
struct
vlc_http_msg
*
(
*
read_headers
)(
struct
vlc_http_stream
*
);
...
@@ -231,34 +304,83 @@ struct vlc_http_stream_cbs
...
@@ -231,34 +304,83 @@ struct vlc_http_stream_cbs
void
(
*
close
)(
struct
vlc_http_stream
*
,
bool
abort
);
void
(
*
close
)(
struct
vlc_http_stream
*
,
bool
abort
);
};
};
/** HTTP stream */
struct
vlc_http_stream
struct
vlc_http_stream
{
{
const
struct
vlc_http_stream_cbs
*
cbs
;
const
struct
vlc_http_stream_cbs
*
cbs
;
};
};
/**
* Reads one message header.
*
* Reads the next message header of an HTTP stream from the network.
* There is always exactly one request header per stream. There is usually
* one response header per stream, except for continuation (1xx) headers.
*
* @warning The caller is responsible for reading headers at appropriate
* times as intended by the protocol. Failure to do so may result in protocol
* dead lock, and/or (HTTP 1.x) connection failure.
*/
static
inline
static
inline
struct
vlc_http_msg
*
vlc_http_stream_read_headers
(
struct
vlc_http_stream
*
s
)
struct
vlc_http_msg
*
vlc_http_stream_read_headers
(
struct
vlc_http_stream
*
s
)
{
{
return
s
->
cbs
->
read_headers
(
s
);
return
s
->
cbs
->
read_headers
(
s
);
}
}
/**
* Reads message payload data.
*
* Reads the next block of data from the message payload of an HTTP stream.
*/
static
inline
struct
block_t
*
vlc_http_stream_read
(
struct
vlc_http_stream
*
s
)
static
inline
struct
block_t
*
vlc_http_stream_read
(
struct
vlc_http_stream
*
s
)
{
{
return
s
->
cbs
->
read
(
s
);
return
s
->
cbs
->
read
(
s
);
}
}
/**
* Closes an HTTP stream.
*
* Releases all resources associated or held by an HTTP stream. Any unread
* header or data is discarded.
*/
static
inline
void
vlc_http_stream_close
(
struct
vlc_http_stream
*
s
,
bool
abort
)
static
inline
void
vlc_http_stream_close
(
struct
vlc_http_stream
*
s
,
bool
abort
)
{
{
s
->
cbs
->
close
(
s
,
abort
);
s
->
cbs
->
close
(
s
,
abort
);
}
}
/** @} */
/**
* Formats an HTTP 1.1 message header.
*
* Formats an message header in HTTP 1.x format, using HTTP version 1.1.
*
* @param m message to format/serialize
* @param lenp location to write the length of the formatted message in bytes
* [OUT]
* @param proxied whether the message is meant for sending to a proxy rather
* than an origin (only relevant for requests)
* @return A heap-allocated nul-terminated string or *lenp bytes,
* or NULL on error
*/
char
*
vlc_http_msg_format
(
const
struct
vlc_http_msg
*
m
,
size_t
*
restrict
lenp
,
char
*
vlc_http_msg_format
(
const
struct
vlc_http_msg
*
m
,
size_t
*
restrict
lenp
,
bool
proxied
)
VLC_USED
;
bool
proxied
)
VLC_USED
;
/**
* Parses an HTTP 1.1 message header.
*/
struct
vlc_http_msg
*
vlc_http_msg_headers
(
const
char
*
msg
)
VLC_USED
;
struct
vlc_http_msg
*
vlc_http_msg_headers
(
const
char
*
msg
)
VLC_USED
;
struct
vlc_h2_frame
;
struct
vlc_h2_frame
;
/**
* Formats an HTTP 2.0 HEADER frame.
*/
struct
vlc_h2_frame
*
vlc_http_msg_h2_frame
(
const
struct
vlc_http_msg
*
m
,
struct
vlc_h2_frame
*
vlc_http_msg_h2_frame
(
const
struct
vlc_http_msg
*
m
,
uint_fast32_t
stream_id
,
bool
eos
);
uint_fast32_t
stream_id
,
bool
eos
);
/**
* Parses an HTTP 2.0 header table.
*/
struct
vlc_http_msg
*
vlc_http_msg_h2_headers
(
unsigned
count
,
struct
vlc_http_msg
*
vlc_http_msg_h2_headers
(
unsigned
count
,
const
char
*
const
headers
[][
2
]);
const
char
*
const
headers
[][
2
]);
modules/access/http/resource.h
View file @
65486fd3
...
@@ -18,6 +18,13 @@
...
@@ -18,6 +18,13 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
*****************************************************************************/
/**
* \defgroup http_res Resources
* Remote HTTP resources identified by a URL
* \ingroup http
* @{
*/
struct
vlc_http_msg
;
struct
vlc_http_msg
;
struct
vlc_http_mgr
;
struct
vlc_http_mgr
;
...
@@ -44,3 +51,5 @@ char *vlc_http_res_get_redirect(const struct vlc_http_resource *,
...
@@ -44,3 +51,5 @@ char *vlc_http_res_get_redirect(const struct vlc_http_resource *,
const
struct
vlc_http_msg
*
resp
);
const
struct
vlc_http_msg
*
resp
);
char
*
vlc_http_res_get_type
(
const
struct
vlc_http_msg
*
resp
);
char
*
vlc_http_res_get_type
(
const
struct
vlc_http_msg
*
resp
);
struct
block_t
*
vlc_http_res_read
(
struct
vlc_http_msg
*
resp
);
struct
block_t
*
vlc_http_res_read
(
struct
vlc_http_msg
*
resp
);
/** @} */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment