@ -53,6 +53,7 @@ typedef struct {
int chunked_post ;
int end_chunked_post ; /**< A flag which indicates if the end of chunked encoding has been sent. */
int end_header ; /**< A flag which indicates we have finished to read POST reply. */
int multiple_requests ; /**< A flag which indicates if we use persistent connections. */
} HTTPContext ;
# define OFFSET(x) offsetof(HTTPContext, x)
@ -61,6 +62,7 @@ typedef struct {
static const AVOption options [ ] = {
{ " chunked_post " , " use chunked transfer-encoding for posts " , OFFSET ( chunked_post ) , AV_OPT_TYPE_INT , { . dbl = 1 } , 0 , 1 , E } ,
{ " headers " , " custom HTTP headers, can override built in default headers " , OFFSET ( headers ) , AV_OPT_TYPE_STRING , { 0 } , 0 , 0 , D | E } ,
{ " multiple_requests " , " use persistent connections " , OFFSET ( multiple_requests ) , AV_OPT_TYPE_INT , { . dbl = 0 } , 0 , 1 , D | E } ,
{ NULL }
} ;
# define HTTP_CLASS(flavor)\
@ -382,9 +384,17 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
if ( ! has_header ( s - > headers , " \r \n Range: " ) & & ! post )
len + = av_strlcatf ( headers + len , sizeof ( headers ) - len ,
" Range: bytes=% " PRId64 " - \r \n " , s - > off ) ;
if ( ! has_header ( s - > headers , " \r \n Connection: " ) )
len + = av_strlcpy ( headers + len , " Connection: close \r \n " ,
sizeof ( headers ) - len ) ;
if ( ! has_header ( s - > headers , " \r \n Connection: " ) ) {
if ( s - > multiple_requests ) {
len + = av_strlcpy ( headers + len , " Connection: keep-alive \r \n " ,
sizeof ( headers ) - len ) ;
} else {
len + = av_strlcpy ( headers + len , " Connection: close \r \n " ,
sizeof ( headers ) - len ) ;
}
}
if ( ! has_header ( s - > headers , " \r \n Host: " ) )
len + = av_strlcatf ( headers + len , sizeof ( headers ) - len ,
" Host: %s \r \n " , hoststr ) ;