summaryrefslogtreecommitdiff
path: root/main/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/file.c')
-rw-r--r--main/file.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/main/file.c b/main/file.c
index c89cee97c..21ce1bbdc 100644
--- a/main/file.c
+++ b/main/file.c
@@ -320,6 +320,7 @@ static void filestream_destructor(void *arg)
free(f->filename);
if (f->realfilename)
free(f->realfilename);
+ ast_free(f->open_filename);
if (f->fmt->close) {
void (*closefn)(struct ast_filestream *) = f->fmt->close;
closefn(f);
@@ -472,6 +473,7 @@ static int ast_filehelper(const char *filename, const void *arg2, const char *fm
s->fmt = f;
s->trans = NULL;
s->filename = NULL;
+ s->open_filename = ast_strdup(fn);;
if (s->fmt->format & AST_FORMAT_AUDIO_MASK) {
if (chan->stream)
ast_closestream(chan->stream);
@@ -826,7 +828,30 @@ static int ast_fsread_video(const void *data)
int ast_applystream(struct ast_channel *chan, struct ast_filestream *s)
{
+ struct ast_party_connected_line connected;
+ char *fn;
+
+ ast_channel_lock(chan);
+ ast_party_connected_line_set_init(&connected, &chan->connected);
+ if (ast_strlen_zero(chan->connected.id.number)) {
+ connected.id.number = ast_strdupa(chan->exten);
+ }
+ ast_channel_unlock(chan);
+
+ fn = ast_strdupa(s->open_filename);
+ if ((fn = strrchr(fn, '/'))) {
+ char *dot;
+ *fn++ = '\0';
+ if ((dot = strrchr(fn, '.'))) {
+ *dot = '\0';
+ }
+ }
+ connected.id.number = connected.id.name = fn;
+
+ ast_channel_update_connected_line(chan, &connected);
+
s->owner = chan;
+
return 0;
}