Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Functions | Variables
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"
Include dependency graph for res_convert.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (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 = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const 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 redic.nosp@m.e_li.nosp@m.@yaho.nosp@m.o.co.nosp@m.m
Russell Bryant russe.nosp@m.ll@d.nosp@m.igium.nosp@m..com

Definition in file res_convert.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 159 of file res_convert.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 159 of file res_convert.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 159 of file res_convert.c.

◆ handle_cli_file_convert()

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
eCLI entry
cmdcommand number
alist of cli arguments
Return values
CLI_SUCCESSon success.
CLI_SHOWUSAGEor CLI_FAILURE on failure.

Definition at line 64 of file res_convert.c.

65{
66 char *ret = CLI_FAILURE;
67 struct ast_filestream *fs_in = NULL, *fs_out = NULL;
68 struct ast_frame *f;
69 struct timeval start;
70 int cost;
71 char *file_in = NULL, *file_out = NULL;
72 char *name_in, *ext_in, *name_out, *ext_out;
73
74 switch (cmd) {
75 case CLI_INIT:
76 e->command = "file convert";
77 e->usage =
78 "Usage: file convert <file_in> <file_out>\n"
79 " Convert from file_in to file_out. If an absolute path\n"
80 " is not given, the default Asterisk sounds directory\n"
81 " will be used.\n\n"
82 " Example:\n"
83 " file convert tt-weasels.gsm tt-weasels.ulaw\n";
84 return NULL;
85 case CLI_GENERATE:
86 return NULL;
87 }
88
89 if (a->argc != 4 || ast_strlen_zero(a->argv[2]) || ast_strlen_zero(a->argv[3])) {
90 ret = CLI_SHOWUSAGE;
91 goto fail_out;
92 }
93
94 file_in = ast_strdupa(a->argv[2]);
95 file_out = ast_strdupa(a->argv[3]);
96
97 if (split_ext(file_in, &name_in, &ext_in)) {
98 ast_cli(a->fd, "'%s' is an invalid filename!\n", a->argv[2]);
99 goto fail_out;
100 }
101 if (!(fs_in = ast_readfile(name_in, ext_in, NULL, O_RDONLY, 0, 0))) {
102 ast_cli(a->fd, "Unable to open input file: %s\n", a->argv[2]);
103 goto fail_out;
104 }
105
106 if (split_ext(file_out, &name_out, &ext_out)) {
107 ast_cli(a->fd, "'%s' is an invalid filename!\n", a->argv[3]);
108 goto fail_out;
109 }
110 if (!(fs_out = ast_writefile(name_out, ext_out, NULL, O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
111 ast_cli(a->fd, "Unable to open output file: %s\n", a->argv[3]);
112 goto fail_out;
113 }
114
115 start = ast_tvnow();
116
117 while ((f = ast_readframe(fs_in))) {
118 if (ast_writestream(fs_out, f)) {
119 ast_frfree(f);
120 ast_cli(a->fd, "Failed to convert %s.%s to %s.%s!\n", name_in, ext_in, name_out, ext_out);
121 goto fail_out;
122 }
123 ast_frfree(f);
124 }
125
126 cost = ast_tvdiff_ms(ast_tvnow(), start);
127 ast_cli(a->fd, "Converted %s.%s to %s.%s in %dms\n", name_in, ext_in, name_out, ext_out, cost);
128 ret = CLI_SUCCESS;
129
130fail_out:
131 if (fs_out) {
132 ast_closestream(fs_out);
133 if (ret != CLI_SUCCESS)
134 ast_filedelete(name_out, ext_out);
135 }
136
137 if (fs_in)
138 ast_closestream(fs_in);
139
140 return ret;
141}
#define AST_FILE_MODE
Definition asterisk.h:32
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition astmm.h:298
#define CLI_SHOWUSAGE
Definition cli.h:45
#define CLI_SUCCESS
Definition cli.h:44
void ast_cli(int fd, const char *fmt,...)
Definition clicompat.c:6
@ CLI_INIT
Definition cli.h:152
@ CLI_GENERATE
Definition cli.h:153
#define CLI_FAILURE
Definition cli.h:46
struct ast_frame * ast_readframe(struct ast_filestream *s)
Read a frame from a filestream.
Definition file.c:955
int ast_writestream(struct ast_filestream *fs, struct ast_frame *f)
Writes a frame to a stream.
Definition file.c:255
struct ast_filestream * ast_readfile(const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode)
Starts reading from a file.
Definition file.c:1405
struct ast_filestream * ast_writefile(const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode)
Starts writing a file.
Definition file.c:1457
int ast_closestream(struct ast_filestream *f)
Closes a stream.
Definition file.c:1130
int ast_filedelete(const char *filename, const char *fmt)
Deletes a file.
Definition file.c:1160
#define ast_frfree(fr)
static int split_ext(char *filename, char **name, char **ext)
Split the filename to basename and extension.
Definition res_convert.c:41
#define NULL
Definition resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65
char * command
Definition cli.h:186
const char * usage
Definition cli.h:177
This structure is allocated by file.c in one chunk, together with buf_size and desc_size bytes of mem...
Definition mod_format.h:101
Data structure associated with a single frame of data.
static struct test_val a
int64_t ast_tvdiff_ms(struct timeval end, struct timeval start)
Computes the difference (in milliseconds) between two struct timeval instances.
Definition time.h:107
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
Definition time.h:159

References a, ast_cli(), ast_closestream(), AST_FILE_MODE, ast_filedelete(), ast_frfree, 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, NULL, split_ext(), and ast_cli_entry::usage.

◆ load_module()

static int load_module ( void  )
static

Definition at line 153 of file res_convert.c.

154{
157}
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Definition cli.h:265
@ AST_MODULE_LOAD_SUCCESS
Definition module.h:70
static struct ast_cli_entry cli_convert[]
#define ARRAY_LEN(a)
Definition utils.h:706

References ARRAY_LEN, ast_cli_register_multiple, AST_MODULE_LOAD_SUCCESS, and cli_convert.

◆ split_ext()

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

Split the filename to basename and extension.

Definition at line 41 of file res_convert.c.

42{
43 *name = *ext = filename;
44
45 if ((*ext = strrchr(filename, '.'))) {
46 **ext = '\0';
47 (*ext)++;
48 }
49
51 return -1;
52
53 return 0;
54}
static const char name[]
Definition format_mp3.c:68
const char * ext
Definition http.c:150

References ast_strlen_zero(), ext, and name.

Referenced by handle_cli_file_convert().

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 147 of file res_convert.c.

148{
150 return 0;
151}
void ast_cli_unregister_multiple(void)
Definition ael_main.c:408

References ARRAY_LEN, ast_cli_unregister_multiple(), and cli_convert.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "File format conversion CLI command" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 159 of file res_convert.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 159 of file res_convert.c.

◆ cli_convert

struct ast_cli_entry cli_convert[]
static
Initial value:
= {
{ .handler = handle_cli_file_convert , .summary = "Convert audio file" ,}
}
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.
Definition res_convert.c:64

Definition at line 143 of file res_convert.c.

143 {
144 AST_CLI_DEFINE(handle_cli_file_convert, "Convert audio file")
145};
#define AST_CLI_DEFINE(fn, txt,...)
Definition cli.h:197

Referenced by load_module(), and unload_module().