--- asterisk-1.8.15.0-CLEAN/main/pbx.c 2012-07-10 09:33:53.000000000 -0400
+++ asterisk-1.8.15.0-0.2.0/main/pbx.c 2013-01-15 12:22:42.000000000 -0500
@@ -518,10 +518,24 @@
+
+
+
+
+
+
This application will play the sounds that correspond to the letters of the
- given string.
+ given string. Optionally, a casetype may be
+ specified. This will is used for case-insensitive or case-sensitive pronunciations.
+ No option given wil default to normal operation of case insensitive.
[SayDigits]
@@ -806,6 +820,14 @@
AST_APP_OPTION('p', BACKGROUND_PLAYBACK),
});
+#define SAYALPHA_CASE_INSENSITIVE (1 << 0)
+#define SAYALPHA_CASE_SENSITIVE (1 << 1)
+
+AST_APP_OPTIONS(sayalpha_opts, {
+ AST_APP_OPTION('i', SAYALPHA_CASE_INSENSITIVE),
+ AST_APP_OPTION('s', SAYALPHA_CASE_SENSITIVE),
+});
+
#define WAITEXTEN_MOH (1 << 0)
#define WAITEXTEN_DIALTONE (1 << 1)
@@ -10222,10 +10244,33 @@
static int pbx_builtin_saycharacters(struct ast_channel *chan, const char *data)
{
- int res = 0;
+ int res = 0, casesensitive = 0;
+ char *parse;
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(characters);
+ AST_APP_ARG(options);
+ );
+
+ if (ast_strlen_zero(data)) {
+ ast_log(LOG_WARNING, "SayAlpha requires an argument (characters)\n");
+ return 0;
+ }
+
+ parse = ast_strdupa(data);
+ AST_STANDARD_APP_ARGS(args, parse);
+
+ if (args.options) {
+ if (strcasecmp(args.options, "i") && strcasecmp(args.options, "s")) {
+ ast_log(LOG_WARNING, "SayAlpha case sensitive option is either 'i' or 's'\n");
+ return 0;
+ }
+ if (!strcasecmp(args.options, "s")) {
+ casesensitive = 1;
+ }
+ }
+
+ res = ast_say_character_str(chan, args.characters, "", chan->language, casesensitive);
- if (data)
- res = ast_say_character_str(chan, data, "", chan->language);
return res;
}