[FFmpeg-devel] [PATCH] avformat/http: remove duplicate user-agent option

Steven Liu lingjiujianke at gmail.com
Thu Sep 15 19:30:39 EEST 2016


2016-09-16 0:21 GMT+08:00 Clément Bœsch <u at pkh.me>:

> On Fri, Sep 16, 2016 at 12:04:34AM +0800, Steven Liu wrote:
> > 2016-09-15 23:42 GMT+08:00 Clément Bœsch <u at pkh.me>:
> >
> > > On Thu, Sep 15, 2016 at 05:39:25PM +0200, Nicolas George wrote:
> > > > Le decadi 30 fructidor, an CCXXIV, Clement Boesch a écrit :
> > > > > Yes, surrounded by the #ifdefery so it will go away with the
> option.
> > > > >
> > > > > Note: use av_strdup() to transfer from one field to the other
> > > >
> > > > Another possibility would be to implement AV_OPT_FLAG_DEPRECATED and
> let
> > > the
> > > > options system itself print the warning.
> > > >
> > >
> > > That's not a bad idea; you might need to add a field to redirect to
> > > the new option though.
> > >
> > > --
> > > Clément B.
> > > _______________________________________________
> > >
> >
> >
> > Hi guys,
> >
> >     are you mean like this?
> >
> > localhost:xxx StevenLiu$ make
> > CC libavformat/http.o
> > src/libavformat/http.c:1041:27: warning: 'user_agent_deprecated' is
> > deprecated [-Wdeprecated-declarations]
> >     if (av_strncasecmp(s->user_agent_deprecated, DEFAULT_USER_AGENT,
> > strlen(DEFAULT_USER_AGENT))) {
> >                           ^
> > src/libavformat/http.c:74:32: note: 'user_agent_deprecated' has been
> > explicitly marked deprecated here
> >     attribute_deprecated char *user_agent_deprecated;
> >                                ^
> > src/libavformat/http.c:1043:38: warning: 'user_agent_deprecated' is
> > deprecated [-Wdeprecated-declarations]
> >         s->user_agent = av_strdup(s->user_agent_deprecated);
> >                                      ^
> > src/libavformat/http.c:74:32: note: 'user_agent_deprecated' has been
> > explicitly marked deprecated here
> >     attribute_deprecated char *user_agent_deprecated;
> >                                ^
> > 2 warnings generated.
> > AR libavformat/libavformat.a
> >
> >
> > and the modify like this?
> >
> >
> > localhost:xxx StevenLiu$ git diff
> > diff --git a/libavformat/http.c b/libavformat/http.c
> > index adb3d92..df9cf1a 100644
> > --- a/libavformat/http.c
> > +++ b/libavformat/http.c
> > @@ -71,6 +71,7 @@ typedef struct HTTPContext {
> >      char *headers;
> >      char *mime_type;
> >      char *user_agent;
> > +    attribute_deprecated char *user_agent_deprecated;
>
> not attribute_deprecated
>
> #if FF_API_HTTP_USER_AGENT
> char *user_agent_deprecated;
> #endif
>
> >      char *content_type;
> >      /* Set if the server correctly handles Connection: close and will
> close
> >       * the connection after feeding us the content. */
> > @@ -130,7 +131,7 @@ static const AVOption options[] = {
> >      { "http_proxy", "set HTTP proxy to tunnel through",
> > OFFSET(http_proxy), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D | E },
> >      { "headers", "set custom HTTP headers, can override built in default
> > headers", OFFSET(headers), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D
> | E
> > },
> >      { "content_type", "set a specific content type for the POST
> messages",
> > OFFSET(content_type), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D | E },
> > -    { "user_agent", "override User-Agent header", OFFSET(user_agent),
> > AV_OPT_TYPE_STRING, { .str = DEFAULT_USER_AGENT }, 0, 0, D },
> > +    { "user_agent", "override User-Agent header",
>
> You want to deprecate user-agent, not user_agent.
>
> #if FF_API_HTTP_USER_AGENT
>     { "user-agent", "override User-Agent header", ...
> #endif
>
> > OFFSET(user_agent_deprecated), AV_OPT_TYPE_STRING, { .str =
> > DEFAULT_USER_AGENT }, 0, 0, D },
> >      { "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_BOOL, { .i64 = 0 }, 0, 1, D | E },
> >      { "post_data", "set custom HTTP post data", OFFSET(post_data),
> > AV_OPT_TYPE_BINARY, .flags = D | E },
> > @@ -1037,6 +1038,10 @@ static int http_connect(URLContext *h, const char
> > *path, const char *local_path,
> >              send_expect_100 = 1;
> >      }
> >
> > +    if (av_strncasecmp(s->user_agent_deprecated, DEFAULT_USER_AGENT,
> > strlen(DEFAULT_USER_AGENT))) {
>
> - you need to check s->user_agent, not s->user_agent_deprecated
> - strcmp() is enough
>
> > +        av_log(s, AV_LOG_WARNING, "the user_agent option is deprecated,
> > please use user-agent option\n");
>
> the other way around
>
> > +        s->user_agent = av_strdup(s->user_agent_deprecated);
> > +    }
>
> --
> Clément B.
> _______________________________________________
>





patch update




add a FF_OPT_FLAG_DEPRECATED define for compile.
add a new variable for user_agent to give a deprecated warning message
---
 doc/protocols.texi    |  4 +++-
 libavformat/http.c    | 14 ++++++++++++--
 libavformat/version.h |  3 +++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/doc/protocols.texi b/doc/protocols.texi
index 470c99c..3acdc78 100644
--- a/doc/protocols.texi
+++ b/doc/protocols.texi
@@ -292,10 +292,12 @@ Use persistent connections if set to 1, default is 0.
 Set custom HTTP post data.

 @item user-agent
- at item user_agent
 Override the User-Agent header. If not specified the protocol will use a
 string describing the libavformat build. ("Lavf/<version>")

+ at item user_agent
+This is a deprecated option, you can use user-agent instead it.
+
 @item timeout
 Set timeout in microseconds of socket I/O operations used by the
underlying low level
 operation. By default it is set to -1, which means that the timeout is
diff --git a/libavformat/http.c b/libavformat/http.c
index adb3d92..7dbe614 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -71,6 +71,9 @@ typedef struct HTTPContext {
     char *headers;
     char *mime_type;
     char *user_agent;
+#ifdef FF_OPT_FLAG_DEPRECATED
+    attribute_deprecated char *user_agent_deprecated;
+#endif
     char *content_type;
     /* Set if the server correctly handles Connection: close and will close
      * the connection after feeding us the content. */
@@ -130,7 +133,9 @@ static const AVOption options[] = {
     { "http_proxy", "set HTTP proxy to tunnel through",
OFFSET(http_proxy), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D | E },
     { "headers", "set custom HTTP headers, can override built in default
headers", OFFSET(headers), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D | E
},
     { "content_type", "set a specific content type for the POST messages",
OFFSET(content_type), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D | E },
-    { "user_agent", "override User-Agent header", OFFSET(user_agent),
AV_OPT_TYPE_STRING, { .str = DEFAULT_USER_AGENT }, 0, 0, D },
+#ifdef FF_OPT_FLAG_DEPRECATED
+    { "user_agent", "override User-Agent header",
OFFSET(user_agent_deprecated), AV_OPT_TYPE_STRING, { .str =
DEFAULT_USER_AGENT }, 0, 0, D },
+#endif
     { "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_BOOL, { .i64 = 0 }, 0, 1, D | E },
     { "post_data", "set custom HTTP post data", OFFSET(post_data),
AV_OPT_TYPE_BINARY, .flags = D | E },
@@ -1036,7 +1041,12 @@ static int http_connect(URLContext *h, const char
*path, const char *local_path,
             s->http_code != 401)
             send_expect_100 = 1;
     }
-
+#ifdef FF_OPT_FLAG_DEPRECATED
+    if (av_strncmp(s->user_agent_deprecated, DEFAULT_USER_AGEN)) {
+        av_log(s, AV_LOG_WARNING, "the user_agent option is deprecated,
please use user-agent option\n");
+        s->user_agent = av_strdup(s->user_agent_deprecated);
+    }
+#endif
     /* set default headers if needed */
     if (!has_header(s->headers, "\r\nUser-Agent: "))
         len += av_strlcatf(headers + len, sizeof(headers) - len,
diff --git a/libavformat/version.h b/libavformat/version.h
index 34226ca..518aac7 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -82,6 +82,9 @@
 #ifndef FF_API_NOCONST_GET_SIDE_DATA
 #define FF_API_NOCONST_GET_SIDE_DATA    (LIBAVFORMAT_VERSION_MAJOR < 58)
 #endif
+#ifndef FF_OPT_FLAG_DEPRECATED
+#define FF_OPT_FLAG_DEPRECATED          (LIBAVFORMAT_VERSION_MAJOR < 58)
+#endif

 #ifndef FF_API_R_FRAME_RATE
 #define FF_API_R_FRAME_RATE            1
-- 
2.7.4 (Apple Git-66)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-avformat-http-will-remove-option-user_agent.patch
Type: application/octet-stream
Size: 3950 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160916/7e5e6f55/attachment.obj>


More information about the ffmpeg-devel mailing list