diff options
author | Maxim Sobolev <sobomax@FreeBSD.org> | 2005-05-03 13:58:26 +0000 |
---|---|---|
committer | Maxim Sobolev <sobomax@FreeBSD.org> | 2005-05-03 13:58:26 +0000 |
commit | 7150c8301f0ff323d2d3fd487efab9f6805ecf7b (patch) | |
tree | 7ca292dfc161206043d279c879db63f2813670f7 /net/asterisk12 | |
parent | ad8515754692b7af5d3fc355958627a8f69899ee (diff) | |
download | ports-7150c8301f0ff323d2d3fd487efab9f6805ecf7b.tar.gz ports-7150c8301f0ff323d2d3fd487efab9f6805ecf7b.zip |
o chan_sip.c:
- Improve codec negotiation logic.
- make sure to parse SDP on re-INVITE.
o chan_zap.c:
- If unanswered Zap channnel is hanged up wait until the calling party
in turn hangs up (by detecting ring timeout). Otherwise next ring will
trigger a "new" incoming call. This appears to be design limitation of
the analogue telephone system - there is no way to reject the call without
answering it first.
Sponsored by: Porta Software Ltd, PBXpress Inc
Notes
Notes:
svn path=/head/; revision=134555
Diffstat (limited to 'net/asterisk12')
-rw-r--r-- | net/asterisk12/Makefile | 2 | ||||
-rw-r--r-- | net/asterisk12/files/patch-channels::chan_sip.c | 38 | ||||
-rw-r--r-- | net/asterisk12/files/patch-channels::chan_zap.c | 91 |
3 files changed, 120 insertions, 11 deletions
diff --git a/net/asterisk12/Makefile b/net/asterisk12/Makefile index 00cb6ce94061..2ef12fe3a651 100644 --- a/net/asterisk12/Makefile +++ b/net/asterisk12/Makefile @@ -7,7 +7,7 @@ PORTNAME= asterisk PORTVERSION= 1.0.7 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= net MASTER_SITES= ftp://ftp.asterisk.org/pub/telephony/asterisk/ \ ftp://ftp.asterisk.org/pub/telephony/asterisk/old-releases/ diff --git a/net/asterisk12/files/patch-channels::chan_sip.c b/net/asterisk12/files/patch-channels::chan_sip.c index 521d6a46d256..e634ce47c97f 100644 --- a/net/asterisk12/files/patch-channels::chan_sip.c +++ b/net/asterisk12/files/patch-channels::chan_sip.c @@ -1,9 +1,9 @@ $FreeBSD$ ---- channels/chan_sip.c.orig -+++ channels/chan_sip.c -@@ -139,7 +139,7 @@ +--- channels/chan_sip.c.orig Sun Feb 17 18:01:43 2002 ++++ channels/chan_sip.c Sun Feb 17 18:10:52 2002 +@@ -141,7 +141,7 @@ static char default_language[MAX_LANGUAGE] = ""; @@ -20,7 +20,16 @@ $FreeBSD$ }; struct sip_history { -@@ -4573,6 +4574,10 @@ +@@ -2218,7 +2219,7 @@ + if (p->owner) { + /* We already hold the channel lock */ + if (f->frametype == AST_FRAME_VOICE) { +- if (f->subclass != p->owner->nativeformats) { ++ if (!(f->subclass & p->owner->nativeformats)) { + ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass); + p->owner->nativeformats = f->subclass; + ast_set_read_format(p->owner, p->owner->readformat); +@@ -4620,6 +4621,10 @@ /* Make a struct route */ thishop = (struct sip_route *)malloc(sizeof(struct sip_route)+len+1); if (thishop) { @@ -31,7 +40,7 @@ $FreeBSD$ strncpy(thishop->hop, rr, len); /* safe */ thishop->hop[len] = '\0'; ast_log(LOG_DEBUG, "build_route: Record-Route hop: <%s>\n", thishop->hop); -@@ -4596,31 +4601,41 @@ +@@ -4643,31 +4648,41 @@ rr += len+1; } } @@ -97,7 +106,7 @@ $FreeBSD$ } } /* Store as new route */ -@@ -7197,7 +7212,11 @@ +@@ -7338,7 +7353,11 @@ /* Get destination right away */ gotdest = get_destination(p, NULL); get_rdnis(p, NULL); @@ -110,7 +119,7 @@ $FreeBSD$ build_contact(p); if (gotdest) { -@@ -7225,7 +7244,6 @@ +@@ -7366,7 +7385,6 @@ c = sip_new(p, AST_STATE_DOWN, ast_strlen_zero(p->username) ? NULL : p->username ); *recount = 1; /* Save Record-Route for any later requests we make on this dialogue */ @@ -118,3 +127,18 @@ $FreeBSD$ if (c) { /* Pre-lock the call */ ast_mutex_lock(&c->lock); +@@ -7426,6 +7444,14 @@ + transmit_response(p, "180 Ringing", req); + break; + case AST_STATE_UP: ++ /* Assuming this to be reinvite, process new SDP portion */ ++ if (!ast_strlen_zero(get_header(req, "Content-Type"))) { ++ process_sdp(p, req); ++ } else { ++ p->jointcapability = p->capability; ++ ast_log(LOG_DEBUG, "Hm.... No sdp for the moment\n"); ++ } ++ + transmit_response_with_sdp(p, "200 OK", req, 1); + break; + default: diff --git a/net/asterisk12/files/patch-channels::chan_zap.c b/net/asterisk12/files/patch-channels::chan_zap.c index 965a643bb687..458a6147d215 100644 --- a/net/asterisk12/files/patch-channels::chan_zap.c +++ b/net/asterisk12/files/patch-channels::chan_zap.c @@ -1,9 +1,9 @@ $FreeBSD$ ---- channels/chan_zap.c -+++ channels/chan_zap.c -@@ -42,7 +42,9 @@ +--- channels/chan_zap.c.orig Sun Feb 17 18:01:44 2002 ++++ channels/chan_zap.c Sun Feb 17 18:03:26 2002 +@@ -46,7 +46,9 @@ #include <sys/signal.h> #include <errno.h> #include <stdlib.h> @@ -13,3 +13,88 @@ $FreeBSD$ #include <unistd.h> #include <sys/ioctl.h> #ifdef __linux__ +@@ -320,7 +322,7 @@ + #define CALLWAITING_REPEAT_SAMPLES ( (10000 * 8) / READ_SIZE) /* 300 ms */ + #define CIDCW_EXPIRE_SAMPLES ( (500 * 8) / READ_SIZE) /* 500 ms */ + #define MIN_MS_SINCE_FLASH ( (2000) ) /* 2000 ms */ +-#define RINGT ( (8000 * 8) / READ_SIZE) ++#define RINGT ( (8000 * 8) / READ_SIZE) /* 8000 ms */ + + struct zt_pvt; + +@@ -535,6 +537,7 @@ + int cidpos; + int cidlen; + int ringt; ++ int waitnorings; + int stripmsd; + int callwaiting; + int callwaitcas; +@@ -2134,12 +2137,20 @@ + + if (option_debug) + ast_log(LOG_DEBUG, "zt_hangup(%s)\n", ast->name); ++ + if (!ast->pvt->pvt) { + ast_log(LOG_WARNING, "Asked to hangup channel not connected\n"); + return 0; + } + + ast_mutex_lock(&p->lock); ++ ++ ++ if((p->sig == SIG_FXSGS) || (p->sig == SIG_FXSKS) || (p->sig == SIG_FXSLS)) ++ if((ast->_state == AST_STATE_RING) && (p->ringt > 1)) ++ { ++ p->waitnorings = 1; ++ } + + index = zt_get_index(ast, p, 1); + +@@ -5717,7 +5728,37 @@ + ast_setstate(chan, AST_STATE_RING); + chan->rings = 1; + p->ringt = RINGT; ++ p->waitnorings = 0; + res = ast_pbx_run(chan); ++ ++ if(p->waitnorings) ++ { ++ p->ringt = RINGT; ++ for(;;) ++ { ++ int i,j=0; ++ i = ZT_IOMUX_SIGEVENT | ZT_IOMUX_NOWAIT; ++ if (ioctl(p->subs[index].zfd, ZT_IOMUX, &i) == -1) ++ break; ++ ++ if (ioctl(p->subs[index].zfd, ZT_GETEVENT, &j) == -1) ++ break; ++ ++ if(j == ZT_EVENT_RINGOFFHOOK) ++ p->ringt = RINGT; ++ ++ usleep(20000); ++ ++ if (p->ringt <= 0) ++ break; ++ ++ else if (p->ringt > 0) ++ p->ringt--; ++ } ++ p->ringt = 0; ++ p->waitnorings = 0; ++ } ++ + if (res) { + ast_hangup(chan); + ast_log(LOG_WARNING, "PBX exited non-zero\n"); +@@ -6018,7 +6059,7 @@ + i = iflist; + while(i) { + if ((i->subs[SUB_REAL].zfd > -1) && i->sig && (!i->radio)) { +- if (!i->owner && !i->subs[SUB_REAL].owner) { ++ if (!i->owner && !i->subs[SUB_REAL].owner && !i->waitnorings) { + /* This needs to be watched, as it lacks an owner */ + pfds[count].fd = i->subs[SUB_REAL].zfd; + pfds[count].events = POLLPRI; |