Changes of Revision 4
[-] | Changed | asterisk16-capi.spec |
x 1
2 # 3 -# spec file for package asterisk-capi (Version 1.1.4) 4 +# spec file for package asterisk-capi (Version 1.1.5) 5 # 6 # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. 7 # This file and all modifications and additions to the pristine 8
9 URL: http://www.junghanns.net/asterisk 10 Summary: ISDN Module for Asterisk 11 Group: Productivity/Telephony/Servers 12 -Version: 1.1.4 13 +Version: 1.1.5 14 Release: 21 15 License: GNU General Public License (GPL) 16 Group: Productivity/Telephony/Servers 17
18 %dir %{_libdir}/asterisk/modules 19 20 %changelog -n asterisk16-capi 21 +* Sat Mar 19 2011 Carsten Schoene <cs@linux-administrator.com> - 1.1.5-1 22 +- update to release 1.1.5 23 + 24 * Fri Jan 29 2010 - vittorio@vitsoft.bz 25 - New version: 1.1.4 to match the latest version of Asterisk. 26 * Fri Oct 20 2006 - max@suse.de 27 |
||
[+] | 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; |