Asterisk - The Open Source Telephony Project GIT-master-f36a736
Data Structures | Functions
image.h File Reference

General Asterisk channel definitions for image handling. More...

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

Go to the source code of this file.

Data Structures

struct  ast_imager
 structure associated with registering an image format More...
 

Functions

int ast_image_init (void)
 Initialize image stuff Initializes all the various image stuff. Basically just registers the cli stuff. More...
 
int ast_image_register (struct ast_imager *imgdrv)
 Register image format. More...
 
void ast_image_unregister (struct ast_imager *imgdrv)
 Unregister an image format. More...
 
struct ast_frameast_read_image (const char *filename, const char *preflang, struct ast_format *format)
 Make an image. More...
 
int ast_send_image (struct ast_channel *chan, const char *filename)
 Sends an image. More...
 
int ast_supports_images (struct ast_channel *chan)
 Check for image support on a channel. More...
 

Detailed Description

General Asterisk channel definitions for image handling.

Definition in file image.h.

Function Documentation

◆ ast_image_init()

int ast_image_init ( void  )

Initialize image stuff Initializes all the various image stuff. Basically just registers the cli stuff.

Returns
0 all the time

Definition at line 212 of file image.c.

213{
216 return 0;
217}
int ast_register_cleanup(void(*func)(void))
Register a function to be executed before Asterisk gracefully exits.
Definition: clicompat.c:19
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Definition: cli.h:265
static void image_shutdown(void)
Definition: image.c:207
static struct ast_cli_entry cli_image[]
Definition: image.c:203
#define ARRAY_LEN(a)
Definition: utils.h:666

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), cli_image, and image_shutdown().

Referenced by asterisk_daemon().

◆ ast_image_register()

int ast_image_register ( struct ast_imager imgdrv)

Register image format.

Parameters
imgdrvPopulated ast_imager structure with info to register Registers an image format
Returns
0 regardless

Definition at line 48 of file image.c.

49{
53 ast_verb(5, "Registered format '%s' (%s)\n", img->name, img->desc);
54 return 0;
55}
#define ast_verb(level,...)
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
Definition: linkedlists.h:52
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
Definition: linkedlists.h:151
#define AST_RWLIST_INSERT_HEAD
Definition: linkedlists.h:718
Definition: image.c:46

References AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_verb, ast_imager::desc, and ast_imager::name.

◆ ast_image_unregister()

void ast_image_unregister ( struct ast_imager imgdrv)

Unregister an image format.

Parameters
imgdrvpointer to the ast_imager structure you wish to unregister Unregisters the image format passed in.

Definition at line 57 of file image.c.

58{
60 img = AST_RWLIST_REMOVE(&imagers, img, list);
62
63 if (img)
64 ast_verb(5, "Unregistered format '%s' (%s)\n", img->name, img->desc);
65}
#define AST_RWLIST_REMOVE
Definition: linkedlists.h:885

References AST_RWLIST_REMOVE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_verb, ast_imager::desc, and ast_imager::name.

◆ ast_read_image()

struct ast_frame * ast_read_image ( const char *  filename,
const char *  preflang,
struct ast_format format 
)

Make an image.

Parameters
filenamefilename of image to prepare
preflangpreferred language to get the image...?
formatthe format of the file, NULL for any image format Make an image from a filename ??? No estoy positivo
Return values
anast_frame on success
NULLon failure

Definition at line 101 of file image.c.

102{
103 struct ast_imager *i;
104 char buf[256];
105 char tmp[80];
106 char *e;
107 struct ast_imager *found = NULL;
108 int fd;
109 int len=0;
110 struct ast_frame *f = NULL;
111
113 AST_RWLIST_TRAVERSE(&imagers, i, list) {
114 /* if NULL image format, just pick the first one, otherwise match it. */
115 if (!format || (ast_format_cmp(i->format, format) == AST_FORMAT_CMP_EQUAL)) {
116 char *stringp=NULL;
117 ast_copy_string(tmp, i->exts, sizeof(tmp));
118 stringp = tmp;
119 e = strsep(&stringp, "|");
120 while (e) {
121 make_filename(buf, sizeof(buf), filename, preflang, e);
122 if ((len = file_exists(buf))) {
123 found = i;
124 break;
125 }
126 make_filename(buf, sizeof(buf), filename, NULL, e);
127 if ((len = file_exists(buf))) {
128 found = i;
129 break;
130 }
131 e = strsep(&stringp, "|");
132 }
133 }
134 if (found)
135 break;
136 }
137
138 if (found) {
139 fd = open(buf, O_RDONLY);
140 if (fd > -1) {
141 if (!found->identify || found->identify(fd)) {
142 /* Reset file pointer */
143 lseek(fd, 0, SEEK_SET);
144 f = found->read_image(fd, len);
145 } else
146 ast_log(LOG_WARNING, "%s does not appear to be a %s file\n", buf, found->name);
147 close(fd);
148 } else
149 ast_log(LOG_WARNING, "Unable to open '%s': %s\n", buf, strerror(errno));
150 } else
151 ast_log(LOG_WARNING, "Image file '%s' not found\n", filename);
152
154
155 return f;
156}
#define ast_log
Definition: astobj2.c:42
static int tmp()
Definition: bt_open.c:389
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
enum ast_format_cmp_res ast_format_cmp(const struct ast_format *format1, const struct ast_format *format2)
Compare two formats.
Definition: format.c:201
@ AST_FORMAT_CMP_EQUAL
Definition: format.h:36
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
static int file_exists(char *filename)
Definition: image.c:76
static void make_filename(char *buf, int len, const char *filename, const char *preflang, char *ext)
Definition: image.c:86
char * strsep(char **str, const char *delims)
#define LOG_WARNING
#define AST_RWLIST_RDLOCK(head)
Read locks a list.
Definition: linkedlists.h:78
#define AST_RWLIST_TRAVERSE
Definition: linkedlists.h:494
int errno
#define NULL
Definition: resample.c:96
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:425
Data structure associated with a single frame of data.
structure associated with registering an image format
Definition: image.h:27
char * name
Definition: image.h:28
int(* identify)(int fd)
Definition: image.h:33
struct ast_format * format
Definition: image.h:31
struct ast_frame *(* read_image)(int fd, int len)
Definition: image.h:32
char * exts
Definition: image.h:30

References ast_copy_string(), ast_format_cmp(), AST_FORMAT_CMP_EQUAL, ast_log, AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, buf, errno, ast_imager::exts, file_exists(), ast_imager::format, ast_imager::identify, len(), LOG_WARNING, make_filename(), ast_imager::name, NULL, ast_imager::read_image, strsep(), and tmp().

Referenced by ast_send_image().

◆ ast_send_image()

int ast_send_image ( struct ast_channel chan,
const char *  filename 
)

Sends an image.

Parameters
chanchannel to send image on
filenamefilename of image to send (minus extension) Sends an image on the given channel.
Return values
0on success
-1on error

Definition at line 158 of file image.c.

159{
160 struct ast_frame *f;
161 int res = -1;
162 if (ast_channel_tech(chan)->send_image) {
163 f = ast_read_image(filename, ast_channel_language(chan), NULL);
164 if (f) {
165 res = ast_channel_tech(chan)->send_image(chan, f);
166 ast_frfree(f);
167 }
168 }
169 return res;
170}
const char * ast_channel_language(const struct ast_channel *chan)
const struct ast_channel_tech * ast_channel_tech(const struct ast_channel *chan)
struct ast_frame * ast_read_image(const char *filename, const char *preflang, struct ast_format *format)
Make an image.
Definition: image.c:101
#define ast_frfree(fr)
int(*const send_image)(struct ast_channel *chan, struct ast_frame *frame)
Display or send an image.
Definition: channel.h:779

References ast_channel_language(), ast_channel_tech(), ast_frfree, ast_read_image(), NULL, and ast_channel_tech::send_image.

Referenced by handle_sendimage().

◆ ast_supports_images()

int ast_supports_images ( struct ast_channel chan)

Check for image support on a channel.

Parameters
chanchannel to check Checks the channel to see if it supports the transmission of images
Returns
non-zero if image transmission is supported

Definition at line 67 of file image.c.

68{
69 if (!chan || !ast_channel_tech(chan))
70 return 0;
71 if (!ast_channel_tech(chan)->send_image)
72 return 0;
73 return 1;
74}

References ast_channel_tech().