Version 0.1.8 from FTP
[asterisk/asterisk.git] / apps / app_playback.c
index ef1b85c..47e096b 100755 (executable)
@@ -3,7 +3,7 @@
  *
  * Trivial application to playback a sound file
  * 
- * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
+ * Copyright (C) 1999, Mark Spencer
  *
  * Mark Spencer <markster@linux-support.net>
  *
@@ -25,24 +25,37 @@ static char *tdesc = "Trivial Playback Application";
 
 static char *app = "Playback";
 
+static char *synopsis = "Play a file";
+
+static char *descrip = 
+       "Playback(filename): Plays back a given filename (do not put extension).\n"
+       "Returns -1 if the channel was hung up, or if the file does not exist.\n"
+       "Returns 0 otherwise.\n";
+
 STANDARD_LOCAL_USER;
 
 LOCAL_USER_DECL;
 
 static int playback_exec(struct ast_channel *chan, void *data)
 {
-       int res;
+       int res = 0;
        struct localuser *u;
        if (!data) {
                ast_log(LOG_WARNING, "Playback requires an argument (filename)\n");
                return -1;
        }
        LOCAL_USER_ADD(u);
-       ast_stopstream(chan);
-       res = ast_streamfile(chan, (char *)data);
-       if (!res)
-               res = ast_waitstream(chan, "");
-       ast_stopstream(chan);
+       if (chan->state != AST_STATE_UP)
+               res = ast_answer(chan);
+       if (!res) {
+               ast_stopstream(chan);
+               res = ast_streamfile(chan, (char *)data, chan->language);
+               if (!res) 
+                       res = ast_waitstream(chan, "");
+               else
+                       ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", chan->name, (char *)data);
+               ast_stopstream(chan);
+       }
        LOCAL_USER_REMOVE(u);
        return res;
 }
@@ -55,7 +68,7 @@ int unload_module(void)
 
 int load_module(void)
 {
-       return ast_register_application(app, playback_exec);
+       return ast_register_application(app, playback_exec, synopsis, descrip);
 }
 
 char *description(void)
@@ -69,3 +82,8 @@ int usecount(void)
        STANDARD_USECOUNT(res);
        return res;
 }
+
+char *key()
+{
+       return ASTERISK_GPL_KEY;
+}