[asterisk-commits] twilson: branch group/manager_http_auth r164411 - in /team/group/manager_http...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Dec 15 12:51:58 CST 2008


Author: twilson
Date: Mon Dec 15 12:51:57 2008
New Revision: 164411

URL: http://svn.digium.com/view/asterisk?view=rev&rev=164411
Log:
Fix ast_str breakage and svnmerge/automerge, etc.
Merged revisions 163991,164028,164054,164083,164137,164168,164202-164203,164205,164208,164257,164268,164270,164272,164309,164312,164344,164349 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
  r163991 | tilghman | 2008-12-13 02:36:35 -0600 (Sat, 13 Dec 2008) | 1 line
  
  Merge ast_str_opaque branch (discontinue usage of ast_str internals)
................
  r164028 | mvanbaak | 2008-12-13 07:26:13 -0600 (Sat, 13 Dec 2008) | 2 lines
  
  nuke another use of the ast_str internals.
................
  r164054 | seanbright | 2008-12-13 12:25:58 -0600 (Sat, 13 Dec 2008) | 1 line
  
  Use ast_str_strlen() instead of recalculating the string length.
................
  r164083 | tilghman | 2008-12-13 17:24:09 -0600 (Sat, 13 Dec 2008) | 15 lines
  
  Blocked revisions 164082 via svnmerge
  
  ........
    r164082 | tilghman | 2008-12-13 17:22:02 -0600 (Sat, 13 Dec 2008) | 9 lines
    
    Change the default calldurationlimit from the special value 0 to -1, so we
    can better detect an exceptional case.  This follows on to the changes made
    in revision 156386.  Related to issue #13851.
    (closes issue #13974)
     Reported by: paradise
     Patches: 
           20081208__bug13974.diff.txt uploaded by Corydon76 (license 14)
     Tested by: file, blitzrage, ZX81
  ........
................
  r164137 | seanbright | 2008-12-14 09:26:37 -0600 (Sun, 14 Dec 2008) | 1 line
  
  Use a \picture instead of ASCII art.
................
  r164168 | tilghman | 2008-12-14 12:16:28 -0600 (Sun, 14 Dec 2008) | 2 lines
  
  Don't pass a negative to an unsigned type and expect things to work correctly.
................
  r164202 | russell | 2008-12-15 08:40:08 -0600 (Mon, 15 Dec 2008) | 2 lines
  
  Fix build WRT ast_str_opaque
................
  r164203 | russell | 2008-12-15 08:40:24 -0600 (Mon, 15 Dec 2008) | 39 lines
  
  Merged revisions 164201 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
  r164201 | russell | 2008-12-15 08:31:37 -0600 (Mon, 15 Dec 2008) | 31 lines
  
  Handle a case where a call can be bridged to a channel that is still ringing.
  
  The issue that was reported was about a case where a RINGING channel got 
  redirected to an extension to pick up a call from parking.  Once the parked 
  call got taken out of parking, it heard silence until the other side answered.  
  Ideally, the caller that was parked would get a ringing indication.  This patch
  fixes this case so that the caller receives ringback once it comes out of 
  parking until the other side answers.
  
  The fixes are:
  
   - Make sure we remember that a channel was an outgoing channel when doing 
     a masquerade.  This prevents an erroneous ast_answer() call on the channel,
     which causes a bogus 200 OK to be sent in the case of SIP.
  
   - Add some additional comments to explain related parts of code.
  
   - Update the handling of the ast_channel visible_indication field.  Storing 
     values that are not stateful is pointless.  Control frames that are events 
     or commands should be ignored.
  
   - When a bridge first starts, check to see if the peer channel needs to be 
     given ringing indication because the calling side is still ringing.
  
   - Rework ast_indicate_data() a bit for the sake of readability.
  
  (closes issue #13747)
  Reported by: davidw
  Tested by: russell
  Review: http://reviewboard.digium.com/r/90/
  
  ........
................
  r164205 | file | 2008-12-15 09:06:38 -0600 (Mon, 15 Dec 2008) | 10 lines
  
  Blocked revisions 164204 via svnmerge
  
  ........
    r164204 | file | 2008-12-15 11:05:08 -0400 (Mon, 15 Dec 2008) | 4 lines
    
    Can we try not to assign an unsigned int to -1?
    (closes issue #14074)
    Reported by: wetwired
  ........
................
  r164208 | file | 2008-12-15 09:21:23 -0600 (Mon, 15 Dec 2008) | 2 lines
  
  Update to work with new ast_str changes.
................
  r164257 | file | 2008-12-15 09:41:22 -0600 (Mon, 15 Dec 2008) | 4 lines
  
  Make app_fax compatible with newer versions of spandsp. This remains backwards compatible with earlier versions though so do not fret.
  (closes issue #14073)
  Reported by: seandarcy
................
  r164268 | mmichelson | 2008-12-15 10:10:43 -0600 (Mon, 15 Dec 2008) | 17 lines
  
  Fix up a few issues with regards to queues
  
  * Fix reference counting used in the __queues_show function
  * Add code to be sure that the "queue show" command does not
    print information for a realtime queue which has been deleted
    from the backend
  * Add a missing unref to the realtime queue loading function for
    the case where a queue is in the module's container but has been
    deleted from the realtime backend
  
  (closes issue #14033)
  Reported by: cristiandimache
  Patches:
        14033.patch uploaded by putnopvut (license 60)
  Tested by: cristiandimache
................
  r164270 | mmichelson | 2008-12-15 10:16:47 -0600 (Mon, 15 Dec 2008) | 4 lines
  
  Fix a compile warning and a logic error that could have been bad
  for non-realtime queues
................
  r164272 | russell | 2008-12-15 10:17:55 -0600 (Mon, 15 Dec 2008) | 8 lines
  
  When a reload is issued, always process the configuration for dundi.conf.
  
  The reason is that a reload can be used to refresh DNS lookups for defined peers.
  Even if the config file hasn't changed, we want to process it for that purpose.
  
  (closes issue #13776)
  Reported by: kombjuder
................
  r164309 | russell | 2008-12-15 11:21:38 -0600 (Mon, 15 Dec 2008) | 2 lines
  
  Fix a couple more build issues related to ast_str_opaque
................
  r164312 | file | 2008-12-15 11:24:28 -0600 (Mon, 15 Dec 2008) | 4 lines
  
  Use ast_seekstream to return the file stream back to the beginning instead of directly seeking to zero. This is because some audio formats have headers at the front that need to be skipped, which will be done by the format module.
  (closes issue #14079)
  Reported by: elguero
................
  r164344 | file | 2008-12-15 11:46:32 -0600 (Mon, 15 Dec 2008) | 10 lines
  
  Blocked revisions 164343 via svnmerge
  
  ........
    r164343 | file | 2008-12-15 13:43:59 -0400 (Mon, 15 Dec 2008) | 4 lines
    
    Use autoconf logic to determine whether the system has timersub or not. Do not blindly assume Solaris does not.
    (closes issue #13838)
    Reported by: ano
  ........
................
  r164349 | tilghman | 2008-12-15 12:09:58 -0600 (Mon, 15 Dec 2008) | 4 lines
  
  When querying for the structure of the CDR table, remove the schema, if it
  exists.
  (Closes issue #14058)
................

Added:
    team/group/manager_http_auth/main/strings.c
      - copied unchanged from r164349, trunk/main/strings.c
Modified:
    team/group/manager_http_auth/   (props changed)
    team/group/manager_http_auth/apps/app_chanisavail.c
    team/group/manager_http_auth/apps/app_dumpchan.c
    team/group/manager_http_auth/apps/app_externalivr.c
    team/group/manager_http_auth/apps/app_fax.c
    team/group/manager_http_auth/apps/app_followme.c
    team/group/manager_http_auth/apps/app_jack.c
    team/group/manager_http_auth/apps/app_meetme.c
    team/group/manager_http_auth/apps/app_queue.c
    team/group/manager_http_auth/apps/app_voicemail.c
    team/group/manager_http_auth/cdr/cdr_adaptive_odbc.c
    team/group/manager_http_auth/cdr/cdr_manager.c
    team/group/manager_http_auth/cdr/cdr_pgsql.c
    team/group/manager_http_auth/cdr/cdr_sqlite3_custom.c
    team/group/manager_http_auth/channels/chan_dahdi.c
    team/group/manager_http_auth/channels/chan_sip.c
    team/group/manager_http_auth/channels/h323/ast_h323.cxx
    team/group/manager_http_auth/channels/iax2-parser.c
    team/group/manager_http_auth/configure
    team/group/manager_http_auth/configure.ac
    team/group/manager_http_auth/doc/tex/cdrdriver.tex
    team/group/manager_http_auth/funcs/func_curl.c
    team/group/manager_http_auth/funcs/func_odbc.c
    team/group/manager_http_auth/funcs/func_realtime.c
    team/group/manager_http_auth/funcs/func_strings.c
    team/group/manager_http_auth/include/asterisk/app.h
    team/group/manager_http_auth/include/asterisk/autoconfig.h.in
    team/group/manager_http_auth/include/asterisk/cdr.h
    team/group/manager_http_auth/include/asterisk/pbx.h
    team/group/manager_http_auth/include/asterisk/strings.h
    team/group/manager_http_auth/include/asterisk/tcptls.h
    team/group/manager_http_auth/include/asterisk/threadstorage.h
    team/group/manager_http_auth/main/Makefile
    team/group/manager_http_auth/main/app.c
    team/group/manager_http_auth/main/asterisk.c
    team/group/manager_http_auth/main/cdr.c
    team/group/manager_http_auth/main/channel.c
    team/group/manager_http_auth/main/cli.c
    team/group/manager_http_auth/main/config.c
    team/group/manager_http_auth/main/features.c
    team/group/manager_http_auth/main/file.c
    team/group/manager_http_auth/main/http.c
    team/group/manager_http_auth/main/logger.c
    team/group/manager_http_auth/main/manager.c
    team/group/manager_http_auth/main/pbx.c
    team/group/manager_http_auth/main/tcptls.c
    team/group/manager_http_auth/main/translate.c
    team/group/manager_http_auth/main/utils.c
    team/group/manager_http_auth/main/xmldoc.c
    team/group/manager_http_auth/pbx/pbx_dundi.c
    team/group/manager_http_auth/res/res_agi.c
    team/group/manager_http_auth/res/res_clialiases.c
    team/group/manager_http_auth/res/res_config_curl.c
    team/group/manager_http_auth/res/res_config_ldap.c
    team/group/manager_http_auth/res/res_config_odbc.c
    team/group/manager_http_auth/res/res_config_pgsql.c
    team/group/manager_http_auth/res/res_config_sqlite.c
    team/group/manager_http_auth/res/res_http_post.c
    team/group/manager_http_auth/res/snmp/agent.c
    team/group/manager_http_auth/utils/Makefile
    team/group/manager_http_auth/utils/check_expr.c
    team/group/manager_http_auth/utils/hashtest.c
    team/group/manager_http_auth/utils/hashtest2.c
    team/group/manager_http_auth/utils/refcounter.c

Propchange: team/group/manager_http_auth/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/group/manager_http_auth/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/group/manager_http_auth/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/group/manager_http_auth/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Dec 15 12:51:57 2008
@@ -1,1 +1,1 @@
-/trunk:1-163961
+/trunk:1-164349

Modified: team/group/manager_http_auth/apps/app_chanisavail.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_chanisavail.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_chanisavail.c (original)
+++ team/group/manager_http_auth/apps/app_chanisavail.c Mon Dec 15 12:51:57 2008
@@ -160,13 +160,13 @@
 				status = inuse = ast_device_state(trychan);
 			}
 			if ((inuse <= 1) && (tempchan = ast_request(tech, chan->nativeformats, number, &status))) {
-					ast_str_append(&tmp_availchan, 0, "%s%s", tmp_availchan->used ? "&" : "", tempchan->name);
+					ast_str_append(&tmp_availchan, 0, "%s%s", ast_str_strlen(tmp_availchan) ? "&" : "", tempchan->name);
 					
 					snprintf(tmp, sizeof(tmp), "%s/%s", tech, number);
-					ast_str_append(&tmp_availorig, 0, "%s%s", tmp_availorig->used ? "&" : "", tmp);
+					ast_str_append(&tmp_availorig, 0, "%s%s", ast_str_strlen(tmp_availorig) ? "&" : "", tmp);
 
 					snprintf(tmp, sizeof(tmp), "%d", status);
-					ast_str_append(&tmp_availstat, 0, "%s%s", tmp_availstat->used ? "&" : "", tmp);
+					ast_str_append(&tmp_availstat, 0, "%s%s", ast_str_strlen(tmp_availstat) ? "&" : "", tmp);
 
 					ast_hangup(tempchan);
 					tempchan = NULL;
@@ -176,16 +176,16 @@
 					}
 			} else {
 				snprintf(tmp, sizeof(tmp), "%d", status);
-				ast_str_append(&tmp_availstat, 0, "%s%s", tmp_availstat->used ? "&" : "", tmp);
+				ast_str_append(&tmp_availstat, 0, "%s%s", ast_str_strlen(tmp_availstat) ? "&" : "", tmp);
 			}
 			cur = rest;
 		} while (cur);
 	}
 
-	pbx_builtin_setvar_helper(chan, "AVAILCHAN", tmp_availchan->str);
+	pbx_builtin_setvar_helper(chan, "AVAILCHAN", ast_str_buffer(tmp_availchan));
 	/* Store the originally used channel too */
-	pbx_builtin_setvar_helper(chan, "AVAILORIGCHAN", tmp_availorig->str);
-	pbx_builtin_setvar_helper(chan, "AVAILSTATUS", tmp_availstat->str);
+	pbx_builtin_setvar_helper(chan, "AVAILORIGCHAN", ast_str_buffer(tmp_availorig));
+	pbx_builtin_setvar_helper(chan, "AVAILSTATUS", ast_str_buffer(tmp_availstat));
 
 	return 0;
 }

Modified: team/group/manager_http_auth/apps/app_dumpchan.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_dumpchan.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_dumpchan.c (original)
+++ team/group/manager_http_auth/apps/app_dumpchan.c Mon Dec 15 12:51:57 2008
@@ -35,6 +35,7 @@
 #include "asterisk/pbx.h"
 #include "asterisk/module.h"
 #include "asterisk/channel.h"
+#include "asterisk/app.h"
 
 /*** DOCUMENTATION
 	<application name="DumpChan" language="en_US">
@@ -148,7 +149,7 @@
 
 static int dumpchan_exec(struct ast_channel *chan, void *data)
 {
-	struct ast_str *vars = ast_str_alloca(BUFSIZ * 4); /* XXX very large! */
+	struct ast_str *vars = ast_str_thread_get(&global_app_buf, 16);
 	char info[1024];
 	int level = 0;
 	static char *line = "================================================================================";
@@ -156,10 +157,11 @@
 	if (!ast_strlen_zero(data))
 		level = atoi(data);
 
-	pbx_builtin_serialize_variables(chan, &vars);
-	serialize_showchan(chan, info, sizeof(info));
-	if (option_verbose >= level)
-		ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n", chan->name, line, info, vars->str, line);
+	if (option_verbose >= level) {
+		serialize_showchan(chan, info, sizeof(info));
+		pbx_builtin_serialize_variables(chan, &vars);
+		ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n", chan->name, line, info, ast_str_buffer(vars), line);
+	}
 
 	return 0;
 }

Modified: team/group/manager_http_auth/apps/app_externalivr.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_externalivr.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_externalivr.c (original)
+++ team/group/manager_http_auth/apps/app_externalivr.c Mon Dec 15 12:51:57 2008
@@ -122,8 +122,8 @@
 		ast_str_append(&tmp, 0, ",%s", data);
 	}
 
-	fprintf(handle, "%s\n", tmp->str);
-	ast_debug(1, "sent '%s'\n", tmp->str);
+	fprintf(handle, "%s\n", ast_str_buffer(tmp));
+	ast_debug(1, "sent '%s'\n", ast_str_buffer(tmp));
 }
 
 static void *gen_alloc(struct ast_channel *chan, void *params)
@@ -276,7 +276,7 @@
 
 		ast_str_append(&newstring, 0, "%s=%s,", variable, value);
 		ast_channel_unlock(chan);
-		ast_copy_string(outbuf, newstring->str, outbuflen);
+		ast_copy_string(outbuf, ast_str_buffer(newstring), outbuflen);
 	}
 }
 
@@ -659,7 +659,8 @@
  				continue;
   
 			if (input[0] == 'P') {
- 				send_eivr_event(eivr_events, 'P', args->str, chan);
+				struct ast_str *tmp = (struct ast_str *) args;
+ 				send_eivr_event(eivr_events, 'P', ast_str_buffer(tmp), chan);
 			} else if ( input[0] == 'T' ) {
 				ast_chan_log(LOG_WARNING, chan, "Answering channel if needed and starting generator\n");
 				if (chan->_state != AST_STATE_UP) {

Modified: team/group/manager_http_auth/apps/app_fax.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_fax.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_fax.c (original)
+++ team/group/manager_http_auth/apps/app_fax.c Mon Dec 15 12:51:57 2008
@@ -29,6 +29,9 @@
 #include <tiffio.h>
 
 #include <spandsp.h>
+#ifdef HAVE_SPANDSP_EXPOSE_H
+#include <spandsp/expose.h>
+#endif
 #include <spandsp/version.h>
 
 #include "asterisk/lock.h"

Modified: team/group/manager_http_auth/apps/app_followme.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_followme.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_followme.c (original)
+++ team/group/manager_http_auth/apps/app_followme.c Mon Dec 15 12:51:57 2008
@@ -960,9 +960,8 @@
 		}
 		/* This one has to exist; it was part of the query */
 		ordstr = ast_variable_retrieve(cfg, catg, "ordinal");
-		ast_str_make_space(&str, strlen(numstr) + 1);
-		ast_copy_string(str->str, numstr, str->len);
-		if ((cur = create_followme_number(str->str, timeout, atoi(ordstr)))) {
+		ast_str_set(&str, 0, "%s", numstr);
+		if ((cur = create_followme_number(ast_str_buffer(str), timeout, atoi(ordstr)))) {
 			AST_LIST_INSERT_TAIL(&new->numbers, cur, entry);
 		}
 	}

Modified: team/group/manager_http_auth/apps/app_jack.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_jack.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_jack.c (original)
+++ team/group/manager_http_auth/apps/app_jack.c Mon Dec 15 12:51:57 2008
@@ -182,7 +182,7 @@
 			ast_str_append(&str, 0, ", %s", jack_status_to_str((1 << i)));
 	}
 	
-	ast_log(LOG_NOTICE, "%s: %s\n", prefix, str->str);
+	ast_log(LOG_NOTICE, "%s: %s\n", prefix, ast_str_buffer(str));
 }
 
 static int alloc_resampler(struct jack_data *jack_data, int input)

Modified: team/group/manager_http_auth/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_meetme.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_meetme.c (original)
+++ team/group/manager_http_auth/apps/app_meetme.c Mon Dec 15 12:51:57 2008
@@ -1260,7 +1260,7 @@
 			min = ((now - cnf->start) % 3600) / 60;
 			sec = (now - cnf->start) % 60;
 			if (!concise) {
-				ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users, cmdline->str, hr, min, sec, cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
+				ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users, ast_str_buffer(cmdline), hr, min, sec, cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
 			} else {
 				ast_cli(a->fd, "%s!%d!%d!%02d:%02d:%02d!%d!%d\n",
 					cnf->confno,
@@ -1345,9 +1345,9 @@
 		return CLI_SHOWUSAGE;
 	}
 
-	ast_debug(1, "Cmdline: %s\n", cmdline->str);
-
-	admin_exec(NULL, cmdline->str);
+	ast_debug(1, "Cmdline: %s\n", ast_str_buffer(cmdline));
+
+	admin_exec(NULL, ast_str_buffer(cmdline));
 	ast_free(cmdline);
 
 	return CLI_SUCCESS;
@@ -1435,9 +1435,9 @@
 		return CLI_SHOWUSAGE;
 	}
 
-	ast_debug(1, "Cmdline: %s\n", cmdline->str);
-
-	admin_exec(NULL, cmdline->str);
+	ast_debug(1, "Cmdline: %s\n", ast_str_buffer(cmdline));
+
+	admin_exec(NULL, ast_str_buffer(cmdline));
 	ast_free(cmdline);
 
 	return CLI_SUCCESS;
@@ -4615,7 +4615,7 @@
 	ast_set_flag(&conf_flags, 
 		CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_PASS_DTMF | CONFFLAG_SLA_STATION);
 	answer_trunk_chan(trunk_ref->chan);
-	conf = build_conf(conf_name->str, "", "", 0, 0, 1, trunk_ref->chan);
+	conf = build_conf(ast_str_buffer(conf_name), "", "", 0, 0, 1, trunk_ref->chan);
 	if (conf) {
 		conf_run(trunk_ref->chan, conf, conf_flags.flags, NULL);
 		dispose_conf(conf);
@@ -4625,7 +4625,7 @@
 	if (ast_atomic_dec_and_test((int *) &trunk_ref->trunk->active_stations) &&
 		trunk_ref->state != SLA_TRUNK_STATE_ONHOLD_BYME) {
 		ast_str_append(&conf_name, 0, ",K");
-		admin_exec(NULL, conf_name->str);
+		admin_exec(NULL, ast_str_buffer(conf_name));
 		trunk_ref->trunk->hold_stations = 0;
 		sla_change_trunk_state(trunk_ref->trunk, SLA_TRUNK_STATE_IDLE, ALL_TRUNK_REFS, NULL);
 	}

Modified: team/group/manager_http_auth/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_queue.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_queue.c (original)
+++ team/group/manager_http_auth/apps/app_queue.c Mon Dec 15 12:51:57 2008
@@ -1691,6 +1691,7 @@
 			/* Delete if unused (else will be deleted when last caller leaves). */
 			ao2_unlink(queues, q);
 			ao2_unlock(q);
+			queue_unref(q);
 		}
 		return NULL;
 	}
@@ -2284,7 +2285,7 @@
 /*! \brief convert "\n" to "\nVariable: " ready for manager to use */
 static char *vars2manager(struct ast_channel *chan, char *vars, size_t len)
 {
-	struct ast_str *buf = ast_str_alloca(len + 1);
+	struct ast_str *buf = ast_str_thread_get(&global_app_buf, len + 1);
 	char *tmp;
 
 	if (pbx_builtin_serialize_variables(chan, &buf)) {
@@ -2292,7 +2293,7 @@
 
 		/* convert "\n" to "\nVariable: " */
 		strcpy(vars, "Variable: ");
-		tmp = buf->str;
+		tmp = ast_str_buffer(buf);
 
 		for (i = 0, j = 10; (i < len - 1) && (j < len - 1); i++, j++) {
 			vars[j] = tmp[i];
@@ -2601,12 +2602,12 @@
 	if (qe->parent->randomperiodicannounce) {
 		qe->last_periodic_announce_sound = ((unsigned long) ast_random()) % qe->parent->numperiodicannounce;
 	} else if (qe->last_periodic_announce_sound >= qe->parent->numperiodicannounce || 
-		ast_strlen_zero(qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]->str)) {
+		ast_str_strlen(qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]) == 0) {
 		qe->last_periodic_announce_sound = 0;
 	}
 	
 	/* play the announcement */
-	res = play_file(qe->chan, qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]->str);
+	res = play_file(qe->chan, ast_str_buffer(qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]));
 
 	if ((res > 0 && !valid_exit(qe, res)) || res < 0)
 		res = 0;
@@ -5697,14 +5698,20 @@
 		return CLI_SHOWUSAGE;
 
 	if (argc == 3)	{ /* specific queue */
-		load_realtime_queue(argv[2]);
-	}
-	else if (ast_check_realtime("queues")) {
+		if ((q = load_realtime_queue(argv[2]))) {
+			queue_unref(q);
+		}
+	} else if (ast_check_realtime("queues")) {
+		/* This block is to find any queues which are defined in realtime but
+		 * which have not yet been added to the in-core container
+		 */
 		struct ast_config *cfg = ast_load_realtime_multientry("queues", "name LIKE", "%", SENTINEL);
 		char *queuename;
 		if (cfg) {
 			for (queuename = ast_category_browse(cfg, NULL); !ast_strlen_zero(queuename); queuename = ast_category_browse(cfg, queuename)) {
-				load_realtime_queue(queuename);
+				if ((q = load_realtime_queue(queuename))) {
+					queue_unref(q);
+				}
 			}
 			ast_config_destroy(cfg);
 		}
@@ -5714,8 +5721,20 @@
 	ao2_lock(queues);
 	while ((q = ao2_iterator_next(&queue_iter))) {
 		float sl;
+		struct call_queue *realtime_queue = NULL;
 
 		ao2_lock(q);
+		/* This check is to make sure we don't print information for realtime
+		 * queues which have been deleted from realtime but which have not yet
+		 * been deleted from the in-core container
+		 */
+		if (q->realtime && !(realtime_queue = load_realtime_queue(q->name))) {
+			ao2_unlock(q);
+			queue_unref(q);
+			continue;
+		} else if (q->realtime) {
+			queue_unref(realtime_queue);
+		}
 		if (argc == 3 && strcasecmp(q->name, argv[2])) {
 			ao2_unlock(q);
 			queue_unref(q);
@@ -5734,7 +5753,7 @@
 		ast_str_append(&out, 0, ") in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds",
 			int2strat(q->strategy), q->holdtime, q->weight,
 			q->callscompleted, q->callsabandoned,sl,q->servicelevel);
-		do_print(s, fd, out->str);
+		do_print(s, fd, ast_str_buffer(out));
 		if (!ao2_container_count(q->members))
 			do_print(s, fd, "   No Members");
 		else {
@@ -5759,7 +5778,7 @@
 						mem->calls, (long) (time(NULL) - mem->lastcall));
 				else
 					ast_str_append(&out, 0, " has taken no calls yet");
-				do_print(s, fd, out->str);
+				do_print(s, fd, ast_str_buffer(out));
 				ao2_ref(mem, -1);
 			}
 		}
@@ -5774,19 +5793,11 @@
 				ast_str_set(&out, 0, "      %d. %s (wait: %ld:%2.2ld, prio: %d)",
 					pos++, qe->chan->name, (long) (now - qe->start) / 60,
 					(long) (now - qe->start) % 60, qe->prio);
-				do_print(s, fd, out->str);
+				do_print(s, fd, ast_str_buffer(out));
 			}
 		}
 		do_print(s, fd, "");	/* blank line between entries */
 		ao2_unlock(q);
-		if (q->realtime || argc == 3) {
-			/* If a queue is realtime, then that means we used load_realtime_queue() above
-			 * to get its information. This means we have an extra reference we need to
-			 * remove at this point. If a specific queue was requested, then it also needs
-			 * to be unreffed here even if it is not a realtime queue.
-			 */
-			queue_unref(q);
-		}
 		queue_unref(q); /* Unref the iterator's reference */
 	}
 	ao2_unlock(queues);
@@ -5795,7 +5806,7 @@
 			ast_str_set(&out, 0, "No such queue: %s.", argv[2]);
 		else
 			ast_str_set(&out, 0, "No queues.");
-		do_print(s, fd, out->str);
+		do_print(s, fd, ast_str_buffer(out));
 	}
 	return CLI_SUCCESS;
 }

Modified: team/group/manager_http_auth/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/apps/app_voicemail.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/apps/app_voicemail.c (original)
+++ team/group/manager_http_auth/apps/app_voicemail.c Mon Dec 15 12:51:57 2008
@@ -10196,12 +10196,12 @@
 	AST_LIST_UNLOCK(&zones);
 }
 
-static char *substitute_escapes(const char *value)
-{
-	char *current, *result;
+static const char *substitute_escapes(const char *value)
+{
+	char *current;
 
 	/* Add 16 for fudge factor */
-	struct ast_str *str = ast_str_create(strlen(value) + 16);
+	struct ast_str *str = ast_str_thread_get(&global_app_buf, strlen(value) + 16);
 
 	/* Substitute strings \r, \n, and \t into the appropriate characters */
 	for (current = (char *) value; *current; current++) {
@@ -10235,10 +10235,7 @@
 		}
 	}
 
-	result = ast_strdup(str->str);
-	ast_free(str);
-
-	return result;
+	return ast_str_buffer(str);
 }
 
 static int load_config(int reload)
@@ -10858,13 +10855,13 @@
 			emailsubject = ast_strdup(val);
 		}
 		if ((val = ast_variable_retrieve(cfg, "general", "emailbody"))) {
-			emailbody = substitute_escapes(val);
+			emailbody = ast_strdup(substitute_escapes(val));
 		}
 		if ((val = ast_variable_retrieve(cfg, "general", "pagersubject"))) {
 			pagersubject = ast_strdup(val);
 		}
 		if ((val = ast_variable_retrieve(cfg, "general", "pagerbody"))) {
-			pagerbody = substitute_escapes(val);
+			pagerbody = ast_strdup(substitute_escapes(val));
 		}
 		AST_LIST_UNLOCK(&users);
 		ast_config_destroy(cfg);

Modified: team/group/manager_http_auth/cdr/cdr_adaptive_odbc.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/cdr/cdr_adaptive_odbc.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/cdr/cdr_adaptive_odbc.c (original)
+++ team/group/manager_http_auth/cdr/cdr_adaptive_odbc.c Mon Dec 15 12:51:57 2008
@@ -317,8 +317,8 @@
 #define LENGTHEN_BUF1(size)														\
 			do {																\
 				/* Lengthen buffer, if necessary */								\
-				if (sql->used + size + 1 > sql->len) {                          \
-					if (ast_str_make_space(&sql, ((sql->len + size + 1) / 512 + 1) * 512) != 0) { \
+				if (ast_str_strlen(sql) + size + 1 > ast_str_size(sql)) {       \
+					if (ast_str_make_space(&sql, ((ast_str_size(sql) + size + 1) / 512 + 1) * 512) != 0) { \
 						ast_log(LOG_ERROR, "Unable to allocate sufficient memory.  Insert CDR '%s:%s' failed.\n", tableptr->connection, tableptr->table); \
 						ast_free(sql);											\
 						ast_free(sql2);											\
@@ -330,8 +330,8 @@
 
 #define LENGTHEN_BUF2(size)														\
 			do {																\
-				if (sql2->used + size + 1 > sql2->len) {                        \
-					if (ast_str_make_space(&sql2, ((sql2->len + size + 3) / 512 + 1) * 512) != 0) { \
+				if (ast_str_strlen(sql2) + size + 1 > ast_str_size(sql2)) {     \
+					if (ast_str_make_space(&sql2, ((ast_str_size(sql2) + size + 3) / 512 + 1) * 512) != 0) { \
 						ast_log(LOG_ERROR, "Unable to allocate sufficient memory.  Insert CDR '%s:%s' failed.\n", tableptr->connection, tableptr->table); \
 						ast_free(sql);											\
 						ast_free(sql2);											\
@@ -368,12 +368,13 @@
 	}
 
 	AST_LIST_TRAVERSE(&odbc_tables, tableptr, list) {
+		int first = 1;
 		ast_str_set(&sql, 0, "INSERT INTO %s (", tableptr->table);
 		ast_str_set(&sql2, 0, " VALUES (");
 
 		/* No need to check the connection now; we'll handle any failure in prepare_and_execute */
 		if (!(obj = ast_odbc_request_obj(tableptr->connection, 0))) {
-			ast_log(LOG_WARNING, "cdr_adaptive_odbc: Unable to retrieve database handle for '%s:%s'.  CDR failed: %s\n", tableptr->connection, tableptr->table, sql->str);
+			ast_log(LOG_WARNING, "cdr_adaptive_odbc: Unable to retrieve database handle for '%s:%s'.  CDR failed: %s\n", tableptr->connection, tableptr->table, ast_str_buffer(sql));
 			continue;
 		}
 
@@ -442,11 +443,11 @@
 						}
 					}
 
-					ast_str_append(&sql, 0, "%s,", entry->name);
+					ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 					LENGTHEN_BUF2(strlen(colptr));
 
 					/* Encode value, with escaping */
-					ast_str_append(&sql2, 0, "'");
+					ast_str_append(&sql2, 0, "%s'", first ? "" : ",");
 					for (tmp = colptr; *tmp; tmp++) {
 						if (*tmp == '\'') {
 							ast_str_append(&sql2, 0, "''");
@@ -456,7 +457,7 @@
 							ast_str_append(&sql2, 0, "%c", *tmp);
 						}
 					}
-					ast_str_append(&sql2, 0, "',");
+					ast_str_append(&sql2, 0, "'");
 					break;
 				case SQL_TYPE_DATE:
 					{
@@ -469,16 +470,16 @@
 							(month == 2 && year % 4 == 0 && day > 29) ||
 							(month == 2 && year % 4 != 0 && day > 28)) {
 							ast_log(LOG_WARNING, "CDR variable %s is not a valid date ('%s').\n", entry->name, colptr);
-							break;
+							continue;
 						}
 
 						if (year > 0 && year < 100) {
 							year += 2000;
 						}
 
-						ast_str_append(&sql, 0, "%s,", entry->name);
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(17);
-						ast_str_append(&sql2, 0, "{ d '%04d-%02d-%02d' },", year, month, day);
+						ast_str_append(&sql2, 0, "%s{ d '%04d-%02d-%02d' }", first ? "" : ",", year, month, day);
 					}
 					break;
 				case SQL_TYPE_TIME:
@@ -488,12 +489,12 @@
 
 						if ((count != 2 && count != 3) || hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59) {
 							ast_log(LOG_WARNING, "CDR variable %s is not a valid time ('%s').\n", entry->name, colptr);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(15);
-						ast_str_append(&sql2, 0, "{ t '%02d:%02d:%02d' },", hour, minute, second);
+						ast_str_append(&sql2, 0, "%s{ t '%02d:%02d:%02d' }", first ? "" : ",", hour, minute, second);
 					}
 					break;
 				case SQL_TYPE_TIMESTAMP:
@@ -511,16 +512,16 @@
 							(month == 2 && year % 4 != 0 && day > 28) ||
 							hour > 23 || minute > 59 || second > 59 || hour < 0 || minute < 0 || second < 0) {
 							ast_log(LOG_WARNING, "CDR variable %s is not a valid timestamp ('%s').\n", entry->name, colptr);
-							break;
+							continue;
 						}
 
 						if (year > 0 && year < 100) {
 							year += 2000;
 						}
 
-						ast_str_append(&sql, 0, "%s,", entry->name);
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(26);
-						ast_str_append(&sql2, 0, "{ ts '%04d-%02d-%02d %02d:%02d:%02d' },", year, month, day, hour, minute, second);
+						ast_str_append(&sql2, 0, "%s{ ts '%04d-%02d-%02d %02d:%02d:%02d' }", first ? "" : ",", year, month, day, hour, minute, second);
 					}
 					break;
 				case SQL_INTEGER:
@@ -528,12 +529,12 @@
 						int integer = 0;
 						if (sscanf(colptr, "%d", &integer) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(12);
-						ast_str_append(&sql2, 0, "%d,", integer);
+						ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
 					}
 					break;
 				case SQL_BIGINT:
@@ -541,12 +542,12 @@
 						long long integer = 0;
 						if (sscanf(colptr, "%lld", &integer) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(24);
-						ast_str_append(&sql2, 0, "%lld,", integer);
+						ast_str_append(&sql2, 0, "%s%lld", first ? "" : ",", integer);
 					}
 					break;
 				case SQL_SMALLINT:
@@ -554,12 +555,12 @@
 						short integer = 0;
 						if (sscanf(colptr, "%hd", &integer) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(6);
-						ast_str_append(&sql2, 0, "%d,", integer);
+						ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
 					}
 					break;
 				case SQL_TINYINT:
@@ -567,12 +568,12 @@
 						char integer = 0;
 						if (sscanf(colptr, "%hhd", &integer) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(4);
-						ast_str_append(&sql2, 0, "%d,", integer);
+						ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
 					}
 					break;
 				case SQL_BIT:
@@ -580,14 +581,14 @@
 						char integer = 0;
 						if (sscanf(colptr, "%hhd", &integer) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name);
-							break;
+							continue;
 						}
 						if (integer != 0)
 							integer = 1;
 
-						ast_str_append(&sql, 0, "%s,", entry->name);
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(2);
-						ast_str_append(&sql2, 0, "%d,", integer);
+						ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
 					}
 					break;
 				case SQL_NUMERIC:
@@ -596,12 +597,12 @@
 						double number = 0.0;
 						if (sscanf(colptr, "%lf", &number) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(entry->decimals);
-						ast_str_append(&sql2, 0, "%*.*lf,", entry->decimals, entry->radix, number);
+						ast_str_append(&sql2, 0, "%s%*.*lf", first ? "" : ",", entry->decimals, entry->radix, number);
 					}
 					break;
 				case SQL_FLOAT:
@@ -611,35 +612,37 @@
 						double number = 0.0;
 						if (sscanf(colptr, "%lf", &number) != 1) {
 							ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name);
-							break;
-						}
-
-						ast_str_append(&sql, 0, "%s,", entry->name);
+							continue;
+						}
+
+						ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
 						LENGTHEN_BUF2(entry->decimals);
-						ast_str_append(&sql2, 0, "%lf,", number);
+						ast_str_append(&sql2, 0, "%s%lf", first ? "" : ",", number);
 					}
 					break;
 				default:
 					ast_log(LOG_WARNING, "Column type %d (field '%s:%s:%s') is unsupported at this time.\n", entry->type, tableptr->connection, tableptr->table, entry->name);
+					continue;
 				}
+				first = 0;
 			}
 		}
 
 		/* Concatenate the two constructed buffers */
-		LENGTHEN_BUF1(sql2->used);
-		sql->str[sql->used - 1] = ')';
-		sql2->str[sql2->used - 1] = ')';
-		ast_str_append(&sql, 0, "%s", sql2->str);
-
-		ast_verb(11, "[%s]\n", sql->str);
-
-		stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, sql->str);
+		LENGTHEN_BUF1(ast_str_strlen(sql2));
+		ast_str_append(&sql, 0, ")");
+		ast_str_append(&sql2, 0, ")");
+		ast_str_append(&sql, 0, "%s", ast_str_buffer(sql2));
+
+		ast_verb(11, "[%s]\n", ast_str_buffer(sql));
+
+		stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, ast_str_buffer(sql));
 		if (stmt) {
 			SQLRowCount(stmt, &rows);
 			SQLFreeHandle(SQL_HANDLE_STMT, stmt);
 		}
 		if (rows == 0) {
-			ast_log(LOG_WARNING, "cdr_adaptive_odbc: Insert failed on '%s:%s'.  CDR failed: %s\n", tableptr->connection, tableptr->table, sql->str);
+			ast_log(LOG_WARNING, "cdr_adaptive_odbc: Insert failed on '%s:%s'.  CDR failed: %s\n", tableptr->connection, tableptr->table, ast_str_buffer(sql));
 		}
 early_release:
 		ast_odbc_release_obj(obj);
@@ -647,11 +650,11 @@
 	AST_RWLIST_UNLOCK(&odbc_tables);
 
 	/* Next time, just allocate buffers that are that big to start with. */
-	if (sql->used > maxsize) {
-		maxsize = sql->used;
-	}
-	if (sql2->used > maxsize2) {
-		maxsize2 = sql2->used;
+	if (ast_str_strlen(sql) > maxsize) {
+		maxsize = ast_str_strlen(sql);
+	}
+	if (ast_str_strlen(sql2) > maxsize2) {
+		maxsize2 = ast_str_strlen(sql2);
 	}
 
 	ast_free(sql);

Modified: team/group/manager_http_auth/cdr/cdr_manager.c
URL: http://svn.digium.com/view/asterisk/team/group/manager_http_auth/cdr/cdr_manager.c?view=diff&rev=164411&r1=164410&r2=164411
==============================================================================
--- team/group/manager_http_auth/cdr/cdr_manager.c (original)
+++ team/group/manager_http_auth/cdr/cdr_manager.c Mon Dec 15 12:51:57 2008
@@ -95,7 +95,7 @@
 			v = ast_variable_browse(cfg, cat);
 			while (v) {
 				if (customfields && !ast_strlen_zero(v->name) && !ast_strlen_zero(v->value)) {
-					if( (customfields->used + strlen(v->value) + strlen(v->name) + 14) < customfields->len) {
+					if ((ast_str_strlen(customfields) + strlen(v->value) + strlen(v->name) + 14) < ast_str_size(customfields)) {
 						ast_str_append(&customfields, -1, "%s: ${CDR(%s)}\r\n", v->value, v->name);
 						ast_log(LOG_NOTICE, "Added mapping %s: ${CDR(%s)}\n", v->value, v->name);
 					} else {
@@ -145,10 +145,10 @@
 
 	buf[0] = 0;
 	/* Custom fields handling */
-	if (customfields != NULL && customfields->used > 0) {
+	if (customfields != NULL && ast_str_strlen(customfields)) {
 		memset(&dummy, 0, sizeof(dummy));
 		dummy.cdr = cdr;
-		pbx_substitute_variables_helper(&dummy, customfields->str, buf, sizeof(buf) - 1);
+		pbx_substitute_variables_helper(&dummy, ast_str_buffer(customfields), buf, sizeof(buf) - 1);
 	}
 
 	manager_event(EVENT_FLAG_CDR, "Cdr",


[... 4750 lines stripped ...]



More information about the asterisk-commits mailing list