#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_filestream * | ast_openstream (struct ast_channel *chan, const char *filename, const char *preflang) |
| ast_filestream * | ast_openstream_full (struct ast_channel *chan, const char *filename, const char *preflang, int asis) |
| ast_filestream * | ast_openvstream (struct ast_channel *chan, const char *filename, const char *preflang) |
| int | ast_playstream (struct ast_filestream *s) |
| ast_filestream * | ast_readfile (const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode) |
| ast_frame * | ast_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_filestream * | ast_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) |
Definition in file file.h.
| #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" |
| #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().
| int ast_applystream | ( | struct ast_channel * | chan, | |
| struct ast_filestream * | s | |||
| ) |
| 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 | ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | ) |
| 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 | |||
| ) |
| 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 | ) |
| 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 | |||
| ) |
| 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().
| int ast_stopstream | ( | struct ast_channel * | c | ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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 | |||
| ) |
| 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_