av_freep(&c->dec_buf);
c->dec_buf_size = c->dec_buf_offset = 0;
- if (c->tls_shared.tcp)
- ffurl_close(c->tls_shared.tcp);
+ ffurl_closep(&c->tls_shared.tcp);
return 0;
}
int size, ret;
int min_enc_buf_size = len + SCHANNEL_FREE_BUFFER_SIZE;
- if (len <= c->dec_buf_offset)
+ /* If we have some left-over data from previous network activity,
+ * return it first in case it is enough. It may contain
+ * data that is required to know whether this connection
+ * is still required or not, esp. in case of HTTP keep-alive
+ * connections. */
+ if (c->dec_buf_offset > 0)
goto cleanup;
if (c->sspi_close_notify)
c->enc_buf_offset += ret;
}
- while (c->enc_buf_offset > 0 && sspi_ret == SEC_E_OK && c->dec_buf_offset < len) {
+ while (c->enc_buf_offset > 0 && sspi_ret == SEC_E_OK) {
/* input buffer */
init_sec_buffer(&inbuf[0], SECBUFFER_DATA, c->enc_buf, c->enc_buf_offset);
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 }
.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,