[FFmpeg-devel] [PATCH] tls: Hook up the url_get_short_seek function in the TLS backends

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Thu Oct 29 22:20:25 EET 2020


Martin Storsjö:
> This makes sure that small seeks forward on https don't end up
> doing new requests.
> ---
>  libavformat/tls_gnutls.c          | 7 +++++++
>  libavformat/tls_libtls.c          | 7 +++++++
>  libavformat/tls_mbedtls.c         | 7 +++++++
>  libavformat/tls_openssl.c         | 7 +++++++
>  libavformat/tls_schannel.c        | 7 +++++++
>  libavformat/tls_securetransport.c | 7 +++++++
>  6 files changed, 42 insertions(+)
> 
> diff --git a/libavformat/tls_gnutls.c b/libavformat/tls_gnutls.c
> index 0c4ef34f5f..f9d5af7096 100644
> --- a/libavformat/tls_gnutls.c
> +++ b/libavformat/tls_gnutls.c
> @@ -269,6 +269,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared),
>      { NULL }
> @@ -288,6 +294,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = tls_write,
>      .url_close      = tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> diff --git a/libavformat/tls_libtls.c b/libavformat/tls_libtls.c
> index dff7f2d9fb..911c8094b0 100644
> --- a/libavformat/tls_libtls.c
> +++ b/libavformat/tls_libtls.c
> @@ -181,6 +181,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared),
>      { NULL }
> @@ -200,6 +206,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = ff_tls_write,
>      .url_close      = ff_tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> diff --git a/libavformat/tls_mbedtls.c b/libavformat/tls_mbedtls.c
> index 965adf1be4..aadf17760d 100644
> --- a/libavformat/tls_mbedtls.c
> +++ b/libavformat/tls_mbedtls.c
> @@ -326,6 +326,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared), \
>      {"key_password", "Password for the private key file", OFFSET(priv_key_pw),  AV_OPT_TYPE_STRING, .flags = TLS_OPTFL }, \
> @@ -346,6 +352,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = tls_write,
>      .url_close      = tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
> index 002197fa76..e0616acbc8 100644
> --- a/libavformat/tls_openssl.c
> +++ b/libavformat/tls_openssl.c
> @@ -351,6 +351,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared),
>      { NULL }
> @@ -370,6 +376,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = tls_write,
>      .url_close      = tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> diff --git a/libavformat/tls_schannel.c b/libavformat/tls_schannel.c
> index 4bfaa85228..d4959f75fa 100644
> --- a/libavformat/tls_schannel.c
> +++ b/libavformat/tls_schannel.c
> @@ -589,6 +589,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared),
>      { NULL }
> @@ -608,6 +614,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = tls_write,
>      .url_close      = tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> diff --git a/libavformat/tls_securetransport.c b/libavformat/tls_securetransport.c
> index 3250b23051..b0cfab1e23 100644
> --- a/libavformat/tls_securetransport.c
> +++ b/libavformat/tls_securetransport.c
> @@ -396,6 +396,12 @@ static int tls_get_file_handle(URLContext *h)
>      return ffurl_get_file_handle(c->tls_shared.tcp);
>  }
>  
> +static int tls_get_short_seek(URLContext *h)
> +{
> +    TLSContext *s = h->priv_data;
> +    return ffurl_get_short_seek(s->tls_shared.tcp);
> +}
> +
>  static const AVOption options[] = {
>      TLS_COMMON_OPTIONS(TLSContext, tls_shared),
>      { NULL }
> @@ -415,6 +421,7 @@ const URLProtocol ff_tls_protocol = {
>      .url_write      = tls_write,
>      .url_close      = tls_close,
>      .url_get_file_handle = tls_get_file_handle,
> +    .url_get_short_seek  = tls_get_short_seek,
>      .priv_data_size = sizeof(TLSContext),
>      .flags          = URL_PROTOCOL_FLAG_NETWORK,
>      .priv_data_class = &tls_class,
> 
All the TLSContexts begin with a common initial sequence, namely
    const AVClass *class;
    TLSShared tls_shared;
So using different functions for them is avoidable.

- Andreas


More information about the ffmpeg-devel mailing list