Adding Realtime Text support (T.140) to Asterisk

T.140/RFC 2793 is a live communication channel, originally
created for IP based text phones for hearing impaired. 
Feels very much like the old Unix talk application.

This code is developed and disclaimed by John Martin of Aupix, UK.
Tested for interoperability by myself and Omnitor in Sweden,
the company that wrote most of the specifications.

A big thank you to everyone involved in this.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@54838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Olle Johansson
2007-02-16 13:35:44 +00:00
parent 84d1cf37fe
commit ba32ee49d0
11 changed files with 513 additions and 97 deletions

View File

@@ -155,7 +155,7 @@ extern "C" {
#include "asterisk/compiler.h"
#define AST_MAX_FDS 8
#define AST_MAX_FDS 10
/*
* We have AST_MAX_FDS file descriptors in a channel.
* Some of them have a fixed use:
@@ -297,6 +297,9 @@ struct ast_channel_tech {
/*! \brief Write a frame, in standard format */
int (* const write_video)(struct ast_channel *chan, struct ast_frame *frame);
/*! \brief Write a text frame, in standard format */
int (* const write_text)(struct ast_channel *chan, struct ast_frame *frame);
/*! \brief Find bridged channel */
struct ast_channel *(* const bridged_channel)(struct ast_channel *chan, struct ast_channel *bridge);
@@ -888,6 +891,14 @@ int ast_write(struct ast_channel *chan, struct ast_frame *frame);
*/
int ast_write_video(struct ast_channel *chan, struct ast_frame *frame);
/*! \brief Write text frame to a channel
* This function writes the given frame to the indicated channel.
* \param chan destination channel of the frame
* \param frame frame that will be written
* \return It returns 1 on success, 0 if not implemented, and -1 on failure.
*/
int ast_write_text(struct ast_channel *chan, struct ast_frame *frame);
/*! \brief Send empty audio to prime a channel driver */
int ast_prod(struct ast_channel *chan);

View File

@@ -268,7 +268,7 @@ extern struct ast_frame ast_null_frame;
#define AST_FORMAT_T140 (1 << 25)
/*! Maximum text mask */
#define AST_FORMAT_MAX_TEXT (1 << 26)
#define AST_FORMAT_TEXT_MASK (((1 << 27)-1) & ~(AST_FORMAT_AUDIO_MASK) & ~(AST_FORMAT_VIDEO_MASK)))
#define AST_FORMAT_TEXT_MASK (((1 << 27)-1) & ~(AST_FORMAT_AUDIO_MASK) & ~(AST_FORMAT_VIDEO_MASK))
enum ast_control_frame_type {
AST_CONTROL_HANGUP = 1, /*!< Other end has hungup */

View File

@@ -75,8 +75,10 @@ struct ast_rtp_protocol {
enum ast_rtp_get_result (* const get_rtp_info)(struct ast_channel *chan, struct ast_rtp **rtp);
/*! Get RTP struct, or NULL if unwilling to transfer */
enum ast_rtp_get_result (* const get_vrtp_info)(struct ast_channel *chan, struct ast_rtp **rtp);
/*! Get RTP struct, or NULL if unwilling to transfer */
enum ast_rtp_get_result (* const get_trtp_info)(struct ast_channel *chan, struct ast_rtp **rtp);
/*! Set RTP peer */
int (* const set_rtp_peer)(struct ast_channel *chan, struct ast_rtp *peer, struct ast_rtp *vpeer, int codecs, int nat_active);
int (* const set_rtp_peer)(struct ast_channel *chan, struct ast_rtp *peer, struct ast_rtp *vpeer, struct ast_rtp *tpeer, int codecs, int nat_active);
int (* const get_codec)(struct ast_channel *chan);
const char * const type;
AST_LIST_ENTRY(ast_rtp_protocol) list;