aboutsummaryrefslogtreecommitdiffstats
path: root/net/asterisk10
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2009-07-24 18:54:50 +0800
committersobomax <sobomax@FreeBSD.org>2009-07-24 18:54:50 +0800
commit8d7bf7bcf439d5b92ed5208e6baf5bbb314de6bb (patch)
tree108e142493218524482aaa26459c72da5ae932f6 /net/asterisk10
parentacbcae900be453c12d1b31070b81a7727bdfc3ba (diff)
downloadfreebsd-ports-gnome-8d7bf7bcf439d5b92ed5208e6baf5bbb314de6bb.tar.gz
freebsd-ports-gnome-8d7bf7bcf439d5b92ed5208e6baf5bbb314de6bb.tar.zst
freebsd-ports-gnome-8d7bf7bcf439d5b92ed5208e6baf5bbb314de6bb.zip
Update to 1.4.25.
Diffstat (limited to 'net/asterisk10')
-rw-r--r--net/asterisk10/Makefile7
-rw-r--r--net/asterisk10/distinfo12
-rw-r--r--net/asterisk10/files/dtmf_debug.diff137
-rw-r--r--net/asterisk10/files/feature_disconnect.diff287
-rw-r--r--net/asterisk10/files/patch-configure50
-rw-r--r--net/asterisk10/files/patch-hangup_hang20
-rw-r--r--net/asterisk10/files/patch-main::Makefile30
-rw-r--r--net/asterisk10/files/sip_force_callid.diff19
-rw-r--r--net/asterisk10/pkg-plist8
9 files changed, 116 insertions, 454 deletions
diff --git a/net/asterisk10/Makefile b/net/asterisk10/Makefile
index f2ea71298a5e..44219281de78 100644
--- a/net/asterisk10/Makefile
+++ b/net/asterisk10/Makefile
@@ -6,8 +6,8 @@
#
PORTNAME= asterisk
-PORTVERSION= 1.4.24.1
-PORTREVISION= 3
+PORTVERSION= 1.4.25
+#PORTREVISION= 2
CATEGORIES= net
MASTER_SITES= http://downloads.asterisk.org/pub/telephony/asterisk/ \
http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/
@@ -171,7 +171,7 @@ EXTRA_PATCHES+= ${PATCHDIR}/ilbc_enable.diff
.endif
.if defined(WITH_CODEC_PATCH)
-PATCHFILES= asterisk-1.4.24-codec-negotiation-20090326.diff.gz
+PATCHFILES= asterisk-1.4.25-codec-negotiation-20090526.diff.gz
PATCH_SITES= http://b2bua.org/chrome/site/
EXTRA_PATCHES+= ${PATCHDIR}/codecnego-patch-Makefile
.else
@@ -180,7 +180,6 @@ EXTRA_PATCHES+= ${PATCHDIR}/nocodecnego-patch-Makefile
.if defined(WITH_MISC_PATCHES)
EXTRA_PATCHES+= ${PATCHDIR}/dtmf_debug.diff
-EXTRA_PATCHES+= ${PATCHDIR}/feature_disconnect.diff
EXTRA_PATCHES+= ${PATCHDIR}/sip_force_callid.diff
EXTRA_PATCHES+= ${PATCHDIR}/sip_set_auth.diff
.if defined(WITH_CODEC_PATCH)
diff --git a/net/asterisk10/distinfo b/net/asterisk10/distinfo
index baedd19e61f9..ada163f93d1e 100644
--- a/net/asterisk10/distinfo
+++ b/net/asterisk10/distinfo
@@ -1,6 +1,6 @@
-MD5 (asterisk-1.4.24.1.tar.gz) = 2b74744350f420b3a94d5323c489426f
-SHA256 (asterisk-1.4.24.1.tar.gz) = 0dfcdde0fcaad49cbb00d4c200265ac189891855eba73e114272caf6d3ee2816
-SIZE (asterisk-1.4.24.1.tar.gz) = 11613305
-MD5 (asterisk-1.4.24-codec-negotiation-20090326.diff.gz) = e1345f680203fa89141f2a6f4c7c6b61
-SHA256 (asterisk-1.4.24-codec-negotiation-20090326.diff.gz) = cc2a62cced95cb0a043e04bfaa1e417b15cd7d4df6dd6bba2089b011599fae1b
-SIZE (asterisk-1.4.24-codec-negotiation-20090326.diff.gz) = 40219
+MD5 (asterisk-1.4.25.tar.gz) = 260a577330d080cb9f1fa0b942d950a5
+SHA256 (asterisk-1.4.25.tar.gz) = e6a3fba82a2072e4e4e11ec316fa126e72515cf53c37f86c4238e0efec33abde
+SIZE (asterisk-1.4.25.tar.gz) = 11638650
+MD5 (asterisk-1.4.25-codec-negotiation-20090526.diff.gz) = a073b87693154424962778dad27805a4
+SHA256 (asterisk-1.4.25-codec-negotiation-20090526.diff.gz) = 7e4c34fb3bc69ae31fbea770777d69f8f522062886d9c1e1bf1fbb2887ff9a8e
+SIZE (asterisk-1.4.25-codec-negotiation-20090526.diff.gz) = 40293
diff --git a/net/asterisk10/files/dtmf_debug.diff b/net/asterisk10/files/dtmf_debug.diff
index 5179d42225fd..968554880ac3 100644
--- a/net/asterisk10/files/dtmf_debug.diff
+++ b/net/asterisk10/files/dtmf_debug.diff
@@ -1,6 +1,45 @@
---- include/asterisk/rtp.h.orig 2008-03-18 13:35:42.000000000 +0200
-+++ include/asterisk/rtp.h 2008-03-18 13:35:58.000000000 +0200
-@@ -251,6 +251,9 @@
+--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300
++++ channels/chan_sip.c 2009-05-26 12:50:22.000000000 +0300
+@@ -3891,6 +3891,7 @@
+ ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
+ else {
+ p->owner = newchan;
++ ast_rtp_set_chan_name(p->rtp, newchan->name);
+ /* Re-invite RTP back to Asterisk. Needed if channel is masqueraded out of a native
+ RTP bridge (i.e., RTP not going through Asterisk): RTP bridge code might not be
+ able to do this if the masquerade happens before the bridge breaks (e.g., AMI
+@@ -4168,6 +4169,7 @@
+ if (i->rtp) {
+ tmp->fds[0] = ast_rtp_fd(i->rtp);
+ tmp->fds[1] = ast_rtcp_fd(i->rtp);
++ ast_rtp_set_chan_id(i->rtp, i->callid);
+ }
+ if (needvideo && i->vrtp) {
+ tmp->fds[2] = ast_rtp_fd(i->vrtp);
+@@ -4195,6 +4197,8 @@
+ if (!ast_strlen_zero(i->language))
+ ast_string_field_set(tmp, language, i->language);
+ i->owner = tmp;
++ ast_rtp_set_chan_name(i->rtp, tmp->name);
++
+ ast_module_ref(ast_module_info->self);
+ ast_copy_string(tmp->context, i->context, sizeof(tmp->context));
+ /*Since it is valid to have extensions in the dialplan that have unescaped characters in them
+@@ -4621,8 +4625,10 @@
+ build_via(p);
+ if (!callid)
+ build_callid_pvt(p);
+- else
++ else {
+ ast_string_field_set(p, callid, callid);
++ ast_rtp_set_chan_id(p->rtp, p->callid);
++ }
+ /* Assign default music on hold class */
+ ast_string_field_set(p, mohinterpret, default_mohinterpret);
+ ast_string_field_set(p, mohsuggest, default_mohsuggest);
+--- include/asterisk/rtp.h.orig 2008-03-04 20:05:28.000000000 +0200
++++ include/asterisk/rtp.h 2009-05-26 12:50:22.000000000 +0300
+@@ -243,6 +243,9 @@
int ast_rtp_codec_getformat(int pt);
@@ -10,9 +49,9 @@
/*! \brief Set rtp timeout */
void ast_rtp_set_rtptimeout(struct ast_rtp *rtp, int timeout);
/*! \brief Set rtp hold timeout */
---- main/rtp.c.orig 2008-04-08 14:53:18.000000000 +0300
-+++ main/rtp.c 2008-04-08 14:54:14.000000000 +0300
-@@ -81,6 +81,7 @@
+--- main/rtp.c.orig 2009-05-13 16:38:01.000000000 +0300
++++ main/rtp.c 2009-05-26 12:52:30.000000000 +0300
+@@ -80,6 +80,7 @@
static int rtpstart; /*!< First port for RTP sessions (set in rtp.conf) */
static int rtpend; /*!< Last port for RTP sessions (set in rtp.conf) */
static int rtpdebug; /*!< Are we debugging? */
@@ -20,7 +59,7 @@
static int rtcpdebug; /*!< Are we debugging RTCP? */
static int rtcpstats; /*!< Are we debugging RTCP? */
static int rtcpinterval = RTCP_DEFAULT_INTERVALMS; /*!< Time between rtcp reports in millisecs */
-@@ -168,6 +169,8 @@
+@@ -173,6 +174,8 @@
struct ast_codec_pref pref;
struct ast_rtp *bridged; /*!< Who we are Packet bridged to */
int set_marker_bit:1; /*!< Whether to set the marker bit or not */
@@ -29,7 +68,7 @@
};
/* Forward declarations */
-@@ -669,8 +672,8 @@
+@@ -673,8 +676,8 @@
struct ast_frame *f = NULL;
event = ntohl(*((unsigned int *)(data)));
event &= 0x001F;
@@ -40,32 +79,33 @@
if (event < 10) {
resp = '0' + event;
} else if (event < 11) {
-@@ -684,12 +687,24 @@
+@@ -688,12 +691,25 @@
}
if (rtp->resp && (rtp->resp != resp)) {
f = send_dtmf(rtp, AST_FRAME_DTMF_END);
-+ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF event: %c\n", rtp->chan_name, rtp->chan_id, rtp->resp);
++ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF event: %c\n", rtp->chan_name, rtp->chan_id, rtp->resp);
}
rtp->resp = resp;
- rtp->dtmfcount = dtmftimeout;
+ rtp->dtmf_timeout = 0;
return f;
}
+void ast_rtp_set_chan_id(struct ast_rtp *rtp, const char *chan_id) {
-+ if (rtp == NULL || chan_id == NULL)
-+ return;
-+ snprintf(rtp->chan_id, sizeof(rtp->chan_id), "%s", chan_id);
++ if (rtp == NULL || chan_id == NULL)
++ return;
++ snprintf(rtp->chan_id, sizeof(rtp->chan_id), "%s", chan_id);
+}
+
+void ast_rtp_set_chan_name(struct ast_rtp *rtp, const char *chan_name) {
-+ if (rtp == NULL || chan_name == NULL)
-+ return;
-+ snprintf(rtp->chan_name, sizeof(rtp->chan_name), "%s", chan_name);
++ if (rtp == NULL || chan_name == NULL)
++ return;
++ snprintf(rtp->chan_name, sizeof(rtp->chan_name), "%s", chan_name);
+}
++
/*!
* \brief Process RTP DTMF and events according to RFC 2833.
*
-@@ -1051,6 +1066,10 @@
+@@ -1090,6 +1106,10 @@
struct rtpPayloadType rtpPT;
int reconstruct = ntohl(rtpheader[0]);
@@ -76,9 +116,9 @@
/* Get fields from packet */
payload = (reconstruct & 0x7f0000) >> 16;
mark = (((reconstruct & 0x800000) >> 23) != 0);
-@@ -1062,10 +1081,6 @@
- if (!bridged->current_RTP_PT[payload].code)
- return -1;
+@@ -1097,10 +1117,6 @@
+ /* Check what the payload value should be */
+ rtpPT = ast_rtp_lookup_pt(rtp, payload);
- /* If the payload is DTMF, and we are listening for DTMF - then feed it into the core */
- if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF) && !rtpPT.isAstFormat && rtpPT.code == AST_RTP_DTMF)
@@ -87,7 +127,7 @@
/* Otherwise adjust bridged payload to match */
bridged_payload = ast_rtp_lookup_code(bridged, rtpPT.isAstFormat, rtpPT.code);
-@@ -1254,11 +1269,12 @@
+@@ -1293,11 +1309,12 @@
/* This is special in-band data that's not one of our codecs */
if (rtpPT.code == AST_RTP_DTMF) {
/* It's special -- rfc2833 process it */
@@ -101,7 +141,7 @@
data = rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen;
event = ntohl(*((unsigned int *)(data)));
event >>= 24;
-@@ -1267,9 +1283,12 @@
+@@ -1306,9 +1323,12 @@
event_end >>= 24;
duration = ntohl(*((unsigned int *)(data)));
duration &= 0xFFFF;
@@ -115,7 +155,7 @@
} else if (rtpPT.code == AST_RTP_CISCO_DTMF) {
/* It's really special -- process it the Cisco way */
if (rtp->lastevent <= seqno || (rtp->lastevent >= 65530 && seqno <= 6)) {
-@@ -2198,8 +2217,9 @@
+@@ -2272,8 +2292,9 @@
ast_log(LOG_ERROR, "RTP Transmission error to %s:%u: %s\n",
ast_inet_ntoa(rtp->them.sin_addr),
ntohs(rtp->them.sin_port), strerror(errno));
@@ -127,7 +167,7 @@
ast_inet_ntoa(rtp->them.sin_addr),
ntohs(rtp->them.sin_port), payload, rtp->seqno, rtp->lastdigitts, res - hdrlen);
/* Increment sequence number */
-@@ -2242,8 +2262,9 @@
+@@ -2316,8 +2337,9 @@
ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n",
ast_inet_ntoa(rtp->them.sin_addr),
ntohs(rtp->them.sin_port), strerror(errno));
@@ -139,7 +179,7 @@
ast_inet_ntoa(rtp->them.sin_addr),
ntohs(rtp->them.sin_port), rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen);
-@@ -3481,6 +3502,16 @@
+@@ -3609,6 +3631,16 @@
return RESULT_SUCCESS;
}
@@ -156,7 +196,7 @@
static int rtp_do_debug(int fd, int argc, char *argv[])
{
if (argc != 2) {
-@@ -3541,6 +3572,7 @@
+@@ -3669,6 +3701,7 @@
if (argc != 3)
return RESULT_SHOWUSAGE;
rtpdebug = 0;
@@ -164,7 +204,7 @@
ast_cli(fd,"RTP Debugging Disabled\n");
return RESULT_SUCCESS;
}
-@@ -3601,7 +3633,7 @@
+@@ -3729,7 +3762,7 @@
}
static char debug_usage[] =
@@ -173,7 +213,7 @@
" Enable dumping of all RTP packets to and from host.\n";
static char no_debug_usage[] =
-@@ -3676,6 +3708,10 @@
+@@ -3804,6 +3837,10 @@
rtp_do_debug, "Enable RTP debugging",
debug_usage },
@@ -184,42 +224,3 @@
{ { "rtp", "debug", "off", NULL },
rtp_no_debug, "Disable RTP debugging",
no_debug_usage, NULL, &cli_rtp_no_debug_deprecated },
---- channels/chan_sip.c.orig 2008-06-10 00:29:41.000000000 -0700
-+++ channels/chan_sip.c 2008-06-10 00:42:00.000000000 -0700
-@@ -3813,6 +3813,7 @@
- ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
- else {
- p->owner = newchan;
-+ ast_rtp_set_chan_name(p->rtp, newchan->name);
- /* Re-invite RTP back to Asterisk. Needed if channel is masqueraded out of a native
- RTP bridge (i.e., RTP not going through Asterisk): RTP bridge code might not be
- able to do this if the masquerade happens before the bridge breaks (e.g., AMI
-@@ -4085,6 +4086,7 @@
- if (i->rtp) {
- tmp->fds[0] = ast_rtp_fd(i->rtp);
- tmp->fds[1] = ast_rtcp_fd(i->rtp);
-+ ast_rtp_set_chan_id(i->rtp, i->callid);
- }
- if (needvideo && i->vrtp) {
- tmp->fds[2] = ast_rtp_fd(i->vrtp);
-@@ -4112,6 +4114,8 @@
- if (!ast_strlen_zero(i->language))
- ast_string_field_set(tmp, language, i->language);
- i->owner = tmp;
-+ ast_rtp_set_chan_name(i->rtp, tmp->name);
-+
- ast_module_ref(ast_module_info->self);
- ast_copy_string(tmp->context, i->context, sizeof(tmp->context));
- /*Since it is valid to have extensions in the dialplan that have unescaped characters in them
-@@ -4531,8 +4535,10 @@
- build_via(p);
- if (!callid)
- build_callid_pvt(p);
-- else
-+ else {
- ast_string_field_set(p, callid, callid);
-+ ast_rtp_set_chan_id(p->rtp, p->callid);
-+ }
- /* Assign default music on hold class */
- ast_string_field_set(p, mohinterpret, default_mohinterpret);
- ast_string_field_set(p, mohsuggest, default_mohsuggest);
diff --git a/net/asterisk10/files/feature_disconnect.diff b/net/asterisk10/files/feature_disconnect.diff
deleted file mode 100644
index bf1531103ad9..000000000000
--- a/net/asterisk10/files/feature_disconnect.diff
+++ /dev/null
@@ -1,287 +0,0 @@
---- apps/app_dial.c.orig 2009-01-30 19:47:41.000000000 +0200
-+++ apps/app_dial.c 2009-03-25 18:13:22.000000000 +0200
-@@ -311,6 +311,8 @@
- OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK) && \
- !chan->audiohooks && !peer->audiohooks)
-
-+static int detect_disconnect(struct ast_channel *chan, char code);
-+
- /* We define a custom "local user" structure because we
- use it not only for keeping track of what is in use but
- also for keeping track of who we're dialing. */
-@@ -743,9 +745,9 @@
- }
-
- if (ast_test_flag(peerflags, OPT_CALLER_HANGUP) &&
-- (f->subclass == '*')) { /* hmm it it not guaranteed to be '*' anymore. */
-+ detect_disconnect(in, f->subclass)) { /* hmm it it not guaranteed to be '*' anymore. */
- if (option_verbose > 2)
-- ast_verbose(VERBOSE_PREFIX_3 "User hit %c to disconnect call.\n", f->subclass);
-+ ast_verbose(VERBOSE_PREFIX_3 "User requested call disconnect.\n");
- *to=0;
- ast_cdr_noanswer(in->cdr);
- strcpy(status, "CANCEL");
-@@ -786,6 +788,56 @@
- return peer;
- }
-
-+static char featurecode[FEATURE_MAX_LEN + 1] = "";
-+
-+static int detect_disconnect(struct ast_channel *chan, char code)
-+{
-+ struct feature_interpret_result result;
-+ int x;
-+ struct ast_flags features;
-+ int res = FEATURE_RETURN_PASSDIGITS;
-+ struct ast_call_feature *feature;
-+ char *cptr;
-+ int len;
-+
-+ len = strlen(featurecode);
-+ if (len >= FEATURE_MAX_LEN) {
-+ featurecode[0] = '\0';
-+ }
-+ cptr = &featurecode[strlen(featurecode)];
-+ cptr[0] = code;
-+ cptr[1] = '\0';
-+
-+ memset(&features, 0, sizeof(struct ast_flags));
-+ ast_set_flag(&features, AST_FEATURE_DISCONNECT);
-+
-+ ast_features_lock();
-+
-+ res = ast_feature_detect(chan, &features, featurecode, &result);
-+
-+ if (res != FEATURE_RETURN_STOREDIGITS)
-+ featurecode[0] = '\0';
-+
-+ if (result.builtin_feature && result.builtin_feature->feature_mask & AST_FEATURE_DISCONNECT) {
-+ ast_features_unlock();
-+ return 1;
-+ }
-+
-+ for (x = 0; x < result.num_dyn_features; ++x) {
-+ feature = result.dynamic_features[x];
-+ if (feature->feature_mask & AST_FEATURE_DISCONNECT) {
-+ ast_features_unlock();
-+ return 1;
-+ }
-+ }
-+
-+ ast_features_unlock();
-+
-+ return 0;
-+}
-+
-+
-+
- static void replace_macro_delimiter(char *s)
- {
- for (; *s; s++)
---- include/asterisk/features.h.orig 2008-11-02 21:51:17.000000000 +0200
-+++ include/asterisk/features.h 2009-03-25 18:14:38.000000000 +0200
-@@ -35,6 +35,19 @@
-
- #define PARK_APP_NAME "Park"
-
-+#define FEATURE_RETURN_HANGUP -1
-+#define FEATURE_RETURN_SUCCESSBREAK 0
-+#define FEATURE_RETURN_PASSDIGITS 21
-+#define FEATURE_RETURN_STOREDIGITS 22
-+#define FEATURE_RETURN_SUCCESS 23
-+#define FEATURE_RETURN_KEEPTRYING 24
-+#define FEATURE_RETURN_PARKFAILED 25
-+
-+#define FEATURE_SENSE_CHAN (1 << 0)
-+#define FEATURE_SENSE_PEER (1 << 1)
-+
-+typedef int (*feature_operation)(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense, void *data);
-+
- /*! \brief main call feature structure */
- struct ast_call_feature {
- int feature_mask;
-@@ -42,7 +55,7 @@
- char sname[FEATURE_SNAME_LEN];
- char exten[FEATURE_MAX_LEN];
- char default_exten[FEATURE_MAX_LEN];
-- int (*operation)(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense, void *data);
-+ feature_operation operation;
- unsigned int flags;
- char app[FEATURE_APP_LEN];
- char app_args[FEATURE_APP_ARGS_LEN];
-@@ -51,6 +64,12 @@
- };
-
-
-+struct feature_interpret_result {
-+ struct ast_call_feature *builtin_feature;
-+ struct ast_call_feature *dynamic_features[20];
-+ int num_dyn_features;
-+};
-+
-
- /*! \brief Park a call and read back parked location
- * \param chan the channel to actually be parked
-@@ -98,4 +117,10 @@
- \param feature the ast_call_feature object which was registered before*/
- void ast_unregister_feature(struct ast_call_feature *feature);
-
-+int ast_feature_detect(struct ast_channel *chan, const struct ast_flags *features, char *code, struct feature_interpret_result *result);
-+
-+void ast_features_lock(void);
-+void ast_features_unlock(void);
-+
-+
- #endif /* _AST_FEATURES_H */
---- res/res_features.c.orig 2009-03-25 18:13:42.000000000 +0200
-+++ res/res_features.c 2009-03-25 19:22:17.000000000 +0200
-@@ -72,14 +72,6 @@
- #define AST_MAX_WATCHERS 256
- #define MAX_DIAL_FEATURE_OPTIONS 30
-
--#define FEATURE_RETURN_HANGUP -1
--#define FEATURE_RETURN_SUCCESSBREAK 0
--#define FEATURE_RETURN_PASSDIGITS 21
--#define FEATURE_RETURN_STOREDIGITS 22
--#define FEATURE_RETURN_SUCCESS 23
--#define FEATURE_RETURN_KEEPTRYING 24
--#define FEATURE_RETURN_PARKFAILED 25
--
- enum {
- AST_FEATURE_FLAG_NEEDSDTMF = (1 << 0),
- AST_FEATURE_FLAG_ONPEER = (1 << 1),
-@@ -614,9 +606,6 @@
- return masq_park_call(rchan, peer, timeout, extout, 1, orig_chan_name);
- }
-
--#define FEATURE_SENSE_CHAN (1 << 0)
--#define FEATURE_SENSE_PEER (1 << 1)
--
- /*! \brief
- * set caller and callee according to the direction
- */
-@@ -1223,36 +1212,39 @@
- return res;
- }
-
--static int ast_feature_interpret(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense)
-+void ast_features_lock(void)
-+{
-+ ast_rwlock_wrlock(&features_lock);
-+ AST_RWLIST_WRLOCK(&feature_list);
-+}
-+
-+void ast_features_unlock(void)
-+{
-+ AST_RWLIST_UNLOCK(&feature_list);
-+ ast_rwlock_unlock(&features_lock);
-+}
-+
-+int ast_feature_detect(struct ast_channel *chan, const struct ast_flags *features, char *code, struct feature_interpret_result *result)
- {
- int x;
-- struct ast_flags features;
- struct ast_call_feature *feature;
-- const char *dynamic_features;
-+ const char *dynamic_features = pbx_builtin_getvar_helper(chan, "DYNAMIC_FEATURES");
- char *tmp, *tok;
- int res = FEATURE_RETURN_PASSDIGITS;
- int feature_detected = 0;
-
-- if (sense == FEATURE_SENSE_CHAN) {
-- ast_copy_flags(&features, &(config->features_caller), AST_FLAGS_ALL);
-- dynamic_features = pbx_builtin_getvar_helper(chan, "DYNAMIC_FEATURES");
-- } else {
-- ast_copy_flags(&features, &(config->features_callee), AST_FLAGS_ALL);
-- dynamic_features = pbx_builtin_getvar_helper(peer, "DYNAMIC_FEATURES");
-- }
-- if (option_debug > 2)
-- ast_log(LOG_DEBUG, "Feature interpret: chan=%s, peer=%s, code=%s, sense=%d, features=%d dynamic=%s\n", chan->name, peer->name, code, sense, features.flags, dynamic_features);
-+ result->builtin_feature = NULL;
-+ result->num_dyn_features = 0;
-
-- ast_rwlock_rdlock(&features_lock);
- for (x = 0; x < FEATURES_COUNT; x++) {
-- if ((ast_test_flag(&features, builtin_features[x].feature_mask)) &&
-+ if ((ast_test_flag(features, builtin_features[x].feature_mask)) &&
- !ast_strlen_zero(builtin_features[x].exten)) {
- /* Feature is up for consideration */
- if (!strcmp(builtin_features[x].exten, code)) {
- if (option_debug > 2) {
- ast_log(LOG_DEBUG, "Feature detected: fname=%s sname=%s exten=%s\n", builtin_features[x].fname, builtin_features[x].sname, builtin_features[x].exten);
- }
-- res = builtin_features[x].operation(chan, peer, config, code, sense, NULL);
-+ result->builtin_feature = &builtin_features[x];
- feature_detected = 1;
- break;
- } else if (!strncmp(builtin_features[x].exten, code, strlen(code))) {
-@@ -1261,7 +1253,6 @@
- }
- }
- }
-- ast_rwlock_unlock(&features_lock);
-
- if (ast_strlen_zero(dynamic_features) || feature_detected)
- return res;
-@@ -1269,9 +1260,7 @@
- tmp = ast_strdupa(dynamic_features);
-
- while ((tok = strsep(&tmp, "#"))) {
-- AST_RWLIST_RDLOCK(&feature_list);
- if (!(feature = find_dynamic_feature(tok))) {
-- AST_RWLIST_UNLOCK(&feature_list);
- continue;
- }
-
-@@ -1279,9 +1268,8 @@
- if (!strcmp(feature->exten, code)) {
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 " Feature Found: %s exten: %s\n",feature->sname, tok);
-- res = feature->operation(chan, peer, config, code, sense, feature);
-- if (res != FEATURE_RETURN_KEEPTRYING) {
-- AST_RWLIST_UNLOCK(&feature_list);
-+ result->dynamic_features[result->num_dyn_features++] = feature;
-+ if (result->num_dyn_features >= (sizeof(result->dynamic_features) / sizeof(result->dynamic_features[0]))) {
- break;
- }
- res = FEATURE_RETURN_PASSDIGITS;
-@@ -1294,6 +1282,39 @@
- return res;
- }
-
-+static int ast_feature_interpret(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense)
-+{
-+ struct feature_interpret_result result;
-+ int x;
-+ struct ast_flags features;
-+ int res = FEATURE_RETURN_PASSDIGITS;
-+ struct ast_call_feature *feature;
-+
-+ if (sense == FEATURE_SENSE_CHAN)
-+ ast_copy_flags(&features, &(config->features_caller), AST_FLAGS_ALL);
-+ else
-+ ast_copy_flags(&features, &(config->features_callee), AST_FLAGS_ALL);
-+ if (option_debug > 2)
-+ ast_log(LOG_DEBUG, "Feature interpret: chan=%s, peer=%s, sense=%d, features=%d\n", chan->name, peer->name, sense, features.flags);
-+
-+ ast_features_lock();
-+ res = ast_feature_detect(chan, &features, code, &result);
-+
-+ if (result.builtin_feature)
-+ res = result.builtin_feature->operation(chan, peer, config, code, sense, NULL);
-+
-+ for (x = 0; x < result.num_dyn_features; ++x) {
-+ feature = result.dynamic_features[x];
-+ res = feature->operation(chan, peer, config, code, sense, feature);
-+ if (res != FEATURE_RETURN_KEEPTRYING)
-+ break;
-+ res = FEATURE_RETURN_PASSDIGITS;
-+ }
-+
-+ ast_features_unlock();
-+ return res;
-+}
-+
- static void set_config_flags(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config)
- {
- int x;
diff --git a/net/asterisk10/files/patch-configure b/net/asterisk10/files/patch-configure
index 24d3e6c08684..0782453c279b 100644
--- a/net/asterisk10/files/patch-configure
+++ b/net/asterisk10/files/patch-configure
@@ -1,47 +1,15 @@
---- configure.orig 2008-12-15 19:43:59.000000000 +0200
-+++ configure 2009-01-26 22:19:11.000000000 +0200
-@@ -3957,8 +3957,6 @@
+--- configure.orig 2009-04-27 22:29:46.000000000 +0300
++++ configure 2009-05-26 12:59:22.000000000 +0300
+@@ -4064,8 +4064,6 @@
case "${host_os}" in
freebsd*)
ac_default_prefix=/usr/local
- CPPFLAGS=-I/usr/local/include
- LDFLAGS=-L/usr/local/lib
;;
- *)
- ac_default_prefix=/usr
-@@ -26022,6 +26020,7 @@
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
- $ac_includes_default
-+#include <ptlib.h>
- #include <${HOME}/openh323/include/h323.h>
- _ACEOF
- rm -f conftest.$ac_objext
-@@ -26062,6 +26061,7 @@
- cat confdefs.h >>conftest.$ac_ext
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
-+#include <ptlib.h>
- #include <${HOME}/openh323/include/h323.h>
- _ACEOF
- if { (ac_try="$ac_cpp conftest.$ac_ext"
-@@ -26164,6 +26164,7 @@
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
- $ac_includes_default
-+#include <ptlib.h>
- #include </usr/local/include/openh323/h323.h>
- _ACEOF
- rm -f conftest.$ac_objext
-@@ -26204,6 +26205,7 @@
- cat confdefs.h >>conftest.$ac_ext
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
-+#include <ptlib.h>
- #include </usr/local/include/openh323/h323.h>
- _ACEOF
- if { (ac_try="$ac_cpp conftest.$ac_ext"
-@@ -26456,7 +26458,7 @@
+ darwin*)
+
+@@ -27145,7 +27143,7 @@
fi
@@ -49,8 +17,8 @@
+ PLATFORM_OPENH323="h323_${OPENH323_SUFFIX}"
if test "${HAS_OPENH323:-unset}" != "unset"; then
- { echo "$as_me:$LINENO: checking OpenH323 installation validity" >&5
-@@ -30834,6 +30836,7 @@
+ { $as_echo "$as_me:$LINENO: checking OpenH323 installation validity" >&5
+@@ -31624,6 +31622,7 @@
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
@@ -58,7 +26,7 @@
#include <h323.h>
_ACEOF
rm -f conftest.$ac_objext
-@@ -30874,6 +30877,7 @@
+@@ -31665,6 +31664,7 @@
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
diff --git a/net/asterisk10/files/patch-hangup_hang b/net/asterisk10/files/patch-hangup_hang
deleted file mode 100644
index 22e09d6a1be7..000000000000
--- a/net/asterisk10/files/patch-hangup_hang
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: main/channel.c
-===================================================================
---- main/channel.c (revision 188244)
-+++ main/channel.c (working copy)
-@@ -2038,13 +2038,13 @@
- return &ast_null_frame;
- usleep(1);
- }
--
-+/*
- if (chan->fdno == -1) {
- ast_log(LOG_ERROR, "ast_read() called with no recorded file descriptor.\n");
- f = &ast_null_frame;
- goto done;
- }
--
-+*/
- if (chan->masq) {
- if (ast_do_masquerade(chan))
- ast_log(LOG_WARNING, "Failed to perform masquerade\n");
diff --git a/net/asterisk10/files/patch-main::Makefile b/net/asterisk10/files/patch-main::Makefile
index 47f93c3df6e1..418714ab7f21 100644
--- a/net/asterisk10/files/patch-main::Makefile
+++ b/net/asterisk10/files/patch-main::Makefile
@@ -1,9 +1,6 @@
-
-$FreeBSD$
-
---- main/Makefile.orig
-+++ main/Makefile
-@@ -102,8 +102,8 @@
+--- main/Makefile.orig 2009-04-09 07:31:38.000000000 +0300
++++ main/Makefile 2009-05-26 13:07:50.000000000 +0300
+@@ -92,8 +92,8 @@
cd editline && test -f config.h || CFLAGS="$(PTHREAD_CFLAGS) $(subst $(ASTTOPDIR),../../,$(ASTCFLAGS:-Werror=))" LDFLAGS="$(ASTLDFLAGS)" ./configure --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-ncurses=$(NCURSES_DIR) --with-curses=$(CURSES_DIR) --with-termcap=$(TERMCAP_DIR) --with-tinfo=$(TINFO_DIR)
$(MAKE) -C editline libedit.a
@@ -14,21 +11,26 @@ $FreeBSD$
ast_expr2.c ast_expr2.h:
bison -o $@ -d --name-prefix=ast_yy ast_expr2.y
-@@ -138,7 +138,7 @@
+@@ -127,18 +127,18 @@
H323LDLIBS=
endif
--asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
-+asterisk: $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS)
+-asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) asterisk.exports
++asterisk: $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) asterisk.exports
@$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp
@if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \
mv $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; \
-@@ -149,7 +149,7 @@
+ fi
+ @rm -f $(ASTTOPDIR)/include/asterisk/build.h.tmp
+ @$(CC) -c -o buildinfo.o $(ASTCFLAGS) buildinfo.c
+- $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@"
++ $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) -> $@"
ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),)
- $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS)
+- $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS)
++ $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS)
else
-- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS)
-+ $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS)
+- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS)
++ $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS)
endif
- $(CMD_PREFIX) $(ASTTOPDIR)/build_tools/strip_nonapi $@ || rm $@
+ clean::
diff --git a/net/asterisk10/files/sip_force_callid.diff b/net/asterisk10/files/sip_force_callid.diff
index 67a3e0192633..09cf274581d1 100644
--- a/net/asterisk10/files/sip_force_callid.diff
+++ b/net/asterisk10/files/sip_force_callid.diff
@@ -1,12 +1,11 @@
---- channels/chan_sip.c.orig 2008-04-09 11:39:09.000000000 +0300
-+++ channels/chan_sip.c 2008-04-09 11:40:28.000000000 +0300
-@@ -2998,6 +2998,9 @@
- p->t38.state = T38_LOCAL_DIRECT;
- if (option_debug)
- ast_log(LOG_DEBUG,"T38State change to %d on channel %s\n", p->t38.state, ast->name);
-+ } else if (!strcasecmp(ast_var_name(current), "SIP_FORCE_CALLID")) {
-+
-+ ast_string_field_set(p, callid, ast_var_value(current));
+--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300
++++ channels/chan_sip.c 2009-05-26 12:58:10.000000000 +0300
+@@ -3061,6 +3061,8 @@
+ } else if (!strcasecmp(ast_var_name(current), "SIPTRANSFER_REPLACES")) {
+ /* We're replacing a call. */
+ p->options->replaces = ast_var_value(current);
++ } else if (!strcasecmp(ast_var_name(current), "SIP_FORCE_CALLID")) {
++ ast_string_field_set(p, callid, ast_var_value(current));
}
-
}
+
diff --git a/net/asterisk10/pkg-plist b/net/asterisk10/pkg-plist
index 14985da0a770..ffc02fe4c542 100644
--- a/net/asterisk10/pkg-plist
+++ b/net/asterisk10/pkg-plist
@@ -445,10 +445,10 @@ share/asterisk/moh/LICENSE-asterisk-moh-freeplay-wav
share/asterisk/moh/fpm-calm-river.wav
share/asterisk/moh/fpm-sunshine.wav
share/asterisk/moh/fpm-world-mix.wav
-share/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.14
-share/asterisk/sounds/CHANGES-asterisk-core-en-1.4.14
-share/asterisk/sounds/CREDITS-asterisk-core-en-1.4.14
-share/asterisk/sounds/LICENSE-asterisk-core-en-1.4.14
+share/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.15
+share/asterisk/sounds/CHANGES-asterisk-core-en-1.4.15
+share/asterisk/sounds/CREDITS-asterisk-core-en-1.4.15
+share/asterisk/sounds/LICENSE-asterisk-core-en-1.4.15
share/asterisk/sounds/agent-alreadyon.gsm
share/asterisk/sounds/agent-incorrect.gsm
share/asterisk/sounds/agent-loggedoff.gsm