Merge commit '5c53bf7aaf03748464cbf978bffe7ffdb71112b1'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Sep 2013 08:13:13 +0000 (10:13 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Sep 2013 08:38:04 +0000 (10:38 +0200)
* commit '5c53bf7aaf03748464cbf978bffe7ffdb71112b1':
  http: Pass options through to the nested protocol

Conflicts:
libavformat/http.c

See: b6f435fbc87c024f8403fca69e6e6b98bccf93fa
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/http.c

@@@ -67,13 -62,6 +67,12 @@@ typedef struct 
      int multiple_requests;  /**< A flag which indicates if we use persistent connections. */
      uint8_t *post_data;
      int post_datalen;
-     int rw_timeout;
 +    int is_akamai;
 +    char *mime_type;
 +    char *cookies;          ///< holds newline (\n) delimited Set-Cookie header field values (without the "Set-Cookie: " field name)
 +    int icy;
 +    char *icy_metadata_headers;
 +    char *icy_metadata_packet;
  #if CONFIG_ZLIB
      int compressed;
      z_stream inflate_stream;
  #define OFFSET(x) offsetof(HTTPContext, x)
  #define D AV_OPT_FLAG_DECODING_PARAM
  #define E AV_OPT_FLAG_ENCODING_PARAM
 +#define DEFAULT_USER_AGENT "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION)
  static const AVOption options[] = {
 +{"seekable", "control seekability of connection", OFFSET(seekable), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, D },
  {"chunked_post", "use chunked transfer-encoding for posts", OFFSET(chunked_post), AV_OPT_TYPE_INT, {.i64 = 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 },
 +{"headers", "set custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
 +{"content_type", "force a content type", OFFSET(content_type), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
 +{"user-agent", "override User-Agent header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = DEFAULT_USER_AGENT}, 0, 0, D },
  {"multiple_requests", "use persistent connections", OFFSET(multiple_requests), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, D|E },
 -{"post_data", "custom HTTP post data", OFFSET(post_data), AV_OPT_TYPE_BINARY, .flags = D|E },
 +{"post_data", "set custom HTTP post data", OFFSET(post_data), AV_OPT_TYPE_BINARY, .flags = D|E },
- {"timeout", "set timeout of socket I/O operations", OFFSET(rw_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, D|E },
 +{"mime_type", "set MIME type", OFFSET(mime_type), AV_OPT_TYPE_STRING, {0}, 0, 0, 0 },
 +{"cookies", "set cookies to be sent in applicable future requests, use newline delimited Set-Cookie HTTP field value syntax", OFFSET(cookies), AV_OPT_TYPE_STRING, {0}, 0, 0, 0 },
 +{"icy", "request ICY metadata", OFFSET(icy), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, D },
 +{"icy_metadata_headers", "return ICY metadata headers", OFFSET(icy_metadata_headers), AV_OPT_TYPE_STRING, {0}, 0, 0, 0 },
 +{"icy_metadata_packet", "return current ICY metadata packet", OFFSET(icy_metadata_packet), AV_OPT_TYPE_STRING, {0}, 0, 0, 0 },
  {NULL}
  };
  #define HTTP_CLASS(flavor)\
@@@ -233,22 -209,25 +225,29 @@@ static int http_open_cnx(URLContext *h
  int ff_http_do_new_request(URLContext *h, const char *uri)
  {
      HTTPContext *s = h->priv_data;
+     AVDictionary *options = NULL;
+     int ret;
  
      s->off = 0;
 +    s->icy_data_read = 0;
      av_strlcpy(s->location, uri, sizeof(s->location));
  
-     return http_open_cnx(h);
+     av_dict_copy(&options, s->chained_options, 0);
+     ret = http_open_cnx(h, &options);
+     av_dict_free(&options);
+     return ret;
  }
  
- static int http_open(URLContext *h, const char *uri, int flags)
+ static int http_open(URLContext *h, const char *uri, int flags,
+                      AVDictionary **options)
  {
      HTTPContext *s = h->priv_data;
+     int ret;
  
 -    h->is_streamed = 1;
 +    if( s->seekable == 1 )
 +        h->is_streamed = 0;
 +    else
 +        h->is_streamed = 1;
  
      s->filesize = -1;
      av_strlcpy(s->location, uri, sizeof(s->location));
@@@ -878,7 -688,8 +882,8 @@@ static int http_close(URLContext *h
      }
  
      if (s->hd)
 -        ffurl_close(s->hd);
 +        ffurl_closep(&s->hd);
+     av_dict_free(&s->chained_options);
      return ret;
  }
  
@@@ -975,13 -790,8 +984,11 @@@ static int http_proxy_open(URLContext *
      HTTPAuthType cur_auth_type;
      char *authstr;
      int new_loc;
-     AVDictionary *opts = NULL;
-     char opts_format[20];
  
 -    h->is_streamed = 1;
 +    if( s->seekable == 1 )
 +        h->is_streamed = 0;
 +    else
 +        h->is_streamed = 1;
  
      av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port,
                   pathbuf, sizeof(pathbuf), uri);