[-]
[+]
|
Changed |
asterisk161-capi.spec
|
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/CHANGES
^
|
@@ -1,6 +1,13 @@
CHANGES
=======
+chan_capi-1.1.5
+------------------
+- corrected check for Info value on CONNECT_B3_CONF
+- fixed NULL-pointer in cid_name (asterisk 1.6 pickup revealed this)
+- changed action on prodding in .write function to ignore it
+- API adaptions to new asterisk trunk
+
chan_capi-1.1.4
------------------
- use extended fax if available only and have fine resolution on receive activated by default
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/Makefile
^
|
@@ -56,7 +56,17 @@
CONFIG_DIR=$(INSTALL_PREFIX)/usr/pkg/etc/asterisk
endif
+OSARCH=$(shell uname -s)
+
+ifeq ($(strip $(PROC)),)
+ifeq (${OSARCH},Linux)
+PROC=$(shell uname -m)
+else
+ifeq (${OSARCH},FreeBSD)
PROC=$(shell uname -m)
+endif
+endif
+endif
AVERSION=$(shell if grep -q "VERSION_NUM 0104" $(ASTERISK_HEADER_DIR)/asterisk/version.h; then echo V1_4; fi)
@@ -87,9 +97,9 @@
CFLAGS=-pipe -fPIC -Wall -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE
CFLAGS+=$(OPTIMIZE)
-CFLAGS+=-O6
+CFLAGS+=-O2
CFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
-CFLAGS+=$(shell if uname -m | grep -q ppc; then echo "-fsigned-char"; fi)
+CFLAGS+=$(shell if uname -m | grep -q "ppc\|arm\|s390"; then echo "-fsigned-char"; fi)
LIBS=-ldl -lpthread -lm
CC=gcc
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/README
^
|
@@ -1,6 +1,6 @@
chan_capi a Common ISDN API 2.0 implementation for Asterisk
- Copyright (C) 2005-2009 Cytronics & Melware
+ Copyright (C) 2005-2010 Cytronics & Melware
Armin Schindler <armin@melware.de>
Reworked, but based on the work of
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi.c
^
|
@@ -1,7 +1,7 @@
/*
* An implementation of Common ISDN API 2.0 for Asterisk
*
- * Copyright (C) 2005-2009 Cytronics & Melware
+ * Copyright (C) 2005-2010 Cytronics & Melware
*
* Armin Schindler <armin@melware.de>
*
@@ -40,8 +40,8 @@
#include "chan_capi_chat.h"
#include "chan_capi_command.h"
-#define CC_VERSION "1.1.4"
-/* #define CC_VERSION "$Revision: 756 $" */
+#define CC_VERSION "1.1.5"
+/* #define CC_VERSION "$Revision: 789 $" */
/*
* personal stuff
@@ -177,7 +177,11 @@
static char default_language[MAX_LANGUAGE] = "";
+#ifdef CC_AST_HAS_FORMAT_T
+format_t capi_capability = AST_FORMAT_ALAW;
+#else
int capi_capability = AST_FORMAT_ALAW;
+#endif
static int null_plci_dtmf_support = 1;
@@ -791,7 +795,7 @@
if ((i->state == CAPI_STATE_DISCONNECTING) ||
(i->isdnstate & CAPI_ISDN_STATE_HANGUP)) {
cc_verbose(3, 1, VERBOSE_PREFIX_4 "%s: no queue_frame in state disconnecting for %d/%d\n",
- i->vname, f->frametype, f->subclass);
+ i->vname, f->frametype, FRAME_SUBCLASS_INTEGER(f->subclass));
return 0;
}
@@ -800,7 +804,7 @@
}
if ((f->frametype == AST_FRAME_CONTROL) &&
- (f->subclass == AST_CONTROL_HANGUP)) {
+ (FRAME_SUBCLASS_INTEGER(f->subclass) == AST_CONTROL_HANGUP)) {
i->isdnstate |= CAPI_ISDN_STATE_HANGUP;
}
@@ -1068,7 +1072,11 @@
i->rtpcodec = 0;
if (i->rtp) {
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ ast_rtp_instance_destroy(i->rtp);
+#else
ast_rtp_destroy(i->rtp);
+#endif
i->rtp = NULL;
}
@@ -1162,7 +1170,7 @@
if (!(i->isdnstate & CAPI_ISDN_STATE_PROGRESS)) {
i->isdnstate |= CAPI_ISDN_STATE_PROGRESS;
- fr.subclass = AST_CONTROL_PROGRESS;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_PROGRESS;
local_queue_frame(i, &fr);
}
return;
@@ -2123,7 +2131,7 @@
int fmt;
#ifdef CC_AST_HAS_EXT_CHAN_ALLOC
- tmp = ast_channel_alloc(0, state, i->cid, NULL,
+ tmp = ast_channel_alloc(0, state, i->cid, emptyid,
#ifdef CC_AST_HAS_EXT2_CHAN_ALLOC
i->accountcode, i->dnid, i->context,
#ifdef CC_AST_HAS_LINKEDID_CHAN_ALLOC
@@ -2296,11 +2304,16 @@
* PBX wants us to dial ...
*/
#ifdef CC_AST_HAS_REQUEST_REQUESTOR
+#ifdef CC_AST_HAS_REQUEST_FORMAT_T
static struct ast_channel *
-pbx_capi_request(const char *type, int format, const struct ast_channel *requestor, void *data, int *cause)
+pbx_capi_request(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause)
/* TODO: new field requestor to link to called channel */
#else
static struct ast_channel *
+pbx_capi_request(const char *type, int format, const struct ast_channel *requestor, void *data, int *cause)
+#endif
+#else
+static struct ast_channel *
pbx_capi_request(const char *type, int format, void *data, int *cause)
#endif
{
@@ -2881,7 +2894,8 @@
i->vname);
break;
}
- if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) {
+ if ((f->frametype == AST_FRAME_CONTROL) &&
+ (FRAME_SUBCLASS_INTEGER(f->subclass) == AST_CONTROL_HANGUP)) {
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: clear channel fax: hangup frame.\n",
i->vname);
ast_frfree(f);
@@ -2896,7 +2910,7 @@
i->vname);
} else {
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: cler channel fax: unhandled frame %d/%d.\n",
- i->vname, f->frametype, f->subclass);
+ i->vname, f->frametype, FRAME_SUBCLASS_INTEGER(f->subclass));
}
ast_frfree(f);
} else if (ready_fd == i->readerfd) {
@@ -3545,7 +3559,7 @@
/* we are already in pbx, so we send the digits as dtmf */
for (a = 0; a < strlen(did); a++) {
fr.frametype = AST_FRAME_DTMF;
- fr.subclass = did[a];
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = did[a];
local_queue_frame(i, &fr);
}
}
@@ -3561,16 +3575,18 @@
*/
void capi_queue_cause_control(struct capi_pvt *i, int control)
{
- struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP, };
+ struct ast_frame fr = { AST_FRAME_CONTROL, };
+
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_HANGUP;
if ((i->owner) && (control)) {
int cause = i->owner->hangupcause;
if (cause == AST_CAUSE_NORMAL_CIRCUIT_CONGESTION) {
- fr.subclass = AST_CONTROL_CONGESTION;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_CONGESTION;
} else if ((cause != AST_CAUSE_NO_USER_RESPONSE) &&
(cause != AST_CAUSE_NO_ANSWER)) {
/* not NOANSWER */
- fr.subclass = AST_CONTROL_BUSY;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_BUSY;
}
}
local_queue_frame(i, &fr);
@@ -3873,7 +3889,7 @@
i->vname);
send_progress(i);
fr.frametype = AST_FRAME_CONTROL;
- fr.subclass = AST_CONTROL_RINGING;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_RINGING;
local_queue_frame(i, &fr);
if (i->owner)
ast_setstate(i->owner, AST_STATE_RINGING);
@@ -3883,7 +3899,7 @@
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: info element CALL PROCEEDING\n",
i->vname);
fr.frametype = AST_FRAME_CONTROL;
- fr.subclass = AST_CONTROL_PROCEEDING;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_PROCEEDING;
local_queue_frame(i, &fr);
break;
case 0x8003: /* PROGRESS */
@@ -4135,7 +4151,7 @@
while (i->special_tone_extension[n] != 0) {
fr.frametype = AST_FRAME_DTMF;
- fr.subclass = i->special_tone_extension[n++];
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = i->special_tone_extension[n++];
local_queue_frame(i, &fr);
}
}
@@ -4146,7 +4162,7 @@
if (ignore_digit == 0) {
if (pbx_capi_voicecommand_process_digit(i, 0, dtmf) == 0) {
fr.frametype = AST_FRAME_DTMF;
- fr.subclass = dtmf;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = dtmf;
local_queue_frame(i, &fr);
}
}
@@ -4229,7 +4245,7 @@
}
#ifndef CC_AST_HAS_VERSION_1_4
fr.frametype = AST_FRAME_CONTROL;
- fr.subclass = AST_CONTROL_PROGRESS;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_PROGRESS;
local_queue_frame(i, &fr);
#endif
return;
@@ -4289,9 +4305,9 @@
}
}
}
- fr.subclass = capi_capability;
+ FRAME_SUBCLASS_CODEC(fr.subclass) = capi_capability;
} else {
- fr.subclass = i->codec;
+ FRAME_SUBCLASS_CODEC(fr.subclass) = i->codec;
}
fr.frametype = AST_FRAME_VOICE;
@@ -4302,8 +4318,8 @@
fr.mallocd = 0;
fr.delivery = ast_tv(0,0);
fr.src = NULL;
- cc_verbose(8, 1, VERBOSE_PREFIX_3 "%s: DATA_B3_IND (len=%d) fr.datalen=%d fr.subclass=%d\n",
- i->vname, b3len, fr.datalen, fr.subclass);
+ cc_verbose(8, 1, VERBOSE_PREFIX_3 "%s: DATA_B3_IND (len=%d) fr.datalen=%d fr.subclass=%ld\n",
+ i->vname, b3len, fr.datalen, FRAME_SUBCLASS_CODEC(fr.subclass));
local_queue_frame(i, &fr);
return;
}
@@ -4313,7 +4329,9 @@
*/
static void capi_signal_answer(struct capi_pvt *i)
{
- struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_ANSWER, };
+ struct ast_frame fr = { AST_FRAME_CONTROL, };
+
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_ANSWER;
if (i->outgoing == 1) {
local_queue_frame(i, &fr);
@@ -4602,9 +4620,11 @@
*/
static void capidev_handle_disconnect_indication(_cmsg *CMSG, unsigned int PLCI, unsigned int NCCI, struct capi_pvt *i)
{
- struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP, };
+ struct ast_frame fr = { AST_FRAME_CONTROL, };
int state;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_HANGUP;
+
capi_sendf(NULL, 0, CAPI_DISCONNECT_RESP, PLCI, HEADER_MSGNUM(CMSG), "");
show_capi_info(i, DISCONNECT_IND_REASON(CMSG));
@@ -4651,7 +4671,7 @@
}
if (DISCONNECT_IND_REASON(CMSG) == 0x34a2) {
- fr.subclass = AST_CONTROL_CONGESTION;
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_CONGESTION;
}
if (state == CAPI_STATE_DISCONNECTING) {
@@ -5022,7 +5042,9 @@
unsigned short wInfo, unsigned short wMsgNum)
{
struct capi_pvt *ii;
- struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_BUSY, };
+ struct ast_frame fr = { AST_FRAME_CONTROL, };
+
+ FRAME_SUBCLASS_INTEGER(fr.subclass) = AST_CONTROL_BUSY;
if (*i) {
cc_log(LOG_ERROR, CC_MESSAGE_BIGNAME ": CONNECT_CONF for already "
@@ -5127,7 +5149,7 @@
case CAPI_P_CONF(CONNECT_B3):
wInfo = CONNECT_B3_CONF_INFO(CMSG);
if(i == NULL) break;
- if (wInfo == 0) {
+ if ((wInfo & 0xff00) == 0) {
i->NCCI = NCCI;
if (i->channeltype != CAPI_CHANNELTYPE_NULL) {
capi_controllers[i->controller]->nfreebchannels--;
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi.h
^
|
@@ -31,7 +31,11 @@
#include <asterisk/features.h>
#include <asterisk/utils.h>
#include <asterisk/cli.h>
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+#include <asterisk/rtp_engine.h>
+#else
#include <asterisk/rtp.h>
+#endif
#include <asterisk/causes.h>
#include <asterisk/strings.h>
#include <asterisk/dsp.h>
@@ -126,6 +130,14 @@
#define FRAME_DATA_PTR data
#endif
+#ifdef CC_AST_HAS_UNION_SUBCLASS_IN_FRAME
+#define FRAME_SUBCLASS_INTEGER(x) x.integer
+#define FRAME_SUBCLASS_CODEC(x) x.codec
+#else
+#define FRAME_SUBCLASS_INTEGER(x) x
+#define FRAME_SUBCLASS_CODEC(x) x
+#endif
+
#ifndef CC_AST_HAS_CHANNEL_RELEASE
#define ast_channel_release(x) ast_channel_free(x)
#endif
@@ -496,8 +508,16 @@
time_t whentoretrieve;
/* RTP */
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ struct ast_rtp_instance *rtp;
+#else
struct ast_rtp *rtp;
+#endif
+#ifdef CC_AST_HAS_FORMAT_T
+ format_t capability;
+#else
int capability;
+#endif
int rtpcodec;
int codec;
unsigned int timestamp;
@@ -570,7 +590,11 @@
float rxgain;
float txgain;
struct ast_codec_pref prefs;
+#ifdef CC_AST_HAS_FORMAT_T
+ format_t capability;
+#else
int capability;
+#endif
#ifdef CC_AST_HAS_VERSION_1_4
struct ast_jb_conf jbconf;
char mohinterpret[MAX_MUSICCLASS];
@@ -666,7 +690,11 @@
* prototypes
*/
extern const struct ast_channel_tech capi_tech;
+#ifdef CC_AST_HAS_FORMAT_T
+extern format_t capi_capability;
+#else
extern int capi_capability;
+#endif
extern unsigned capi_ApplID;
extern struct capi_pvt *capi_iflist;
extern void cc_start_b3(struct capi_pvt *i);
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi_chat.c
^
|
@@ -16,6 +16,7 @@
#include <errno.h>
#include <sys/signal.h>
#include <sys/time.h>
+#include <ctype.h>
#include "chan_capi_platform.h"
#include "chan_capi20.h"
@@ -484,7 +485,8 @@
i->vname);
break;
}
- if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) {
+ if ((f->frametype == AST_FRAME_CONTROL) &&
+ (FRAME_SUBCLASS_INTEGER(f->subclass) == AST_CONTROL_HANGUP)) {
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: chat: hangup frame.\n",
i->vname);
ast_frfree(f);
@@ -501,11 +503,15 @@
/* ignore NULL frame */
cc_verbose(5, 1, VERBOSE_PREFIX_3 "%s: chat: NULL frame, ignoring.\n",
i->vname);
+#ifdef CC_AST_HAS_VERSION_1_4
} else if ((f->frametype == AST_FRAME_DTMF_END) && (voice_message == NULL)) {
- pbx_capi_voicecommand_process_digit (i, c, f->subclass);
+#else
+ } else if ((f->frametype == AST_FRAME_DTMF) && (voice_message == NULL)) {
+#endif
+ pbx_capi_voicecommand_process_digit(i, c, FRAME_SUBCLASS_INTEGER(f->subclass));
} else {
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: chat: unhandled frame %d/%d.\n",
- i->vname, f->frametype, f->subclass);
+ i->vname, f->frametype, FRAME_SUBCLASS_INTEGER(f->subclass));
}
ast_frfree(f);
} else if (ready_fd == i->readerfd) {
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi_qsig_core.c
^
|
@@ -51,7 +51,7 @@
if (option_verbose > 4) {
if ((!c_d) || ((c_d) && (capiqsigdebug))) {
cc_mutex_lock(&qsig_verbose_lock);
- cc_pbx_verbose(line);
+ cc_pbx_verbose("%s", line);
cc_mutex_unlock(&qsig_verbose_lock);
}
}
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi_rtp.c
^
|
@@ -166,12 +166,23 @@
hp = ast_gethostbyname("localhost", &ahp);
memcpy(&addr, hp->h_addr, sizeof(addr));
- if (!(i->rtp = ast_rtp_new_with_bindaddr(NULL, NULL, 0, 0, addr))) {
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ i->rtp = ast_rtp_instance_new(NULL, NULL, (struct sockaddr_in *)&addr, NULL);
+#else
+ i->rtp = ast_rtp_new_with_bindaddr(NULL, NULL, 0, 0, addr);
+#endif
+
+ if (!(i->rtp)) {
cc_log(LOG_ERROR, "%s: unable to alloc rtp.\n", i->vname);
return 1;
}
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ ast_rtp_instance_get_local_address(i->rtp, &us);
+ ast_rtp_instance_set_remote_address(i->rtp, &us);
+#else
ast_rtp_get_us(i->rtp, &us);
ast_rtp_set_peer(i->rtp, &us);
+#endif
cc_verbose(2, 1, VERBOSE_PREFIX_4 "%s: alloc rtp socket on %s:%d\n",
i->vname,
#ifdef CC_AST_HAS_VERSION_1_4
@@ -202,17 +213,28 @@
return -1;
}
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ ast_rtp_instance_get_local_address(i->rtp, &us);
+ ast_rtp_instance_set_remote_address(i->rtp, &us);
+ if (ast_rtp_instance_write(i->rtp, f) != 0) {
+#else
ast_rtp_get_us(i->rtp, &us);
ast_rtp_set_peer(i->rtp, &us);
if (ast_rtp_write(i->rtp, f) != 0) {
+#endif
cc_verbose(3, 0, VERBOSE_PREFIX_2 "%s: rtp_write error, dropping packet.\n",
i->vname);
return 0;
}
while(1) {
- len = recvfrom(ast_rtp_fd(i->rtp), buf, sizeof(buf),
- 0, (struct sockaddr *)&us, &uslen);
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ len = recvfrom(ast_rtp_instance_fd(i->rtp, 0),
+ buf, sizeof(buf), 0, (struct sockaddr *)&us, &uslen);
+#else
+ len = recvfrom(ast_rtp_fd(i->rtp),
+ buf, sizeof(buf), 0, (struct sockaddr *)&us, &uslen);
+#endif
if (len <= 0)
break;
@@ -238,7 +260,7 @@
i->send_buffer_handle++;
cc_verbose(6, 1, VERBOSE_PREFIX_4 "%s: RTP write for NCCI=%#x len=%d(%d) %s ts=%x\n",
- i->vname, i->NCCI, len, f->datalen, ast_getformatname(f->subclass),
+ i->vname, i->NCCI, len, f->datalen, ast_getformatname(FRAME_SUBCLASS_CODEC(f->subclass)),
i->timestamp);
capi_sendf(NULL, 0, CAPI_DATA_B3_REQ, i->NCCI, get_capi_MessageNumber(),
@@ -269,28 +291,42 @@
return NULL;
}
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ ast_rtp_instance_get_local_address(i->rtp, &us);
+ ast_rtp_instance_set_remote_address(i->rtp, &us);
+#else
ast_rtp_get_us(i->rtp, &us);
ast_rtp_set_peer(i->rtp, &us);
+#endif
- if (len != sendto(ast_rtp_fd(i->rtp), buf, len, 0, (struct sockaddr *)&us, sizeof(us))) {
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ if (len != sendto(ast_rtp_instance_fd(i->rtp, 0), buf, len, 0, (struct sockaddr *)&us, sizeof(us)))
+#else
+ if (len != sendto(ast_rtp_fd(i->rtp), buf, len, 0, (struct sockaddr *)&us, sizeof(us)))
+#endif
+ {
cc_verbose(4, 1, VERBOSE_PREFIX_3 "%s: RTP sendto error\n",
i->vname);
return NULL;
}
+#ifdef CC_AST_HAS_RTP_ENGINE_H
+ if ((f = ast_rtp_instance_read(i->rtp, 0))) {
+#else
if ((f = ast_rtp_read(i->rtp))) {
+#endif
if (f->frametype != AST_FRAME_VOICE) {
cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: DATA_B3_IND RTP (len=%d) non voice type=%d\n",
i->vname, len, f->frametype);
return NULL;
}
cc_verbose(6, 1, VERBOSE_PREFIX_4 "%s: DATA_B3_IND RTP NCCI=%#x len=%d %s (read/write=%d/%d)\n",
- i->vname, i->NCCI, len, ast_getformatname(f->subclass),
+ i->vname, i->NCCI, len, ast_getformatname(FRAME_SUBCLASS_CODEC(f->subclass)),
i->owner->readformat, i->owner->writeformat);
- if (i->owner->nativeformats != f->subclass) {
- cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: DATA_B3_IND RTP nativeformats=%d, but subclass=%d\n",
- i->vname, i->owner->nativeformats, f->subclass);
- i->owner->nativeformats = f->subclass;
+ if (i->owner->nativeformats != FRAME_SUBCLASS_CODEC(f->subclass)) {
+ cc_verbose(3, 1, VERBOSE_PREFIX_3 "%s: DATA_B3_IND RTP nativeformats=%d, but subclass=%ld\n",
+ i->vname, i->owner->nativeformats, FRAME_SUBCLASS_CODEC(f->subclass));
+ i->owner->nativeformats = FRAME_SUBCLASS_CODEC(f->subclass);
ast_set_read_format(i->owner, i->owner->readformat);
ast_set_write_format(i->owner, i->owner->writeformat);
}
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi_supplementary.c
^
|
@@ -683,6 +683,10 @@
name, PLCI);
}
break;
+ case 0x000d: /* CD */
+ cc_verbose(2, 1, VERBOSE_PREFIX_3 "%s: CD confirmation (0x%04x) (PLCI=%#x)\n",
+ name, serviceinfo, PLCI);
+ break;
case 0x000f: /* CCBS request */
cc_verbose(2, 1, VERBOSE_PREFIX_3 "%s: CCBS request confirmation (0x%04x) (PLCI=%#x)\n",
name, serviceinfo, PLCI);
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/chan_capi_utils.c
^
|
@@ -70,7 +70,7 @@
#endif
cc_mutex_lock(&verbose_lock);
- cc_pbx_verbose(line);
+ cc_pbx_verbose("%s", line);
cc_mutex_unlock(&verbose_lock);
}
@@ -1297,7 +1297,7 @@
f = &i->f;
f->frametype = AST_FRAME_NULL;
- f->subclass = 0;
+ FRAME_SUBCLASS_INTEGER(f->subclass) = 0;
readsize = read(i->readerfd, f, sizeof(struct ast_frame));
if ((readsize != sizeof(struct ast_frame)) && (readsize > 0)) {
@@ -1308,7 +1308,8 @@
f->mallocd = 0;
f->FRAME_DATA_PTR = NULL;
- if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) {
+ if ((f->frametype == AST_FRAME_CONTROL) &&
+ (FRAME_SUBCLASS_INTEGER(f->subclass) == AST_CONTROL_HANGUP)) {
return NULL;
}
@@ -1367,6 +1368,10 @@
if (unlikely(f->frametype == AST_FRAME_NULL)) {
return 0;
}
+ if (unlikely((!f->FRAME_DATA_PTR) || (!f->datalen))) {
+ /* prodding from Asterisk, just returning */
+ return 0;
+ }
if (unlikely(f->frametype == AST_FRAME_DTMF)) {
cc_log(LOG_ERROR, "dtmf frame should be written\n");
return 0;
@@ -1380,15 +1385,12 @@
i->vname);
return 0;
}
- if (unlikely((!f->FRAME_DATA_PTR) || (!f->datalen))) {
- cc_log(LOG_DEBUG, "No data for FRAME_VOICE %s\n", i->vname);
- return 0;
- }
if (i->isdnstate & CAPI_ISDN_STATE_RTP) {
- if (unlikely((!(f->subclass & i->codec)) &&
- (f->subclass != capi_capability))) {
+ if (unlikely((!(FRAME_SUBCLASS_CODEC(f->subclass) & i->codec)) &&
+ (FRAME_SUBCLASS_CODEC(f->subclass) != capi_capability))) {
cc_log(LOG_ERROR, "don't know how to write subclass %s(%d)\n",
- ast_getformatname(f->subclass), f->subclass);
+ ast_getformatname(FRAME_SUBCLASS_CODEC(f->subclass)),
+ FRAME_SUBCLASS_INTEGER(f->subclass));
return 0;
}
return capi_write_rtp(i, f);
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/create_config.sh
^
|
@@ -34,6 +34,11 @@
AVERSION="trunk"
VER="1_6"
fi
+if [ -z "$AVERSIONNUM" ]; then
+ AVERSIONNUM=999999
+ AVERSION="trunk"
+ VER="1_6"
+fi
echo $AVERSION
echo "/*" >$CONFIGFILE
@@ -163,6 +168,13 @@
echo "#undef CC_AST_HAS_UNION_DATA_IN_FRAME" >>$CONFIGFILE
echo " * no new union data in ast_frame structure"
fi
+ if grep -q "union ast_frame_subclass subclass" $INCLUDEDIR/frame.h; then
+ echo "#define CC_AST_HAS_UNION_SUBCLASS_IN_FRAME" >>$CONFIGFILE
+ echo " * found new union subclass in ast_frame structure"
+ else
+ echo "#undef CC_AST_HAS_UNION_SUBCLASS_IN_FRAME" >>$CONFIGFILE
+ echo " * no new union subclass in ast_frame structure"
+ fi
if grep -q "ast_channel_release.*struct" $INCLUDEDIR/channel.h; then
echo "#define CC_AST_HAS_CHANNEL_RELEASE" >>$CONFIGFILE
echo " * found ast_channel_release function"
@@ -184,6 +196,13 @@
echo "#undef CC_AST_HAS_REQUEST_REQUESTOR" >>$CONFIGFILE
echo " * no requestor in ast_request"
fi
+ if grep -q "ast_request.*format_t format" $INCLUDEDIR/channel.h; then
+ echo "#define CC_AST_HAS_REQUEST_FORMAT_T" >>$CONFIGFILE
+ echo " * found format_t in ast_request"
+ else
+ echo "#undef CC_AST_HAS_REQUEST_FORMAT_T" >>$CONFIGFILE
+ echo " * no format_t in ast_request"
+ fi
if grep -q "ast_register_application2.*void " $INCLUDEDIR/module.h; then
echo "#undef CC_AST_HAS_CONST_CHAR_IN_REGAPPL" >>$CONFIGFILE
echo " * no const char in ast_register_application"
@@ -198,6 +217,24 @@
echo "#undef CC_AST_HAS_LINKEDID_CHAN_ALLOC" >>$CONFIGFILE
echo " * no linkedid in ast_channel_alloc"
fi
+ if [ -f $INCLUDEDIR/frame_defs.h ]; then
+ if grep -q "typedef.*format_t" $INCLUDEDIR/frame_defs.h; then
+ echo "#define CC_AST_HAS_FORMAT_T" >>$CONFIGFILE
+ echo " * found format_t in frame_defs"
+ else
+ echo "#undef CC_AST_HAS_FORMAT_T" >>$CONFIGFILE
+ echo " * no format_t in frame_defs"
+ fi
+ else
+ echo "#undef CC_AST_HAS_FORMAT_T" >>$CONFIGFILE
+ fi
+ if [ -f $INCLUDEDIR/rtp_engine.h ]; then
+ echo "#define CC_AST_HAS_RTP_ENGINE_H" >>$CONFIGFILE
+ echo " * found rtp_engine.h"
+ else
+ echo "#undef CC_AST_HAS_RTP_ENGINE_H" >>$CONFIGFILE
+ echo " * no rtp_engine.h"
+ fi
}
case $VER in
|
[-]
[+]
|
Changed |
chan_capi-1.1.5.tar.bz2/libcapi20/capi20.c
^
|
@@ -303,12 +303,14 @@
fd = open(tracefile, O_WRONLY | O_CREAT | O_APPEND, 0644);
if (fd >= 0) {
+ int tmp;
+
ltime = (_cdword)time(NULL);
capimsg_setu16(header, 0, length + sizeof(header));
capimsg_setu32(header, 2, ltime);
header[6] = (send) ? 0x80:0x81;
- write(fd, header, sizeof(header));
- write(fd, buf, length);
+ tmp = write(fd, header, sizeof(header));
+ tmp = write(fd, buf, length);
close(fd);
}
}
@@ -981,13 +983,23 @@
if (remote_capi) {
unsigned char buf[100];
unsigned char *p = buf;
+ unsigned fret;
+
set_rcapicmd_header(&p, 14, RCAPI_GET_PROFILE_REQ, Ctrl);
if(!(remote_command(capi_fd, buf, 14, RCAPI_GET_PROFILE_CONF)))
return CapiMsgOSResourceErr;
- if(*(unsigned short *)buf == CapiNoError) {
- memcpy(Buf, buf + 2, (Ctrl) ? sizeof(struct capi_profile) : 2);
+
+ {
+ unsigned short* tmp = (unsigned short*)buf;
+
+ if(*tmp == CapiNoError) {
+ memcpy(Buf, buf + 2, (Ctrl) ? sizeof(struct capi_profile) : 2);
+ }
+
+ fret = *tmp;
}
- return (*(unsigned short *)buf);
+
+ return (fret);
}
ioctl_data.contr = Ctrl;
|