Sat Nov 1 06:31:04 2008

Asterisk developer's documentation


file.h File Reference

Generic File Format Support. More...

#include "asterisk/channel.h"
#include "asterisk/frame.h"
#include <fcntl.h>

Include dependency graph for file.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define AST_DIGIT_ANY   "0123456789#*ABCD"
#define AST_DIGIT_ANYNUM   "0123456789"
#define AST_RESERVED_POINTERS   20
#define SEEK_FORCECUR   10

Functions

int ast_applystream (struct ast_channel *chan, struct ast_filestream *s)
int ast_closestream (struct ast_filestream *f)
int ast_file_init (void)
int ast_filecopy (const char *oldname, const char *newname, const char *fmt)
int ast_filedelete (const char *filename, const char *fmt)
int ast_fileexists (const char *filename, const char *fmt, const char *preflang)
int ast_filerename (const char *oldname, const char *newname, const char *fmt)
int ast_format_register (const char *name, const char *exts, int format, struct ast_filestream *(*open)(FILE *f), struct ast_filestream *(*rewrite)(FILE *f, const char *comment), int(*write)(struct ast_filestream *, struct ast_frame *), int(*seek)(struct ast_filestream *, long offset, int whence), int(*trunc)(struct ast_filestream *), long(*tell)(struct ast_filestream *), struct ast_frame *(*read)(struct ast_filestream *, int *timetonext), void(*close)(struct ast_filestream *), char *(*getcomment)(struct ast_filestream *))
int ast_format_unregister (const char *name)
ast_filestreamast_openstream (struct ast_channel *chan, const char *filename, const char *preflang)
ast_filestreamast_openstream_full (struct ast_channel *chan, const char *filename, const char *preflang, int asis)
ast_filestreamast_openvstream (struct ast_channel *chan, const char *filename, const char *preflang)
int ast_playstream (struct ast_filestream *s)
ast_filestreamast_readfile (const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode)
ast_frameast_readframe (struct ast_filestream *s)
int ast_seekstream (struct ast_filestream *fs, long sample_offset, int whence)
int ast_stopstream (struct ast_channel *c)
int ast_stream_fastforward (struct ast_filestream *fs, long ms)
int ast_stream_rewind (struct ast_filestream *fs, long ms)
int ast_streamfile (struct ast_channel *c, const char *filename, const char *preflang)
long ast_tellstream (struct ast_filestream *fs)
int ast_truncstream (struct ast_filestream *fs)
int ast_waitstream (struct ast_channel *c, const char *breakon)
int ast_waitstream_exten (struct ast_channel *c, const char *context)
int ast_waitstream_fr (struct ast_channel *c, const char *breakon, const char *forward, const char *rewind, int ms)
int ast_waitstream_full (struct ast_channel *c, const char *breakon, int audiofd, int monfd)
ast_filestreamast_writefile (const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode)
int ast_writestream (struct ast_filestream *fs, struct ast_frame *f)


Detailed Description

Generic File Format Support.

Definition in file file.h.


Define Documentation

#define AST_DIGIT_ANY   "0123456789#*ABCD"

Convenient for waiting

Definition at line 41 of file file.h.

Referenced by __login_exec(), ast_ivr_menu_run_internal(), ast_play_and_wait(), ast_readstring(), ast_readstring_full(), ast_record_review(), background_file(), bridge_playfile(), builtin_atxfer(), builtin_blindtransfer(), conf_exec(), conf_run(), dial_exec_full(), dictate_exec(), directory_exec(), festival_exec(), get_folder(), ivr_dispatch(), pbx_builtin_background(), play_file(), play_mailbox_owner(), play_message(), play_message_callerid(), play_message_datetime(), play_message_duration(), play_record_review(), retrydial_exec(), say_and_wait(), say_position(), sayunixtime_exec(), try_calling(), vm_intro_gr(), vm_intro_pt(), and wait_file2().

#define AST_DIGIT_ANYNUM   "0123456789"

Definition at line 42 of file file.h.

Referenced by initreqprep().

#define AST_RESERVED_POINTERS   20

Definition at line 312 of file file.h.

#define SEEK_FORCECUR   10

Definition at line 44 of file file.h.

Referenced by ast_read(), ast_write(), au_seek(), g729_seek(), gsm_seek(), ilbc_seek(), pcm_seek(), slinear_seek(), vox_seek(), and wav_seek().


Function Documentation

int ast_applystream ( struct ast_channel chan,
struct ast_filestream s 
)

Parameters:
chan channel to work
s ast_filestream to apply Returns 0 for success, -1 on failure

Definition at line 649 of file file.c.

References s.

Referenced by ast_streamfile(), handle_getoption(), handle_recordfile(), and handle_streamfile().

00650 {
00651    s->owner = chan;
00652    return 0;
00653 }

int ast_closestream ( struct ast_filestream f  ) 

Parameters:
f filestream to close Close a playback or recording stream Returns 0 on success, -1 on failure

Definition at line 694 of file file.c.

References AST_FORMAT_MAX_AUDIO, ast_safe_system(), ast_sched_del(), ast_settimeout(), ast_translator_free_path(), ast_format::close, ast_filestream::filename, ast_filestream::fmt, ast_format::format, free, ast_filestream::owner, ast_filestream::realfilename, ast_channel::sched, ast_channel::stream, ast_channel::streamid, ast_filestream::trans, ast_channel::vstream, and ast_channel::vstreamid.

Referenced by ast_filehelper(), ast_hangup(), ast_moh_files_next(), ast_monitor_start(), ast_monitor_stop(), ast_play_and_prepend(), ast_play_and_record_full(), ast_stopstream(), dictate_exec(), gen_closestream(), handle_recordfile(), local_ast_moh_stop(), mixmonitor_thread(), moh_files_release(), and recordthread().

00695 {
00696    char *cmd = NULL;
00697    size_t size = 0;
00698    /* Stop a running stream if there is one */
00699    if (f->owner) {
00700       if (f->fmt->format < AST_FORMAT_MAX_AUDIO) {
00701          f->owner->stream = NULL;
00702          if (f->owner->streamid > -1)
00703             ast_sched_del(f->owner->sched, f->owner->streamid);
00704          f->owner->streamid = -1;
00705 #ifdef ZAPTEL_OPTIMIZATIONS
00706          ast_settimeout(f->owner, 0, NULL, NULL);
00707 #endif         
00708       } else {
00709          f->owner->vstream = NULL;
00710          if (f->owner->vstreamid > -1)
00711             ast_sched_del(f->owner->sched, f->owner->vstreamid);
00712          f->owner->vstreamid = -1;
00713       }
00714    }
00715    /* destroy the translator on exit */
00716    if (f->trans) {
00717       ast_translator_free_path(f->trans);
00718       f->trans = NULL;
00719    }
00720 
00721    if (f->realfilename && f->filename) {
00722          size = strlen(f->filename) + strlen(f->realfilename) + 15;
00723          cmd = alloca(size);
00724          memset(cmd,0,size);
00725          snprintf(cmd,size,"/bin/mv -f %s %s",f->filename,f->realfilename);
00726          ast_safe_system(cmd);
00727    }
00728 
00729    if (f->filename) {
00730       free(f->filename);
00731       f->filename = NULL;
00732    }
00733    if (f->realfilename) {
00734       free(f->realfilename);
00735       f->realfilename = NULL;
00736    }
00737    f->fmt->close(f);
00738    return 0;
00739 }

int ast_file_init ( void   ) 

Initializes all the various file stuff. Basically just registers the cli stuff Returns 0 all the time

Definition at line 1302 of file file.c.

References ast_cli_register(), and show_file.

Referenced by main().

01303 {
01304    ast_cli_register(&show_file);
01305    return 0;
01306 }

int ast_filecopy ( const char *  oldname,
const char *  newname,
const char *  fmt 
)

Parameters:
oldname name of the file you wish to copy (minus extension)
newname name you wish the file to be copied to (minus extension)
fmt the format of the file Copy a given file in a given format, or if fmt is NULL, then do so for all

Definition at line 800 of file file.c.

References ACTION_COPY, and ast_filehelper().

Referenced by copy_file().

00801 {
00802    return ast_filehelper(filename, filename2, fmt, ACTION_COPY);
00803 }

int ast_filedelete ( const char *  filename,
const char *  fmt 
)

Parameters:
filename name of the file you wish to delete (minus the extension)
fmt of the file Delete a given file in a given format, or if fmt is NULL, then do so for all

Definition at line 790 of file file.c.

References ACTION_DELETE, and ast_filehelper().

Referenced by ast_monitor_start(), ast_monitor_stop(), ast_play_and_prepend(), dial_exec_full(), leave_voicemail(), play_mailbox_owner(), play_record_review(), and vm_delete().

00791 {
00792    return ast_filehelper(filename, NULL, fmt, ACTION_DELETE);
00793 }

int ast_fileexists ( const char *  filename,
const char *  fmt,
const char *  preflang 
)

Parameters:
filename name of the file you wish to check, minus the extension
fmt the format you wish to check (the extension)
preflang (the preferred language you wisht to find the file in) See if a given file exists in a given format. If fmt is NULL, any format is accepted. Returns -1 if file does not exist, non-zero positive otherwise.

Definition at line 742 of file file.c.

References ACTION_EXISTS, ast_filehelper(), ast_strlen_zero(), MAX_LANGUAGE, and strsep().

Referenced by app_exec(), ast_moh_files_next(), ast_monitor_start(), ast_monitor_stop(), ast_openstream_full(), ast_openvstream(), chanspy_exec(), conf_run(), dial_exec_full(), invent_message(), last_message_index(), leave_voicemail(), play_mailbox_owner(), play_message_callerid(), record_exec(), vm_newuser(), and vm_tempgreeting().

00743 {
00744    char filename2[256];
00745    char tmp[256];
00746    char *postfix;
00747    char *prefix;
00748    char *c;
00749    char lang2[MAX_LANGUAGE];
00750    int res = -1;
00751    if (!ast_strlen_zero(preflang)) {
00752       /* Insert the language between the last two parts of the path */
00753       ast_copy_string(tmp, filename, sizeof(tmp));
00754       c = strrchr(tmp, '/');
00755       if (c) {
00756          *c = '\0';
00757          postfix = c+1;
00758          prefix = tmp;
00759          snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, preflang, postfix);
00760       } else {
00761          postfix = tmp;
00762          prefix="";
00763          snprintf(filename2, sizeof(filename2), "%s/%s", preflang, postfix);
00764       }
00765       res = ast_filehelper(filename2, NULL, fmt, ACTION_EXISTS);
00766       if (res < 1) {
00767          char *stringp=NULL;
00768          ast_copy_string(lang2, preflang, sizeof(lang2));
00769          stringp=lang2;
00770          strsep(&stringp, "_");
00771          /* If language is a specific locality of a language (like es_MX), strip the locality and try again */
00772          if (strcmp(lang2, preflang)) {
00773             if (ast_strlen_zero(prefix)) {
00774                snprintf(filename2, sizeof(filename2), "%s/%s", lang2, postfix);
00775             } else {
00776                snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, lang2, postfix);
00777             }
00778             res = ast_filehelper(filename2, NULL, fmt, ACTION_EXISTS);
00779          }
00780       }
00781    }
00782 
00783    /* Fallback to no language (usually winds up being American English) */
00784    if (res < 1) {
00785       res = ast_filehelper(filename, NULL, fmt, ACTION_EXISTS);
00786    }
00787    return res;
00788 }

int ast_filerename ( const char *  oldname,
const char *  newname,
const char *  fmt 
)

Parameters:
oldname the name of the file you wish to act upon (minus the extension)
newname the name you wish to rename the file to (minus the extension)
fmt the format of the file Rename a given file in a given format, or if fmt is NULL, then do so for all Returns -1 on failure

Definition at line 795 of file file.c.

References ACTION_RENAME, and ast_filehelper().

Referenced by ast_monitor_stop(), ast_play_and_prepend(), leave_voicemail(), play_record_review(), and rename_file().

00796 {
00797    return ast_filehelper(filename, filename2, fmt, ACTION_RENAME);
00798 }

int ast_format_register ( const char *  name,
const char *  exts,
int  format,
struct ast_filestream *(*)(FILE *f)  open,
struct ast_filestream *(*)(FILE *f, const char *comment)  rewrite,
int(*)(struct ast_filestream *, struct ast_frame *)  write,
int(*)(struct ast_filestream *, long offset, int whence)  seek,
int(*)(struct ast_filestream *)  trunc,
long(*)(struct ast_filestream *)  tell,
struct ast_frame *(*)(struct ast_filestream *, int *timetonext)  read,
void(*)(struct ast_filestream *)  close,
char *(*)(struct ast_filestream *)  getcomment 
)

Register a new file format capability Adds a format to asterisk's format abilities. Fill in the fields, and it will work. For examples, look at some of the various format code. returns 0 on success, -1 on failure

int ast_format_unregister ( const char *  name  ) 

Parameters:
name the name of the format you wish to unregister Unregisters a format based on the name of the format. Returns 0 on success, -1 on failure to unregister

Definition at line 156 of file file.c.

References ast_log(), ast_mutex_lock(), ast_mutex_unlock(), ast_verbose(), formats, free, LOG_WARNING, ast_format::name, ast_format::next, option_verbose, and VERBOSE_PREFIX_2.

Referenced by unload_module().

00157 {
00158    struct ast_format *tmp, *tmpl = NULL;
00159    if (ast_mutex_lock(&formatlock)) {
00160       ast_log(LOG_WARNING, "Unable to lock format list\n");
00161       return -1;
00162    }
00163    tmp = formats;
00164    while(tmp) {
00165       if (!strcasecmp(name, tmp->name)) {
00166          if (tmpl) 
00167             tmpl->next = tmp->next;
00168          else
00169             formats = tmp->next;
00170          free(tmp);
00171          ast_mutex_unlock(&formatlock);
00172          if (option_verbose > 1)
00173             ast_verbose( VERBOSE_PREFIX_2 "Unregistered format %s\n", name);
00174          return 0;
00175       }
00176       tmpl = tmp;
00177       tmp = tmp->next;
00178    }
00179    ast_mutex_unlock(&formatlock);
00180    ast_log(LOG_WARNING, "Tried to unregister format %s, already unregistered\n", name);
00181    return -1;
00182 }

struct ast_filestream* ast_openstream ( struct ast_channel chan,
const char *  filename,
const char *  preflang 
)

Parameters:
chan channel to work with
filename to use
preflang prefered language to use Returns a ast_filestream pointer if it opens the file, NULL on error

Definition at line 470 of file file.c.

References ast_openstream_full().

Referenced by ast_streamfile(), dictate_exec(), handle_getoption(), and handle_streamfile().

00471 {
00472    return ast_openstream_full(chan, filename, preflang, 0);
00473 }

struct ast_filestream* ast_openstream_full ( struct ast_channel chan,
const char *  filename,
const char *  preflang,
int  asis 
)

Parameters:
chan channel to work with
filename to use
preflang prefered language to use
asis if set, don't clear generators Returns a ast_filestream pointer if it opens the file, NULL on error

Definition at line 475 of file file.c.

References ACTION_OPEN, ast_deactivate_generator(), ast_fileexists(), ast_filehelper(), ast_log(), ast_set_write_format(), ast_stopstream(), ast_strlen_zero(), LOG_WARNING, ast_channel::oldwriteformat, and ast_channel::writeformat.

Referenced by ast_moh_files_next(), ast_openstream(), and gen_nextfile().

00476 {
00477    /* This is a fairly complex routine.  Essentially we should do 
00478       the following:
00479       
00480       1) Find which file handlers produce our type of format.
00481       2) Look for a filename which it can handle.
00482       3) If we find one, then great.  
00483       4) If not, see what files are there
00484       5) See what we can actually support
00485       6) Choose the one with the least costly translator path and
00486           set it up.
00487          
00488    */
00489    int fmts = -1;
00490    char filename2[256]="";
00491    char filename3[256];
00492    char *endpart;
00493    int res;
00494 
00495    if (!asis) {
00496       /* do this first, otherwise we detect the wrong writeformat */
00497       ast_stopstream(chan);
00498       if (chan->generator)
00499          ast_deactivate_generator(chan);
00500    }
00501    if (!ast_strlen_zero(preflang)) {
00502       ast_copy_string(filename3, filename, sizeof(filename3));
00503       endpart = strrchr(filename3, '/');
00504       if (endpart) {
00505          *endpart = '\0';
00506          endpart++;
00507          snprintf(filename2, sizeof(filename2), "%s/%s/%s", filename3, preflang, endpart);
00508       } else
00509          snprintf(filename2, sizeof(filename2), "%s/%s", preflang, filename);
00510       fmts = ast_fileexists(filename2, NULL, NULL);
00511    }
00512    if (fmts < 1) {
00513       ast_copy_string(filename2, filename, sizeof(filename2));
00514       fmts = ast_fileexists(filename2, NULL, NULL);
00515    }
00516    if (fmts < 1) {
00517       ast_log(LOG_WARNING, "File %s does not exist in any format\n", filename);
00518       return NULL;
00519    }
00520    chan->oldwriteformat = chan->writeformat;
00521    /* Set the channel to a format we can work with */
00522    res = ast_set_write_format(chan, fmts);
00523    
00524    res = ast_filehelper(filename2, (char *)chan, NULL, ACTION_OPEN);
00525    if (res >= 0)
00526       return chan->stream;
00527    return NULL;
00528 }

struct ast_filestream* ast_openvstream ( struct ast_channel chan,
const char *  filename,
const char *  preflang 
)

Parameters:
chan channel to work with
filename to use
preflang prefered language to use Returns a ast_filestream pointer if it opens the file, NULL on error

Definition at line 530 of file file.c.

References ACTION_OPEN, ast_fileexists(), ast_filehelper(), ast_log(), ast_strlen_zero(), fmt, LOG_WARNING, and MAX_LANGUAGE.

Referenced by ast_streamfile().

00531 {
00532    /* This is a fairly complex routine.  Essentially we should do 
00533       the following:
00534       
00535       1) Find which file handlers produce our type of format.
00536       2) Look for a filename which it can handle.
00537       3) If we find one, then great.  
00538       4) If not, see what files are there
00539       5) See what we can actually support
00540       6) Choose the one with the least costly translator path and
00541           set it up.
00542          
00543    */
00544    int fd = -1;
00545    int fmts = -1;
00546    char filename2[256];
00547    char lang2[MAX_LANGUAGE];
00548    /* XXX H.263 only XXX */
00549    char *fmt = "h263";
00550    if (!ast_strlen_zero(preflang)) {
00551       snprintf(filename2, sizeof(filename2), "%s/%s", preflang, filename);
00552       fmts = ast_fileexists(filename2, fmt, NULL);
00553       if (fmts < 1) {
00554          ast_copy_string(lang2, preflang, sizeof(lang2));
00555          snprintf(filename2, sizeof(filename2), "%s/%s", lang2, filename);
00556          fmts = ast_fileexists(filename2, fmt, NULL);
00557       }
00558    }
00559    if (fmts < 1) {
00560       ast_copy_string(filename2, filename, sizeof(filename2));
00561       fmts = ast_fileexists(filename2, fmt, NULL);
00562    }
00563    if (fmts < 1) {
00564       return NULL;
00565    }
00566    fd = ast_filehelper(filename2, (char *)chan, fmt, ACTION_OPEN);
00567    if (fd >= 0)
00568       return chan->vstream;
00569    ast_log(LOG_WARNING, "File %s has video but couldn't be opened\n", filename);
00570    return NULL;
00571 }

int ast_playstream ( struct ast_filestream s  ) 

Parameters:
s filestream to play Returns 0 for success, -1 on failure

Definition at line 655 of file file.c.

References AST_FORMAT_MAX_AUDIO, ast_readaudio_callback(), ast_readvideo_callback(), and s.

Referenced by ast_streamfile(), handle_getoption(), and handle_streamfile().

00656 {
00657    if (s->fmt->format < AST_FORMAT_MAX_AUDIO)
00658       ast_readaudio_callback(s);
00659    else
00660       ast_readvideo_callback(s);
00661    return 0;
00662 }

struct ast_filestream* ast_readfile ( const char *  filename,
const char *  type,
const char *  comment,
int  flags,
int  check,
mode_t  mode 
)

Parameters:
filename the name of the file to read from
type format of file you wish to read from
comment comment to go with
flags file flags
check (unimplemented, hence negligible)
mode Open mode Open an incoming file stream. flags are flags for the open() command, and if check is non-zero, then it will not read a file if there are any files that start with that name and have an extension Please note, this is a blocking function. Program execution will not return until ast_waitstream completes it's execution. Returns a struct ast_filestream on success, NULL on failure

Definition at line 832 of file file.c.

References ast_log(), ast_mutex_lock(), ast_mutex_unlock(), build_filename(), exts_compare(), ast_filestream::f, ast_filestream::filename, ast_filestream::flags, ast_filestream::fmt, formats, free, LOG_WARNING, ast_filestream::mode, strdup, ast_filestream::trans, and ast_filestream::vfs.

Referenced by ast_play_and_prepend().

00833 {
00834    FILE *bfile;
00835    struct ast_format *f;
00836    struct ast_filestream *fs = NULL;
00837    char *fn;
00838 
00839    if (ast_mutex_lock(&formatlock)) {
00840       ast_log(LOG_WARNING, "Unable to lock format list\n");
00841       return NULL;
00842    }
00843 
00844    for (f = formats; f && !fs; f = f->next) {
00845       if (!exts_compare(f->exts, type))
00846          continue;
00847 
00848       fn = build_filename(filename, type);
00849       bfile = fopen(fn, "r");
00850       if (bfile) {
00851          errno = 0;
00852 
00853          if (!(fs = f->open(bfile))) {
00854             ast_log(LOG_WARNING, "Unable to open %s\n", fn);
00855             fclose(bfile);
00856             free(fn);
00857             continue;
00858          }
00859 
00860          fs->trans = NULL;
00861          fs->fmt = f;
00862          fs->flags = flags;
00863          fs->mode = mode;
00864          fs->filename = strdup(filename);
00865          fs->vfs = NULL;
00866       } else if (errno != EEXIST)
00867          ast_log(LOG_WARNING, "Unable to open file %s: %s\n", fn, strerror(errno));
00868       free(fn);
00869    }
00870 
00871    ast_mutex_unlock(&formatlock);
00872    if (!fs) 
00873       ast_log(LOG_WARNING, "No such format '%s'\n", type);
00874 
00875    return fs;
00876 }

struct ast_frame* ast_readframe ( struct ast_filestream s  ) 

Parameters:
s ast_filestream to act on Returns a frame or NULL if read failed

Definition at line 573 of file file.c.

References s.

Referenced by ast_play_and_prepend(), dictate_exec(), gen_readframe(), and moh_files_readframe().

00574 {
00575    struct ast_frame *f = NULL;
00576    int whennext = 0; 
00577    if (s && s->fmt)
00578       f = s->fmt->read(s, &whennext);
00579    return f;
00580 }

int ast_seekstream ( struct ast_filestream fs,
long  sample_offset,
int  whence 
)

Parameters:
fs ast_filestream to perform seek on
sample_offset numbers of samples to seek
whence SEEK_SET, SEEK_CUR, SEEK_END Returns 0 for success, or -1 for error

Definition at line 664 of file file.c.

References ast_filestream::fmt, and ast_format::seek.

Referenced by ast_control_streamfile(), ast_read(), ast_stream_fastforward(), ast_stream_rewind(), ast_write(), dictate_exec(), handle_getoption(), handle_recordfile(), and handle_streamfile().

00665 {
00666    return fs->fmt->seek(fs, sample_offset, whence);
00667 }

int ast_stopstream ( struct ast_channel c  ) 

Parameters:
c The channel you wish to stop playback on Stop playback of a stream Returns 0 regardless

Definition at line 184 of file file.c.

References ast_closestream(), ast_log(), ast_set_write_format(), LOG_WARNING, ast_channel::oldwriteformat, ast_channel::stream, and ast_channel::vstream.

Referenced by adsi_transmit_message_full(), ast_control_streamfile(), ast_openstream_full(), ast_play_and_wait(), ast_readstring(), ast_readstring_full(), ast_say_character_str_full(), ast_say_digit_str_full(), ast_say_enumeration_full_da(), ast_say_enumeration_full_de(), ast_say_enumeration_full_en(), ast_say_number_full_cz(), ast_say_number_full_da(), ast_say_number_full_de(), ast_say_number_full_en(), ast_say_number_full_en_GB(), ast_say_number_full_es(), ast_say_number_full_fr(), ast_say_number_full_gr(), ast_say_number_full_he(), ast_say_number_full_it(), ast_say_number_full_nl(), ast_say_number_full_no(), ast_say_number_full_pt(), ast_say_number_full_ru(), ast_say_number_full_se(), ast_say_number_full_tw(), ast_say_phonetic_str_full(), ast_waitstream(), ast_waitstream_exten(), ast_waitstream_fr(), ast_waitstream_full(), background_detect_exec(), background_file(), builtin_blindtransfer(), conf_exec(), conf_run(), directory_exec(), handle_getoption(), handle_streamfile(), ices_exec(), ivr_dispatch(), leave_voicemail(), mp3_exec(), NBScat_exec(), parkandannounce_exec(), pbx_builtin_background(), pl_odtworz_plik(), play_file(), play_mailbox_owner(), playback_exec(), queue_exec(), read_exec(), recordthread(), rpt_tele_thread(), saycharstr(), sayfile(), saynum(), send_morse(), send_tone_telemetry(), send_waveform_to_channel(), vm_authenticate(), vm_execmain(), and zapateller_exec().

00185 {
00186    /* Stop a running stream if there is one */
00187    if (tmp->vstream) {
00188       ast_closestream(tmp->vstream);
00189       tmp->vstream = NULL;
00190    }
00191    if (tmp->stream) {
00192       ast_closestream(tmp->stream);
00193       tmp->stream = NULL;
00194       if (tmp->oldwriteformat && ast_set_write_format(tmp, tmp->oldwriteformat))
00195          ast_log(LOG_WARNING, "Unable to restore format back to %d\n", tmp->oldwriteformat);
00196    }
00197    return 0;
00198 }

int ast_stream_fastforward ( struct ast_filestream fs,
long  ms 
)

Parameters:
fs filestream to act on
ms milliseconds to move Returns 0 for success, or -1 for error

Definition at line 679 of file file.c.

References ast_seekstream(), and ast_frame::samples.

Referenced by ast_waitstream_fr().

00680 {
00681    /* I think this is right, 8000 samples per second, 1000 ms a second so 8
00682     * samples per ms  */
00683    long samples = ms * 8;
00684    return ast_seekstream(fs, samples, SEEK_CUR);
00685 }

int ast_stream_rewind ( struct ast_filestream fs,
long  ms 
)

Parameters:
fs filestream to act on
ms milliseconds to move Returns 0 for success, or -1 for error

Definition at line 687 of file file.c.

References ast_seekstream(), and ast_frame::samples.

Referenced by ast_play_and_prepend(), ast_play_and_record_full(), ast_waitstream_fr(), and handle_recordfile().

00688 {
00689    long samples = ms * 8;
00690    samples = samples * -1;
00691    return ast_seekstream(fs, samples, SEEK_CUR);
00692 }

int ast_streamfile ( struct ast_channel c,
const char *  filename,
const char *  preflang 
)

Parameters:
c channel to stream the file to
filename the name of the file you wish to stream, minus the extension
preflang the preferred language you wish to have the file streamed to you in Prepares a channel for the streaming of a file. To start the stream, afterward do a ast_waitstream() on the channel Also, it will stop any existing streams on the channel. Returns 0 on success, or -1 on failure.

Definition at line 805 of file file.c.

References ast_applystream(), ast_getformatname(), ast_log(), ast_openstream(), ast_openvstream(), ast_playstream(), ast_verbose(), LOG_DEBUG, LOG_WARNING, ast_channel::nativeformats, option_verbose, VERBOSE_PREFIX_3, and ast_filestream::vfs.

Referenced by __login_exec(), agent_call(), ast_app_getdata(), ast_app_getdata_full(), ast_app_getvoice(), ast_control_streamfile(), ast_play_and_prepend(), ast_play_and_record_full(), ast_play_and_wait(), ast_record_review(), ast_say_character_str_full(), ast_say_date_da(), ast_say_date_de(), ast_say_date_en(), ast_say_date_fr(), ast_say_date_gr(), ast_say_date_nl(), ast_say_date_with_format_gr(), ast_say_datetime_en(), ast_say_datetime_fr(), ast_say_datetime_from_now_en(), ast_say_datetime_from_now_fr(), ast_say_datetime_gr(), ast_say_datetime_nl(), ast_say_datetime_pt(), ast_say_datetime_tw(), ast_say_digit_str_full(), ast_say_enumeration_full_da(), ast_say_enumeration_full_de(), ast_say_enumeration_full_en(), ast_say_number_full_cz(), ast_say_number_full_da(), ast_say_number_full_de(), ast_say_number_full_en(), ast_say_number_full_en_GB(), ast_say_number_full_es(), ast_say_number_full_fr(), ast_say_number_full_gr(), ast_say_number_full_he(), ast_say_number_full_it(), ast_say_number_full_nl(), ast_say_number_full_no(), ast_say_number_full_pt(), ast_say_number_full_ru(), ast_say_number_full_se(), ast_say_number_full_tw(), ast_say_phonetic_str_full(), ast_say_time_de(), ast_say_time_en(), ast_say_time_fr(), ast_say_time_gr(), ast_say_time_nl(), ast_say_time_tw(), auth_exec(), background_detect_exec(), background_file(), bridge_playfile(), builtin_atxfer(), builtin_automonitor(), builtin_blindtransfer(), chanspy_exec(), check_availability(), check_beep(), conf_exec(), conf_run(), dial_exec_