Mon Oct 8 12:39:27 2012

Asterisk developer's documentation


res_convert.c File Reference

file format conversion CLI command using Asterisk formats and translators More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/cli.h"
#include "asterisk/file.h"

Go to the source code of this file.

Functions

static void __reg_module (void)
static void __unreg_module (void)
static char * handle_cli_file_convert (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 Convert a file from one format to another.
static int load_module (void)
static int split_ext (char *filename, char **name, char **ext)
 Split the filename to basename and extension.
static int unload_module (void)

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "File format conversion CLI command" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, }
static struct ast_module_infoast_module_info = &__mod_info
static struct ast_cli_entry cli_convert []


Detailed Description

file format conversion CLI command using Asterisk formats and translators

Author:
redice li <redice_li@yahoo.com>

Russell Bryant <russell@digium.com>

Definition in file res_convert.c.


Function Documentation

static void __reg_module ( void   )  [static]

Definition at line 166 of file res_convert.c.

static void __unreg_module ( void   )  [static]

Definition at line 166 of file res_convert.c.

static char* handle_cli_file_convert ( struct ast_cli_entry e,
int  cmd,
struct ast_cli_args a 
) [static]

Convert a file from one format to another.

Parameters:
e CLI entry
cmd command number
a list of cli arguments
Return values:
CLI_SUCCESS on success.
CLI_SHOWUSAGE or CLI_FAILURE on failure.

Definition at line 66 of file res_convert.c.

References ast_cli_args::argc, ast_cli_args::argv, ast_cli(), ast_closestream(), AST_FILE_MODE, ast_filedelete(), ast_frfree, ast_module_ref(), ast_module_unref(), ast_readfile(), ast_readframe(), ast_strdupa, ast_strlen_zero(), ast_tvdiff_ms(), ast_tvnow(), ast_writefile(), ast_writestream(), CLI_FAILURE, CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, f, ast_cli_args::fd, split_ext(), and ast_cli_entry::usage.

00067 {
00068    char *ret = CLI_FAILURE;
00069    struct ast_filestream *fs_in = NULL, *fs_out = NULL;
00070    struct ast_frame *f;
00071    struct timeval start;
00072    int cost;
00073    char *file_in = NULL, *file_out = NULL;
00074    char *name_in, *ext_in, *name_out, *ext_out;
00075 
00076    switch (cmd) {
00077    case CLI_INIT:
00078       e->command = "file convert";
00079       e->usage =
00080          "Usage: file convert <file_in> <file_out>\n"
00081          "       Convert from file_in to file_out. If an absolute path\n"
00082          "       is not given, the default Asterisk sounds directory\n"
00083          "       will be used.\n\n"
00084          "       Example:\n"
00085          "           file convert tt-weasels.gsm tt-weasels.ulaw\n";
00086       return NULL;
00087    case CLI_GENERATE:
00088       return NULL;
00089    }
00090    
00091    /* ugly, can be removed when CLI entries have ast_module pointers */
00092    ast_module_ref(ast_module_info->self);
00093 
00094    if (a->argc != 4 || ast_strlen_zero(a->argv[2]) || ast_strlen_zero(a->argv[3])) {
00095       ret = CLI_SHOWUSAGE;
00096       goto fail_out; 
00097    }
00098 
00099    file_in = ast_strdupa(a->argv[2]);
00100    file_out = ast_strdupa(a->argv[3]);
00101 
00102    if (split_ext(file_in, &name_in, &ext_in)) {
00103       ast_cli(a->fd, "'%s' is an invalid filename!\n", a->argv[2]);
00104       goto fail_out;
00105    }
00106    if (!(fs_in = ast_readfile(name_in, ext_in, NULL, O_RDONLY, 0, 0))) {
00107       ast_cli(a->fd, "Unable to open input file: %s\n", a->argv[2]);
00108       goto fail_out;
00109    }
00110    
00111    if (split_ext(file_out, &name_out, &ext_out)) {
00112       ast_cli(a->fd, "'%s' is an invalid filename!\n", a->argv[3]);
00113       goto fail_out;
00114    }
00115    if (!(fs_out = ast_writefile(name_out, ext_out, NULL, O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
00116       ast_cli(a->fd, "Unable to open output file: %s\n", a->argv[3]);
00117       goto fail_out;
00118    }
00119 
00120    start = ast_tvnow();
00121    
00122    while ((f = ast_readframe(fs_in))) {
00123       if (ast_writestream(fs_out, f)) {
00124          ast_frfree(f);
00125          ast_cli(a->fd, "Failed to convert %s.%s to %s.%s!\n", name_in, ext_in, name_out, ext_out);
00126          goto fail_out;
00127       }
00128       ast_frfree(f);
00129    }
00130 
00131    cost = ast_tvdiff_ms(ast_tvnow(), start);
00132    ast_cli(a->fd, "Converted %s.%s to %s.%s in %dms\n", name_in, ext_in, name_out, ext_out, cost);
00133    ret = CLI_SUCCESS;
00134 
00135 fail_out:
00136    if (fs_out) {
00137       ast_closestream(fs_out);
00138       if (ret != CLI_SUCCESS)
00139          ast_filedelete(name_out, ext_out);
00140    }
00141 
00142    if (fs_in) 
00143       ast_closestream(fs_in);
00144 
00145    ast_module_unref(ast_module_info->self);
00146 
00147    return ret;
00148 }

static int load_module ( void   )  [static]

Definition at line 160 of file res_convert.c.

References ARRAY_LEN, ast_cli_register_multiple(), AST_MODULE_LOAD_SUCCESS, and cli_convert.

00161 {
00162    ast_cli_register_multiple(cli_convert, ARRAY_LEN(cli_convert));
00163    return AST_MODULE_LOAD_SUCCESS;
00164 }

static int split_ext ( char *  filename,
char **  name,
char **  ext 
) [static]

Split the filename to basename and extension.

Definition at line 43 of file res_convert.c.

References ast_strlen_zero().

Referenced by handle_cli_file_convert().

00044 {
00045    *name = *ext = filename;
00046    
00047    if ((*ext = strrchr(filename, '.'))) {
00048       **ext = '\0';
00049       (*ext)++;
00050    }
00051 
00052    if (ast_strlen_zero(*name) || ast_strlen_zero(*ext))
00053       return -1;
00054 
00055    return 0;
00056 }

static int unload_module ( void   )  [static]

Definition at line 154 of file res_convert.c.

References ARRAY_LEN, ast_cli_unregister_multiple(), and cli_convert.

00155 {
00156    ast_cli_unregister_multiple(cli_convert, ARRAY_LEN(cli_convert));
00157    return 0;
00158 }


Variable Documentation

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "File format conversion CLI command" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static]

Definition at line 166 of file res_convert.c.

struct ast_module_info* ast_module_info = &__mod_info [static]

Definition at line 166 of file res_convert.c.

struct ast_cli_entry cli_convert[] [static]

Initial value:

 {
   { .handler =  handle_cli_file_convert , .summary =  "Convert audio file" ,__VA_ARGS__ }
}

Definition at line 150 of file res_convert.c.

Referenced by load_module(), and unload_module().


Generated on Mon Oct 8 12:39:27 2012 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7