From 243fc44f45e4f472beba77269772f9b9f10bdbf7 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 22 May 2020 00:36:03 +0000 Subject: [PATCH] [mod_httapi, mod_http_cache] pass through seek values tracked in handle on proxy file handles --- src/mod/applications/mod_httapi/mod_httapi.c | 12 +++++++++-- .../mod_http_cache/mod_http_cache.c | 21 +++++++++++++------ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/mod/applications/mod_httapi/mod_httapi.c b/src/mod/applications/mod_httapi/mod_httapi.c index cc2c857a58..86a05bb258 100644 --- a/src/mod/applications/mod_httapi/mod_httapi.c +++ b/src/mod/applications/mod_httapi/mod_httapi.c @@ -2885,13 +2885,21 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char static switch_status_t http_file_file_seek(switch_file_handle_t *handle, unsigned int *cur_sample, int64_t samples, int whence) { http_file_context_t *context = handle->private_info; - + switch_status_t status; + if (!handle->seekable) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "File is not seekable\n"); return SWITCH_STATUS_NOTIMPL; } - return switch_core_file_seek(&context->fh, cur_sample, samples, whence); + if ((status = switch_core_file_seek(&context->fh, cur_sample, samples, whence)) == SWITCH_STATUS_SUCCESS) { + handle->pos = context->fh.pos; + handle->offset_pos = context->fh.offset_pos; + handle->samples_in = context->fh.samples_in; + handle->samples_out = context->fh.samples_out; + } + + return status; } static switch_status_t file_open(switch_file_handle_t *handle, const char *path, int is_https) diff --git a/src/mod/applications/mod_http_cache/mod_http_cache.c b/src/mod/applications/mod_http_cache/mod_http_cache.c index dcf1d7bff5..3e6d1b0fa8 100644 --- a/src/mod/applications/mod_http_cache/mod_http_cache.c +++ b/src/mod/applications/mod_http_cache/mod_http_cache.c @@ -1936,13 +1936,22 @@ static switch_status_t http_file_close(switch_file_handle_t *handle) static switch_status_t http_cache_file_seek(switch_file_handle_t *handle, unsigned int *cur_sample, int64_t samples, int whence) { - struct http_context *context = (struct http_context *)handle->private_info; + struct http_context *context = (struct http_context *)handle->private_info; + switch_status_t status; + + if (!handle->seekable) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "File is not seekable\n"); + return SWITCH_STATUS_NOTIMPL; + } - if (!handle->seekable) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "File is not seekable\n"); - return SWITCH_STATUS_NOTIMPL; - } - return switch_core_file_seek(&context->fh, cur_sample, samples, whence); + if ((status = switch_core_file_seek(&context->fh, cur_sample, samples, whence)) == SWITCH_STATUS_SUCCESS) { + handle->pos = context->fh.pos; + handle->offset_pos = context->fh.offset_pos; + handle->samples_in = context->fh.samples_in; + handle->samples_out = context->fh.samples_out; + } + + return status; } static char *http_supported_formats[] = { "http", NULL };