mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-08 17:02:23 +00:00
PLIV-5 --resolve httpapi cache not working for some urls
This commit is contained in:
parent
65fed130e5
commit
3584902ae1
@ -2317,9 +2317,23 @@ SWITCH_STANDARD_APP(httapi_function)
|
|||||||
|
|
||||||
/* HTTP FILE INTERFACE */
|
/* HTTP FILE INTERFACE */
|
||||||
|
|
||||||
|
static const char *find_ext(const char *in)
|
||||||
|
{
|
||||||
|
const char *p = in + (strlen(in) - 1);
|
||||||
|
|
||||||
|
while(p >= in && *p) {
|
||||||
|
if (*p == '/') return NULL;
|
||||||
|
if (*p == '.') return (p+1);
|
||||||
|
p--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static char *load_cache_data(http_file_context_t *context, const char *url)
|
static char *load_cache_data(http_file_context_t *context, const char *url)
|
||||||
{
|
{
|
||||||
char *ext = NULL, *dext = NULL, *p;
|
const char *ext = NULL;
|
||||||
|
char *dext = NULL, *p;
|
||||||
char digest[SWITCH_MD5_DIGEST_STRING_SIZE] = { 0 };
|
char digest[SWITCH_MD5_DIGEST_STRING_SIZE] = { 0 };
|
||||||
char meta_buffer[1024] = "";
|
char meta_buffer[1024] = "";
|
||||||
int fd;
|
int fd;
|
||||||
@ -2332,11 +2346,7 @@ static char *load_cache_data(http_file_context_t *context, const char *url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zstr(ext)) {
|
if (zstr(ext)) {
|
||||||
if ((ext = strrchr(url, '.'))) {
|
ext = find_ext(url);
|
||||||
ext++;
|
|
||||||
} else {
|
|
||||||
ext = "wav";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ext && (p = strchr(ext, '?'))) {
|
if (ext && (p = strchr(ext, '?'))) {
|
||||||
@ -2348,9 +2358,8 @@ static char *load_cache_data(http_file_context_t *context, const char *url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
context->cache_file_base = switch_core_sprintf(context->pool, "%s%s%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest);
|
context->cache_file_base = switch_core_sprintf(context->pool, "%s%s%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest);
|
||||||
context->cache_file = switch_core_sprintf(context->pool, "%s%s%s.%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest, ext);
|
context->meta_file = switch_core_sprintf(context->pool, "%s%s%s.meta", globals.cache_path, SWITCH_PATH_SEPARATOR, digest);
|
||||||
context->meta_file = switch_core_sprintf(context->pool, "%s.meta", context->cache_file);
|
context->lock_file = switch_core_sprintf(context->pool, "%s%s%s.lock", globals.cache_path, SWITCH_PATH_SEPARATOR, digest);
|
||||||
context->lock_file = switch_core_sprintf(context->pool, "%s.lock", context->cache_file);
|
|
||||||
|
|
||||||
if (switch_file_exists(context->meta_file, context->pool) == SWITCH_STATUS_SUCCESS && ((fd = open(context->meta_file, O_RDONLY, 0)) > -1)) {
|
if (switch_file_exists(context->meta_file, context->pool) == SWITCH_STATUS_SUCCESS && ((fd = open(context->meta_file, O_RDONLY, 0)) > -1)) {
|
||||||
if ((bytes = read(fd, meta_buffer, sizeof(meta_buffer))) > 0) {
|
if ((bytes = read(fd, meta_buffer, sizeof(meta_buffer))) > 0) {
|
||||||
@ -2363,10 +2372,20 @@ static char *load_cache_data(http_file_context_t *context, const char *url)
|
|||||||
}
|
}
|
||||||
context->metadata = switch_core_strdup(context->pool, p);
|
context->metadata = switch_core_strdup(context->pool, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((p = strrchr(context->metadata, ':'))) {
|
||||||
|
p++;
|
||||||
|
if (!zstr(p)) {
|
||||||
|
ext = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context->cache_file = switch_core_sprintf(context->pool, "%s%s%s%s%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest, ext ? "." : "", ext ? ext : "");
|
||||||
|
|
||||||
switch_safe_free(dext);
|
switch_safe_free(dext);
|
||||||
|
|
||||||
return context->cache_file;
|
return context->cache_file;
|
||||||
@ -2626,6 +2645,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||||
time_t now = switch_epoch_time_now(NULL);
|
time_t now = switch_epoch_time_now(NULL);
|
||||||
char *metadata;
|
char *metadata;
|
||||||
|
const char *ext = NULL;
|
||||||
|
|
||||||
load_cache_data(context, url);
|
load_cache_data(context, url);
|
||||||
|
|
||||||
@ -2635,6 +2655,10 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
|
|
||||||
lock_file(context, SWITCH_TRUE);
|
lock_file(context, SWITCH_TRUE);
|
||||||
|
|
||||||
|
if (context->url_params) {
|
||||||
|
ext = switch_event_get_header(context->url_params, "ext");
|
||||||
|
}
|
||||||
|
|
||||||
if (!context->url_params || !switch_true(switch_event_get_header(context->url_params, "nohead"))) {
|
if (!context->url_params || !switch_true(switch_event_get_header(context->url_params, "nohead"))) {
|
||||||
const char *ct = NULL;
|
const char *ct = NULL;
|
||||||
const char *newext = NULL;
|
const char *newext = NULL;
|
||||||
@ -2650,8 +2674,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!context->url_params || !switch_event_get_header(context->url_params, "ext"))
|
if (zstr(ext) && headers && (ct = switch_event_get_header(headers, "content-type"))) {
|
||||||
&& headers && (ct = switch_event_get_header(headers, "content-type"))) {
|
|
||||||
if (switch_strcasecmp_any(ct, "audio/mpeg", "audio/x-mpeg", "audio/mp3", "audio/x-mp3", "audio/mpeg3",
|
if (switch_strcasecmp_any(ct, "audio/mpeg", "audio/x-mpeg", "audio/mp3", "audio/x-mp3", "audio/mpeg3",
|
||||||
"audio/x-mpeg3", "audio/mpg", "audio/x-mpg", "audio/x-mpegaudio", NULL)) {
|
"audio/x-mpeg3", "audio/mpg", "audio/x-mpg", "audio/x-mpegaudio", NULL)) {
|
||||||
newext = "mp3";
|
newext = "mp3";
|
||||||
@ -2660,14 +2683,14 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (newext) {
|
if (newext) {
|
||||||
char *p;
|
ext = newext;
|
||||||
|
} else if (zstr(ext)) {
|
||||||
if ((p = strrchr(context->cache_file, '.'))) {
|
ext = find_ext(context->cache_file);
|
||||||
*p = '\0';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (newext) {
|
||||||
context->cache_file = switch_core_sprintf(context->pool, "%s.%s", context->cache_file, newext);
|
context->cache_file = switch_core_sprintf(context->pool, "%s.%s", context->cache_file, newext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2678,11 +2701,12 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!unreachable && !zstr(context->metadata)) {
|
if (!unreachable && !zstr(context->metadata)) {
|
||||||
metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s",
|
metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s",
|
||||||
url,
|
url,
|
||||||
switch_event_get_header_nil(headers, "last-modified"),
|
switch_event_get_header_nil(headers, "last-modified"),
|
||||||
switch_event_get_header_nil(headers, "etag"),
|
switch_event_get_header_nil(headers, "etag"),
|
||||||
switch_event_get_header_nil(headers, "content-length")
|
switch_event_get_header_nil(headers, "content-length"),
|
||||||
|
ext
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!strcmp(metadata, context->metadata)) {
|
if (!strcmp(metadata, context->metadata)) {
|
||||||
@ -2701,11 +2725,12 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s",
|
metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s",
|
||||||
url,
|
url,
|
||||||
switch_event_get_header_nil(headers, "last-modified"),
|
switch_event_get_header_nil(headers, "last-modified"),
|
||||||
switch_event_get_header_nil(headers, "etag"),
|
switch_event_get_header_nil(headers, "etag"),
|
||||||
switch_event_get_header_nil(headers, "content-length")
|
switch_event_get_header_nil(headers, "content-length"),
|
||||||
|
ext
|
||||||
);
|
);
|
||||||
|
|
||||||
write_meta_file(context, metadata, headers);
|
write_meta_file(context, metadata, headers);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user