aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/main/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/main/image.c')
-rw-r--r--trunk/main/image.c208
1 files changed, 0 insertions, 208 deletions
diff --git a/trunk/main/image.c b/trunk/main/image.c
deleted file mode 100644
index 7096311a2..000000000
--- a/trunk/main/image.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 1999 - 2006, Digium, Inc.
- *
- * Mark Spencer <markster@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
-
-/*! \file
- *
- * \brief Image Management
- *
- * \author Mark Spencer <markster@digium.com>
- */
-
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "asterisk/paths.h" /* use ast_config_AST_DATA_DIR */
-#include "asterisk/sched.h"
-#include "asterisk/channel.h"
-#include "asterisk/file.h"
-#include "asterisk/image.h"
-#include "asterisk/translate.h"
-#include "asterisk/cli.h"
-#include "asterisk/lock.h"
-
-/* XXX Why don't we just use the formats struct for this? */
-static AST_RWLIST_HEAD_STATIC(imagers, ast_imager);
-
-int ast_image_register(struct ast_imager *img)
-{
- AST_RWLIST_WRLOCK(&imagers);
- AST_RWLIST_INSERT_HEAD(&imagers, img, list);
- AST_RWLIST_UNLOCK(&imagers);
- ast_verb(2, "Registered format '%s' (%s)\n", img->name, img->desc);
- return 0;
-}
-
-void ast_image_unregister(struct ast_imager *img)
-{
- AST_RWLIST_WRLOCK(&imagers);
- img = AST_RWLIST_REMOVE(&imagers, img, list);
- AST_RWLIST_UNLOCK(&imagers);
-
- if (img)
- ast_verb(2, "Unregistered format '%s' (%s)\n", img->name, img->desc);
-}
-
-int ast_supports_images(struct ast_channel *chan)
-{
- if (!chan || !chan->tech)
- return 0;
- if (!chan->tech->send_image)
- return 0;
- return 1;
-}
-
-static int file_exists(char *filename)
-{
- int res;
- struct stat st;
- res = stat(filename, &st);
- if (!res)
- return st.st_size;
- return 0;
-}
-
-static void make_filename(char *buf, int len, char *filename, const char *preflang, char *ext)
-{
- if (filename[0] == '/') {
- if (!ast_strlen_zero(preflang))
- snprintf(buf, len, "%s-%s.%s", filename, preflang, ext);
- else
- snprintf(buf, len, "%s.%s", filename, ext);
- } else {
- if (!ast_strlen_zero(preflang))
- snprintf(buf, len, "%s/%s/%s-%s.%s", ast_config_AST_DATA_DIR, "images", filename, preflang, ext);
- else
- snprintf(buf, len, "%s/%s/%s.%s", ast_config_AST_DATA_DIR, "images", filename, ext);
- }
-}
-
-struct ast_frame *ast_read_image(char *filename, const char *preflang, int format)
-{
- struct ast_imager *i;
- char buf[256];
- char tmp[80];
- char *e;
- struct ast_imager *found = NULL;
- int fd;
- int len=0;
- struct ast_frame *f = NULL;
-
- AST_RWLIST_RDLOCK(&imagers);
- AST_RWLIST_TRAVERSE(&imagers, i, list) {
- if (i->format & format) {
- char *stringp=NULL;
- ast_copy_string(tmp, i->exts, sizeof(tmp));
- stringp=tmp;
- e = strsep(&stringp, "|");
- while (e) {
- make_filename(buf, sizeof(buf), filename, preflang, e);
- if ((len = file_exists(buf))) {
- found = i;
- break;
- }
- make_filename(buf, sizeof(buf), filename, NULL, e);
- if ((len = file_exists(buf))) {
- found = i;
- break;
- }
- e = strsep(&stringp, "|");
- }
- }
- if (found)
- break;
- }
-
- if (found) {
- fd = open(buf, O_RDONLY);
- if (fd > -1) {
- if (!found->identify || found->identify(fd)) {
- /* Reset file pointer */
- lseek(fd, 0, SEEK_SET);
- f = found->read_image(fd,len);
- } else
- ast_log(LOG_WARNING, "%s does not appear to be a %s file\n", buf, found->name);
- close(fd);
- } else
- ast_log(LOG_WARNING, "Unable to open '%s': %s\n", buf, strerror(errno));
- } else
- ast_log(LOG_WARNING, "Image file '%s' not found\n", filename);
-
- AST_RWLIST_UNLOCK(&imagers);
-
- return f;
-}
-
-int ast_send_image(struct ast_channel *chan, char *filename)
-{
- struct ast_frame *f;
- int res = -1;
- if (chan->tech->send_image) {
- f = ast_read_image(filename, chan->language, -1);
- if (f) {
- res = chan->tech->send_image(chan, f);
- ast_frfree(f);
- }
- }
- return res;
-}
-
-static char *handle_core_show_image_formats(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
-{
-#define FORMAT "%10s %10s %50s %10s\n"
-#define FORMAT2 "%10s %10s %50s %10s\n"
- struct ast_imager *i;
- int count_fmt = 0;
-
- switch (cmd) {
- case CLI_INIT:
- e->command = "core show image formats";
- e->usage =
- "Usage: core show image formats\n"
- " Displays currently registered image formats (if any).\n";
- return NULL;
- case CLI_GENERATE:
- return NULL;
- }
- if (a->argc != 4)
- return CLI_SHOWUSAGE;
- ast_cli(a->fd, FORMAT, "Name", "Extensions", "Description", "Format");
- ast_cli(a->fd, FORMAT, "----", "----------", "-----------", "------");
- AST_RWLIST_RDLOCK(&imagers);
- AST_RWLIST_TRAVERSE(&imagers, i, list) {
- ast_cli(a->fd, FORMAT2, i->name, i->exts, i->desc, ast_getformatname(i->format));
- count_fmt++;
- }
- AST_RWLIST_UNLOCK(&imagers);
- ast_cli(a->fd, "\n%d image format%s registered.\n", count_fmt, count_fmt == 1 ? "" : "s");
- return CLI_SUCCESS;
-}
-
-struct ast_cli_entry cli_image[] = {
- AST_CLI_DEFINE(handle_core_show_image_formats, "Displays image formats")
-};
-
-int ast_image_init(void)
-{
- ast_cli_register_multiple(cli_image, ARRAY_LEN(cli_image));
- return 0;
-}