[asterisk-commits] mmichelson: branch mmichelson/queue_refcount r81409 - in /team/mmichelson/que...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Aug 31 11:19:27 CDT 2007
Author: mmichelson
Date: Fri Aug 31 11:19:26 2007
New Revision: 81409
URL: http://svn.digium.com/view/asterisk?view=rev&rev=81409
Log:
Queue refcounting appears to be working correctly for realtime now...for real.
Tested with multiple calls, single calls, adding and deleting queues from database...it's working as
expected.
Removed:
team/mmichelson/queue_refcount/configs/modem.conf.sample
Modified:
team/mmichelson/queue_refcount/ (props changed)
team/mmichelson/queue_refcount/apps/app_queue.c
team/mmichelson/queue_refcount/channels/chan_misdn.c
team/mmichelson/queue_refcount/channels/h323/ast_h323.cxx
team/mmichelson/queue_refcount/channels/misdn/isdn_lib.c
team/mmichelson/queue_refcount/configs/enum.conf.sample
team/mmichelson/queue_refcount/configs/extensions.ael.sample
team/mmichelson/queue_refcount/main/pbx.c
team/mmichelson/queue_refcount/res/res_features.c
Propchange: team/mmichelson/queue_refcount/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Aug 31 11:19:26 2007
@@ -1,1 +1,1 @@
-/branches/1.4:1-81358
+/branches/1.4:1-81386
Modified: team/mmichelson/queue_refcount/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/apps/app_queue.c?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/apps/app_queue.c (original)
+++ team/mmichelson/queue_refcount/apps/app_queue.c Fri Aug 31 11:19:26 2007
@@ -612,7 +612,7 @@
"LastCall: %d\r\n"
"Status: %d\r\n"
"Paused: %d\r\n",
- q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : "static",
+ q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : cur->realtime ? "realtime" : "static",
cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
}
}
@@ -1055,7 +1055,7 @@
/* Static queues override realtime. */
if (q) {
ast_mutex_lock(&q->lock);
- if (!q->realtime) {
+ if (!q->realtime) { /*XXX Is it even possible for this to be executed???*/
if (q->dead) {
ast_mutex_unlock(&q->lock);
queue_unref(q);
@@ -1065,6 +1065,7 @@
return q;
}
}
+ queue_unref(q);
} else if (!member_config)
/* Not found in the list, and it's not realtime ... */
return NULL;
@@ -1084,7 +1085,6 @@
/*In this case, we must unref the queue twice since it was reffed once in load_realtime_queue
* and again locally. Otherwise, there's a memory leak
*/
- queue_unref(q);
queue_unref(q);
}
return NULL;
@@ -1590,7 +1590,7 @@
"LastCall: %d\r\n"
"Status: %d\r\n"
"Paused: %d\r\n",
- q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : "static",
+ q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : cur->realtime ? "realtime": "static",
cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
}
}
Modified: team/mmichelson/queue_refcount/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/channels/chan_misdn.c?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/channels/chan_misdn.c (original)
+++ team/mmichelson/queue_refcount/channels/chan_misdn.c Fri Aug 31 11:19:26 2007
@@ -2658,8 +2658,10 @@
static struct ast_frame *misdn_read(struct ast_channel *ast)
{
struct chan_list *tmp;
- int len;
-
+ fd_set rrfs;
+ struct timeval tv;
+ int len, t;
+
if (!ast) {
chan_misdn_log(1,0,"misdn_read called without ast\n");
return NULL;
@@ -2674,11 +2676,34 @@
return NULL;
}
- len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
-
- if (len<=0) {
- /* we hangup here, since our pipe is closed */
- chan_misdn_log(2,tmp->bc->port,"misdn_read: Pipe closed, hanging up\n");
+ tv.tv_sec=0;
+ tv.tv_usec=20000;
+
+ FD_ZERO(&rrfs);
+ FD_SET(tmp->pipe[0],&rrfs);
+
+ t=select(FD_SETSIZE,&rrfs,NULL, NULL,&tv);
+
+ if (!t) {
+ chan_misdn_log(3, tmp->bc->port, "read Select Timed out\n");
+ len=160;
+ }
+
+ if (t<0) {
+ chan_misdn_log(-1, tmp->bc->port, "Select Error (err=%s)\n",strerror(errno));
+ return NULL;
+ }
+
+ if (FD_ISSET(tmp->pipe[0],&rrfs)) {
+ len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
+
+ if (len<=0) {
+ /* we hangup here, since our pipe is closed */
+ chan_misdn_log(2,tmp->bc->port,"misdn_read: Pipe closed, hanging up\n");
+ return NULL;
+ }
+
+ } else {
return NULL;
}
@@ -4468,8 +4493,15 @@
}
}
}
-
- /* notice that we don't break here!*/
+ ch->l3id=bc->l3_id;
+ ch->addr=bc->addr;
+
+ start_bc_tones(ch);
+
+ ch->state = MISDN_CONNECTED;
+
+ ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
+ break;
case EVENT_CONNECT_ACKNOWLEDGE:
{
ch->l3id=bc->l3_id;
@@ -4478,10 +4510,6 @@
start_bc_tones(ch);
ch->state = MISDN_CONNECTED;
-
- if (!ch->ast) break;
-
- ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
}
break;
case EVENT_DISCONNECT:
@@ -4541,9 +4569,6 @@
hangup_chan(ch);
release_chan(bc);
-
- if (bc->need_release_complete)
- misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
}
break;
case EVENT_RELEASE_COMPLETE:
Modified: team/mmichelson/queue_refcount/channels/h323/ast_h323.cxx
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/channels/h323/ast_h323.cxx?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/channels/h323/ast_h323.cxx (original)
+++ team/mmichelson/queue_refcount/channels/h323/ast_h323.cxx Fri Aug 31 11:19:26 2007
@@ -287,7 +287,9 @@
cout << "\t-- " << GetLocalUserName() << " is calling host " << fullAddress << endl;
cout << "\t-- Call token is " << (const char *)token << endl;
cout << "\t-- Call reference is " << *callReference << endl;
+#ifdef PTRACING
cout << "\t-- DTMF Payload is " << connection->dtmfCodec << endl;
+#endif
}
connection->Unlock();
return 0;
@@ -1649,10 +1651,12 @@
H245_AudioTelephonyEventCapability & atec = cap;
atec.m_dynamicRTPPayloadType = dtmfCodec;
// on_set_rfc2833_payload(GetCallReference(), (const char *)GetCallToken(), (int)dtmfCodec);
+#ifdef PTRACING
if (h323debug) {
cout << "\t-- Transmitting RFC2833 on payload " <<
atec.m_dynamicRTPPayloadType << endl;
}
+#endif
}
}
}
@@ -1712,9 +1716,11 @@
on_set_rfc2833_payload(GetCallReference(), (const char *)GetCallToken(), (int)pt);
if ((dtmfMode == H323_DTMF_RFC2833) && (sendUserInputMode == SendUserInputAsTone))
sendUserInputMode = SendUserInputAsInlineRFC2833;
+#ifdef PTRACING
if (h323debug) {
cout << "\t-- Inbound RFC2833 on payload " << pt << endl;
}
+#endif
}
memset(&prefs, 0, sizeof(prefs));
int peer_capabilities = 0;
Modified: team/mmichelson/queue_refcount/channels/misdn/isdn_lib.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/channels/misdn/isdn_lib.c?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/channels/misdn/isdn_lib.c (original)
+++ team/mmichelson/queue_refcount/channels/misdn/isdn_lib.c Fri Aug 31 11:19:26 2007
@@ -1566,9 +1566,6 @@
case EVENT_PROGRESS:
case EVENT_PROCEEDING:
case EVENT_SETUP_ACKNOWLEDGE:
-
- setup_bc(bc);
-
case EVENT_SETUP:
{
if (bc->channel == 0xff || bc->channel<=0)
@@ -1580,6 +1577,8 @@
return -1;
}
}
+
+ setup_bc(bc);
break;
case EVENT_RELEASE_COMPLETE:
Modified: team/mmichelson/queue_refcount/configs/enum.conf.sample
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/configs/enum.conf.sample?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/configs/enum.conf.sample (original)
+++ team/mmichelson/queue_refcount/configs/enum.conf.sample Fri Aug 31 11:19:26 2007
@@ -2,7 +2,7 @@
; ENUM Configuration for resolving phone numbers over DNS
;
; Sample config for Asterisk
-; This file is reloaded at "reload enum" in the CLI
+; This file is reloaded at "module reload enum" in the CLI
;
[general]
;
Modified: team/mmichelson/queue_refcount/configs/extensions.ael.sample
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/configs/extensions.ael.sample?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/configs/extensions.ael.sample (original)
+++ team/mmichelson/queue_refcount/configs/extensions.ael.sample Fri Aug 31 11:19:26 2007
@@ -3,11 +3,11 @@
//
//
// Static extension configuration file, used by
-// the pbx_config module. This is where you configure all your
+// the pbx_ael module. This is where you configure all your
// inbound and outbound calls in Asterisk.
//
// This configuration file is reloaded
-// - With the "extensions reload" command in the CLI
+// - With the "ael reload" command in the CLI
// - With the "reload" command (that reloads everything) in the CLI
// The "Globals" category contains global variables that can be referenced
Modified: team/mmichelson/queue_refcount/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/main/pbx.c?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/main/pbx.c (original)
+++ team/mmichelson/queue_refcount/main/pbx.c Fri Aug 31 11:19:26 2007
@@ -5034,10 +5034,13 @@
if (ast_exists_extension(chan, context, "failed", 1, NULL)) {
chan = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, "", "", "", 0, "OutgoingSpoolFailed");
if (chan) {
+ char failed_reason[4] = "";
if (!ast_strlen_zero(context))
ast_copy_string(chan->context, context, sizeof(chan->context));
set_ext_pri(chan, "failed", 1);
ast_set_variables(chan, vars);
+ snprintf(failed_reason, sizeof(failed_reason), "%d", *reason);
+ pbx_builtin_setvar_helper(chan, "REASON", failed_reason);
if (account)
ast_cdr_setaccount(chan, account);
ast_pbx_run(chan);
Modified: team/mmichelson/queue_refcount/res/res_features.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue_refcount/res/res_features.c?view=diff&rev=81409&r1=81408&r2=81409
==============================================================================
--- team/mmichelson/queue_refcount/res/res_features.c (original)
+++ team/mmichelson/queue_refcount/res/res_features.c Fri Aug 31 11:19:26 2007
@@ -1229,6 +1229,13 @@
ast_frfree(f);
f = NULL;
ready=1;
+ break;
+ } else if (f->subclass == -1) {
+ if (option_verbose > 2)
+ ast_verbose( VERBOSE_PREFIX_3 "%s stopped sounds\n", chan->name);
+ ast_indicate(caller, -1);
+ ast_frfree(f);
+ f = NULL;
break;
} else {
ast_log(LOG_NOTICE, "Don't know what to do about control frame: %d\n", f->subclass);
More information about the asterisk-commits
mailing list