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
1.2-netsec
Matthew Fredrickson 20 years ago
parent 41c684c4a3
commit b81f233e68

@ -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,8 +77,8 @@ 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"
" Also, the macro can set the MACRO_RESULT variable to do the following:\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"
" -- BUSY - Behave as if a busy signal was encountered. (n+101)\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)

@ -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,13 +1867,15 @@ 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)));
dp_strip = 0;
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 */
if (strncmp(c + p->stripmsd, p->pri->internationalprefix, strlen(p->pri->internationalprefix)) == 0) {
@ -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

@ -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 */
Loading…
Cancel
Save