aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>1999-11-21 02:26:43 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>1999-11-21 02:26:43 +0000
commit4c63f091a4767fbd5c0cefed92446a1a184065d0 (patch)
tree5d6ff7a3fa451a38d36e8e29c76e2ad73910b110 /include/asterisk
parentb3f95b5b13bd294be77c0cbe0a807c565ef568b0 (diff)
Version 0.1.0 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@65 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk')
-rwxr-xr-xinclude/asterisk/file.h84
-rwxr-xr-xinclude/asterisk/frame.h101
-rwxr-xr-xinclude/asterisk/translate.h76
3 files changed, 261 insertions, 0 deletions
diff --git a/include/asterisk/file.h b/include/asterisk/file.h
new file mode 100755
index 000000000..da4ffaa42
--- /dev/null
+++ b/include/asterisk/file.h
@@ -0,0 +1,84 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Generic File Format Support.
+ *
+ * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#ifndef _ASTERISK_FILE_H
+#define _ASTERISK_FILE_H
+
+#include <asterisk/channel.h>
+#include <asterisk/frame.h>
+#include <fcntl.h>
+
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+
+/* Convenient for waiting */
+#define AST_DIGIT_ANY "0123456789#*"
+
+/* Defined by individual formats. First item MUST be a
+ pointer for use by the stream manager */
+struct ast_filestream;
+
+/* Register a new file format capability */
+int ast_format_register(char *name, char *exts, int format,
+ struct ast_filestream * (*open)(int fd),
+ struct ast_filestream * (*rewrite)(int fd, char *comment),
+ int (*apply)(struct ast_channel *, struct ast_filestream *),
+ int (*write)(struct ast_filestream *, struct ast_frame *),
+ struct ast_frame * (*read)(struct ast_filestream *),
+ void (*close)(struct ast_filestream *),
+ char * (*getcomment)(struct ast_filestream *));
+
+int ast_format_unregister(char *name);
+
+/* Start streaming a file */
+int ast_streamfile(struct ast_channel *c, char *filename);
+
+/* Stop playback of a stream */
+int ast_stopstream(struct ast_channel *c);
+
+/* See if a given file exists in a given format. If fmt is NULL, any format is accepted.*/
+int ast_fileexists(char *filename, char *fmt);
+
+/* Rename a given file in a given format, or if fmt is NULL, then do so for all */
+int ast_filerename(char *oldname, char *newname, char *fmt);
+
+/* Delete a given file in a given format, or if fmt is NULL, then do so for all */
+int ast_filedelete(char *filename, char *fmt);
+
+/* Wait for a stream to stop or for any one of a given digit to arrive, Returns
+ 0 if the stream finishes, the character if it was interrupted, and -1 on error */
+char ast_waitstream(struct ast_channel *c, char *breakon);
+
+/* Create an outgoing file stream. oflags are flags for the open() command, and
+ if check is non-zero, then it will not write a file if there are any files that
+ start with that name and have an extension */
+struct ast_filestream *ast_writefile(char *filename, char *type, char *comment, int oflags, int check, mode_t mode);
+
+/* Send a frame to a filestream -- note: does NOT free the frame, call ast_frfree manually */
+int ast_writestream(struct ast_filestream *fs, struct ast_frame *f);
+
+/* Close a playback or recording stream */
+int ast_closestream(struct ast_filestream *f);
+
+#define AST_RESERVED_POINTERS 4
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+
+
+#endif
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
new file mode 100755
index 000000000..d9fb440f0
--- /dev/null
+++ b/include/asterisk/frame.h
@@ -0,0 +1,101 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Asterisk internal frame definitions.
+ *
+ * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#ifndef _ASTERISK_FRAME_H
+#define _ASTERISK_FRAME_H
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* A frame of data read used to communicate between
+ between channels and applications */
+struct ast_frame {
+ int frametype; /* Kind of frame */
+ int subclass; /* Subclass, frame dependent */
+ int datalen; /* Length of data */
+ int timelen; /* Amount of time associated with this frame */
+ int mallocd; /* Was the data malloc'd? i.e. should we
+ free it when we discard the frame? */
+ int offset; /* How far into "data" the data really starts */
+ char *src; /* Optional source of frame for debugging */
+ void *data; /* Pointer to actual data */
+};
+
+struct ast_frame_chain {
+ /* XXX Should ast_frame chain's be just prt of frames, i.e. should they just link? XXX */
+ struct ast_frame *fr;
+ struct ast_frame_chain *next;
+};
+
+#define AST_FRIENDLY_OFFSET 64 /* It's polite for a a new frame to
+ have at least this number of bytes
+ of offset before your real frame data
+ so that additional headers can be
+ added. */
+
+#define AST_MALLOCD_HDR (1 << 0) /* Need the header be free'd? */
+#define AST_MALLOCD_DATA (1 << 1) /* Need the data be free'd? */
+#define AST_MALLOCD_SRC (1 << 2) /* Need the source be free'd? (haha!) */
+
+/* Frame types */
+#define AST_FRAME_DTMF 1 /* A DTMF digit, subclass is the digit */
+#define AST_FRAME_VOICE 2 /* Voice data, subclass is AST_FORMAT_* */
+#define AST_FRAME_VIDEO 3 /* Video frame, maybe?? :) */
+#define AST_FRAME_CONTROL 4 /* A control frame, subclass is AST_CONTROL_* */
+#define AST_FRAME_NULL 5 /* An empty, useless frame */
+
+/* Data formats for capabilities and frames alike */
+#define AST_FORMAT_G723_1 (1 << 0) /* G.723.1 compression */
+#define AST_FORMAT_GSM (1 << 1) /* GSM compression */
+#define AST_FORMAT_ULAW (1 << 2) /* Raw mu-law data (G.711) */
+#define AST_FORMAT_ALAW (1 << 3) /* Raw A-law data (G.711) */
+#define AST_FORMAT_MP3 (1 << 4) /* MPEG-2 layer 3 */
+#define AST_FORMAT_ADPCM (1 << 5) /* ADPCM */
+#define AST_FORMAT_SLINEAR (1 << 6) /* Raw 16-bit Signed Linear (8000 Hz) PCM */
+#define AST_FORMAT_MAX_AUDIO (1 << 15) /* Maximum audio format */
+#define AST_FORMAT_JPEG (1 << 16) /* JPEG Images */
+#define AST_FORMAT_PNG (1 << 17) /* PNG Images */
+#define AST_FORMAT_H261 (1 << 18) /* H.261 Video */
+#define AST_FORMAT_H263 (1 << 19) /* H.263 Video */
+
+/* Control frame types */
+#define AST_CONTROL_HANGUP 1 /* Other end has hungup */
+#define AST_CONTROL_RING 2 /* Local ring */
+#define AST_CONTROL_RINGING 3 /* Remote end is ringing */
+#define AST_CONTROL_ANSWER 4 /* Remote end has answered */
+#define AST_CONTROL_BUSY 5 /* Remote end is busy */
+#define AST_CONTROL_TAKEOFFHOOK 6 /* Make it go off hook */
+#define AST_CONTROL_OFFHOOK 7 /* Line is off hook */
+
+/* Request a frame be allocated. source is an optional source of the frame,
+ len is the requested length, or "0" if the caller will supply the buffer */
+struct ast_frame *ast_fralloc(char *source, int len);
+
+/* Free a frame, and the memory it used if applicable */
+void ast_frfree(struct ast_frame *fr);
+
+/* Take a frame, and if it's not been malloc'd, make a malloc'd copy
+ and if the data hasn't been malloced then make the
+ data malloc'd. If you need to store frames, say for queueing, then
+ you should call this function. */
+struct ast_frame *ast_frisolate(struct ast_frame *fr);
+
+void ast_frchain(struct ast_frame_chain *fc);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+
+#endif
diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h
new file mode 100755
index 000000000..68edc046d
--- /dev/null
+++ b/include/asterisk/translate.h
@@ -0,0 +1,76 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Translate via the use of pseudo channels
+ *
+ * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#ifndef _ASTERISK_TRANSLATE_H
+#define _ASTERISK_TRANSLATE_H
+
+#define MAX_FORMAT 32
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#include <asterisk/frame.h>
+
+/* Declared by individual translators */
+struct ast_translator_pvt;
+
+struct ast_translator {
+ char name[80];
+ int srcfmt;
+ int dstfmt;
+ struct ast_translator_pvt *(*new)();
+ int (*framein)(struct ast_translator_pvt *pvt, struct ast_frame *in);
+ struct ast_frame * (*frameout)(struct ast_translator_pvt *pvt);
+ void (*destroy)(struct ast_translator_pvt *pvt);
+ /* For performance measurements */
+ /* Generate an example frame */
+ struct ast_frame * (*sample)(void);
+ /* Cost in milliseconds for encoding/decoding 1 second of sound */
+ int cost;
+ /* For linking, not to be modified by the translator */
+ struct ast_translator *next;
+};
+
+struct ast_trans_pvt;
+
+/* Create a pseudo channel which translates from a real channel into our
+ desired format. When a translator is installed, you should not use the
+ sub channel until you have stopped the translator. For all other
+ actions, use the real channel. Generally, translators should be created
+ when needed and immediately destroyed when no longer needed. */
+
+/* Directions */
+#define AST_DIRECTION_OUT 1
+#define AST_DIRECTION_IN 2
+#define AST_DIRECTION_BOTH 3
+
+extern struct ast_channel *ast_translator_create(struct ast_channel *real, int format, int direction);
+extern void ast_translator_destroy(struct ast_channel *tran);
+/* Register a Codec translator */
+extern int ast_register_translator(struct ast_translator *t);
+/* Unregister same */
+extern int ast_unregister_translator(struct ast_translator *t);
+/* Given a list of sources, and a designed destination format, which should
+ I choose? */
+extern int ast_translator_best_choice(int dst, int srcs);
+extern struct ast_trans_pvt *ast_translator_build_path(int source, int dest);
+extern void ast_translator_free_path(struct ast_trans_pvt *tr);
+extern struct ast_frame_chain *ast_translate(struct ast_trans_pvt *tr, struct ast_frame *f);
+
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif