mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-19 19:52:48 +00:00
Merging in xylome's beaerer capabilty patch (bug 3547)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5342 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -31,7 +31,7 @@ APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_mp3.so\
|
||||
app_talkdetect.so app_alarmreceiver.so app_userevent.so app_verbose.so \
|
||||
app_test.so app_forkcdr.so app_math.so app_realtime.so \
|
||||
app_dumpchan.so app_waitforsilence.so app_while.so app_setrdnis.so \
|
||||
app_md5.so app_readfile.so app_chanspy.so
|
||||
app_md5.so app_readfile.so app_chanspy.so app_settransfercapability.so
|
||||
|
||||
ifneq (${OSARCH},Darwin)
|
||||
ifneq (${OSARCH},SunOS)
|
||||
|
@@ -77,7 +77,7 @@ static char *descrip =
|
||||
" 'r' -- indicate ringing to the calling party, pass no audio until answered.\n"
|
||||
" 'm[(class)]' -- provide hold music to the calling party until answered (optionally\n"
|
||||
" with the specified class.\n"
|
||||
" 'M(x[^arg]) -- Executes the macro (x with ^ delim arg list) upon connect of the call.\n"
|
||||
" 'M(x[^arg])' -- Executes the macro (x with ^ delim arg list) upon connect of the call.\n"
|
||||
" Also, the macro can set the MACRO_RESULT variable to do the following:\n"
|
||||
" -- ABORT - Hangup both legs of the call.\n"
|
||||
" -- CONGESTION - Behave as if line congestion was encountered.\n"
|
||||
@@ -1039,8 +1039,8 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
|
||||
tmp->chan->cid.cid_tns = chan->cid.cid_tns;
|
||||
/* Presense of ADSI CPE on outgoing channel follows ours */
|
||||
tmp->chan->adsicpe = chan->adsicpe;
|
||||
/* pass the digital flag */
|
||||
ast_copy_flags(tmp->chan, chan, AST_FLAG_DIGITAL);
|
||||
/* Pass the transfer capability */
|
||||
tmp->chan->transfercapability = chan->transfercapability;
|
||||
|
||||
/* If we have an outbound group, set this peer channel to it */
|
||||
if (outbound_group)
|
||||
|
20
channel.c
20
channel.c
@@ -39,6 +39,7 @@
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/lock.h>
|
||||
#include <asterisk/app.h>
|
||||
#include <asterisk/transcap.h>
|
||||
#ifdef ZAPTEL_OPTIMIZATIONS
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef __linux__
|
||||
@@ -243,6 +244,25 @@ char *ast_state2str(int state)
|
||||
}
|
||||
}
|
||||
|
||||
char *ast_transfercapability2str(int transfercapability)
|
||||
{
|
||||
switch(transfercapability) {
|
||||
case AST_TRANS_CAP_SPEECH:
|
||||
return "SPEECH";
|
||||
case AST_TRANS_CAP_DIGITAL:
|
||||
return "DIGITAL";
|
||||
case AST_TRANS_CAP_RESTRICTED_DIGITAL:
|
||||
return "RESTRICTED_DIGITAL";
|
||||
case AST_TRANS_CAP_3_1K_AUDIO:
|
||||
return "3K1AUDIO";
|
||||
case AST_TRANS_CAP_DIGITAL_W_TONES:
|
||||
return "DIGITAL_W_TONES";
|
||||
case AST_TRANS_CAP_VIDEO:
|
||||
return "VIDEO";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
int ast_best_codec(int fmts)
|
||||
{
|
||||
|
@@ -38,6 +38,7 @@
|
||||
#include <asterisk/causes.h>
|
||||
#include <asterisk/term.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <asterisk/transcap.h>
|
||||
#include <sys/signal.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
@@ -1866,12 +1867,14 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
|
||||
ast_log(LOG_DEBUG, "I'm being setup with no bearer right now...\n");
|
||||
pri_set_crv(p->pri->pri, p->call, p->channel, 0);
|
||||
}
|
||||
p->digital = ast_test_flag(ast,AST_FLAG_DIGITAL);
|
||||
p->digital = IS_DIGITAL(ast->transfercapability);
|
||||
pri_sr_set_channel(sr, p->bearer ? PVT_TO_CHANNEL(p->bearer) : PVT_TO_CHANNEL(p),
|
||||
p->pri->nodetype == PRI_NETWORK ? 0 : 1, 1);
|
||||
pri_sr_set_bearer(sr, p->digital ? PRI_TRANS_CAP_DIGITAL : PRI_TRANS_CAP_SPEECH,
|
||||
pri_sr_set_bearer(sr, p->digital ? PRI_TRANS_CAP_DIGITAL : ast->transfercapability,
|
||||
(p->digital ? -1 :
|
||||
((p->law == ZT_LAW_ALAW) ? PRI_LAYER_1_ALAW : PRI_LAYER_1_ULAW)));
|
||||
if (option_verbose > 2)
|
||||
ast_verbose(VERBOSE_PREFIX_3 "Requested transfer capability: 0x%.2x - %s\n", ast->transfercapability, ast_transfercapability2str(ast->transfercapability));
|
||||
dp_strip = 0;
|
||||
pridialplan = p->pri->dialplan - 1;
|
||||
if (pridialplan == -2) { /* compute dynamically */
|
||||
@@ -4604,35 +4607,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifdef ZAPATA_PRI
|
||||
static void set_calltype(struct ast_channel *chan, int ctype)
|
||||
{
|
||||
char *s = "UNKNOWN";
|
||||
switch(ctype) {
|
||||
case PRI_TRANS_CAP_SPEECH:
|
||||
s = "SPEECH";
|
||||
break;
|
||||
case PRI_TRANS_CAP_DIGITAL:
|
||||
s = "DIGITAL";
|
||||
break;
|
||||
case PRI_TRANS_CAP_RESTRICTED_DIGITAL:
|
||||
s = "RESTRICTED_DIGITAL";
|
||||
break;
|
||||
case PRI_TRANS_CAP_3_1K_AUDIO:
|
||||
s = "31KAUDIO";
|
||||
break;
|
||||
case PRI_TRANS_CAP_7K_AUDIO:
|
||||
s = "7KAUDIO";
|
||||
break;
|
||||
case PRI_TRANS_CAP_VIDEO:
|
||||
s = "VIDEO";
|
||||
break;
|
||||
}
|
||||
pbx_builtin_setvar_helper(chan, "CALLTYPE", s);
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int index, int law, int ctype)
|
||||
static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int index, int law, int transfercapability)
|
||||
{
|
||||
struct ast_channel *tmp;
|
||||
int deflaw;
|
||||
@@ -4764,14 +4739,14 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int
|
||||
tmp->cid.cid_pres = i->callingpres;
|
||||
tmp->cid.cid_ton = i->cid_ton;
|
||||
#ifdef ZAPATA_PRI
|
||||
set_calltype(tmp, ctype);
|
||||
tmp->transfercapability = transfercapability;
|
||||
pbx_builtin_setvar_helper(tmp, "TRANSFERCAPABILITY", ast_transfercapability2str(transfercapability));
|
||||
if (transfercapability & PRI_TRANS_CAP_DIGITAL) {
|
||||
i->digital = 1;
|
||||
}
|
||||
/* Assume calls are not idle calls unless we're told differently */
|
||||
i->isidlecall = 0;
|
||||
i->alreadyhungup = 0;
|
||||
if (ctype & PRI_TRANS_CAP_DIGITAL) {
|
||||
i->digital = 1;
|
||||
ast_set_flag(tmp, AST_FLAG_DIGITAL);
|
||||
}
|
||||
#endif
|
||||
/* clear the fake event in case we posted one before we had ast_chanenl */
|
||||
i->fake_event = 0;
|
||||
|
@@ -315,6 +315,9 @@ struct ast_channel {
|
||||
/*! channel flags of AST_FLAG_ type */
|
||||
unsigned int flags;
|
||||
|
||||
/* ISDN Transfer Capbility - AST_FLAG_DIGITAL is not enough */
|
||||
unsigned short transfercapability;
|
||||
|
||||
struct ast_frame *readq;
|
||||
int alertpipe[2];
|
||||
/*! Write translation path */
|
||||
@@ -338,7 +341,8 @@ struct ast_channel {
|
||||
/* Channels have this property if they can accept input with jitter; i.e. most VoIP channels */
|
||||
#define AST_CHAN_TP_WANTSJITTER (1 << 0)
|
||||
|
||||
#define AST_FLAG_DIGITAL (1 << 0) /* if the call is a digital ISDN call */
|
||||
/* This flag has been deprecated by the transfercapbilty data member in struct ast_channel */
|
||||
/* #define AST_FLAG_DIGITAL (1 << 0) */ /* if the call is a digital ISDN call */
|
||||
#define AST_FLAG_DEFER_DTMF (1 << 1) /* if dtmf should be deferred */
|
||||
#define AST_FLAG_WRITE_INT (1 << 2) /* if write should be interrupt generator */
|
||||
#define AST_FLAG_BLOCKING (1 << 3) /* if we are blocking */
|
||||
@@ -811,6 +815,15 @@ int ast_channel_masquerade(struct ast_channel *original, struct ast_channel *clo
|
||||
*/
|
||||
char *ast_state2str(int state);
|
||||
|
||||
/*! Gives the string form of a given transfer capability */
|
||||
/*!
|
||||
* \param transercapability transfercapabilty to get the name of
|
||||
* Give a name to a transfercapbility
|
||||
* See above
|
||||
* Returns the text form of the binary transfer capbility
|
||||
*/
|
||||
char *ast_transfercapability2str(int transfercapability);
|
||||
|
||||
/* Options: Some low-level drivers may implement "options" allowing fine tuning of the
|
||||
low level channel. See frame.h for options. Note that many channel drivers may support
|
||||
none or a subset of those features, and you should not count on this if you want your
|
||||
|
33
include/asterisk/transcap.h
Executable file
33
include/asterisk/transcap.h
Executable file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Asterisk -- A telephony toolkit for Linux.
|
||||
*
|
||||
* General Asterisk channel definitions.
|
||||
*
|
||||
* Copyright (C) 1999 - 2005, Digium, Inc.
|
||||
*
|
||||
* Matthew Fredrickson <creslin@digium.com>
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License
|
||||
*/
|
||||
|
||||
#ifndef _ASTERISK_TRANSCAP_H
|
||||
#define _ASTERISK_TRANSCAP_H
|
||||
|
||||
/* These definitions are taken directly out of libpri.h and used here.
|
||||
* DO NOT change them as it will cause unexpected behavior in channels
|
||||
* that utilize these fields.
|
||||
*/
|
||||
|
||||
#define AST_TRANS_CAP_SPEECH 0x0
|
||||
#define AST_TRANS_CAP_DIGITAL 0x08
|
||||
#define AST_TRANS_CAP_RESTRICTED_DIGITAL 0x09
|
||||
#define AST_TRANS_CAP_3_1K_AUDIO 0x10
|
||||
#define AST_TRANS_CAP_7K_AUDIO 0x11 /* Depriciated ITU Q.931 (05/1998)*/
|
||||
#define AST_TRANS_CAP_DIGITAL_W_TONES 0x11
|
||||
#define AST_TRANS_CAP_VIDEO 0x18
|
||||
|
||||
#define IS_DIGITAL(cap)\
|
||||
(cap) & AST_TRANS_CAP_DIGITAL ? 1 : 0
|
||||
|
||||
#endif /* _ASTERISK_TRANSCAP_H */
|
Reference in New Issue
Block a user