Asterisk - The Open Source Telephony Project  18.5.0
Files | Functions
Dial plan applications

Applications support the dialplan. They register dynamically with. More...

Files

file  app_adsiprog.c
 Program Asterisk ADSI Scripts into phone.
 
file  app_alarmreceiver.c
 Central Station Alarm receiver for Ademco Contact ID.
 
file  app_amd.c
 Answering machine detection.
 
file  app_attended_transfer.c
 Attended transfer by caller channel.
 
file  app_audiosocket.c
 AudioSocket application – transmit and receive audio through a TCP socket.
 
file  app_authenticate.c
 Execute arbitrary authenticate commands.
 
file  app_blind_transfer.c
 Blind transfer by caller channel.
 
file  app_bridgeaddchan.c
 Application to place the channel into an existing Bridge.
 
file  app_bridgewait.c
 Application to place the channel into a holding Bridge.
 
file  app_cdr.c
 Applications connected with CDR engine.
 
file  app_celgenuserevent.c
 Generate User-Defined CEL event.
 
file  app_chanisavail.c
 Check if Channel is Available.
 
file  app_channelredirect.c
 ChannelRedirect application.
 
file  app_chanspy.c
 ChanSpy: Listen in on any channel.
 
file  app_confbridge.c
 Conference Bridge application.
 
file  app_controlplayback.c
 Trivial application to control playback of a sound file.
 
file  app_dahdiras.c
 Execute an ISDN RAS.
 
file  app_db.c
 Database access functions.
 
file  app_dial.c
 dial() & retrydial() - Trivial application to dial a channel and send an URL on answer
 
file  app_dictate.c
 Virtual Dictation Machine Application For Asterisk.
 
file  app_directed_pickup.c
 Directed Call Pickup Support.
 
file  app_directory.c
 Provide a directory of extensions.
 
file  app_disa.c
 DISA – Direct Inward System Access Application.
 
file  app_dumpchan.c
 Application to dump channel variables.
 
file  app_echo.c
 Echo application – play back what you hear to evaluate latency.
 
file  app_exec.c
 Exec application.
 
file  app_externalivr.c
 External IVR application interface.
 
file  app_festival.c
 Connect to festival.
 
file  app_flash.c
 App to flash a DAHDI trunk.
 
file  app_followme.c
 Find-Me Follow-Me application.
 
file  app_forkcdr.c
 Fork CDR application.
 
file  app_getcpeid.c
 Get ADSI CPE ID.
 
file  app_ices.c
 Stream to an icecast server via ICES (see contrib/asterisk-ices.xml)
 
file  app_if.c
 If Branch Implementation.
 
file  app_image.c
 App to transmit an image.
 
file  app_ivrdemo.c
 IVR Demo application.
 
file  app_jack.c
 Jack Application.
 
file  app_macro.c
 Dial plan macro Implementation.
 
file  app_meetme.c
 Meet me conference bridge and Shared Line Appearances.
 
file  app_mf.c
 MF sender and receiver applications.
 
file  app_milliwatt.c
 Digital Milliwatt Test.
 
file  app_minivm.c
 MiniVoiceMail - A Minimal Voicemail System for Asterisk.
 
file  app_mixmonitor.c
 MixMonitor() - Record a call and mix the audio during the recording.
 
file  app_morsecode.c
 Morsecode application.
 
file  app_mp3.c
 Silly application to play an MP3 file – uses mpg123.
 
file  app_mysql.c
 MYSQL dialplan application.
 
file  app_nbscat.c
 Silly application to play an NBScat file – uses nbscat8k.
 
file  app_originate.c
 Originate application.
 
file  app_osplookup.c
 Open Settlement Protocol (OSP) Applications.
 
file  app_page.c
 page() - Paging application
 
file  app_playback.c
 Trivial application to playback a sound file.
 
file  app_playtones.c
 Playtones application.
 
file  app_privacy.c
 Block all calls without Caller*ID, require phone # to be entered.
 
file  app_queue.c
 True call queues with optional send URL on answer.
 
file  app_read.c
 Trivial application to read a variable.
 
file  app_readexten.c
 Trivial application to read an extension into a variable.
 
file  app_record.c
 Trivial application to record a sound file.
 
file  app_saycounted.c
 Applications to decline words according to current language.
 
file  app_sayunixtime.c
 SayUnixTime application.
 
file  app_senddtmf.c
 App to send DTMF digits.
 
file  app_sendtext.c
 App to transmit a text message.
 
file  app_skel.c
 Skeleton application.
 
file  app_sms.c
 SMS application - ETSI ES 201 912 protocol 1 implementation.
 
file  app_softhangup.c
 SoftHangup application.
 
file  app_speech_utils.c
 Speech Recognition Utility Applications.
 
file  app_stack.c
 Stack applications Gosub, Return, etc.
 
file  app_system.c
 Execute arbitrary system commands.
 
file  app_talkdetect.c
 Playback a file with audio detect.
 
file  app_test.c
 Applications to test connection and produce report in text file.
 
file  app_tonedetect.c
 Tone detection module.
 
file  app_transfer.c
 Transfer a caller.
 
file  app_url.c
 App to transmit a URL.
 
file  app_userevent.c
 UserEvent application – send manager event.
 
file  app_verbose.c
 Verbose logging application.
 
file  app_voicemail.c
 Comedian Mail - Voicemail System.
 
file  app_waitforring.c
 Wait for Ring Application.
 
file  app_waitforsilence.c
 Wait for Silence.
 
file  app_waituntil.c
 Sleep until the given epoch.
 
file  app_while.c
 While Loop Implementation.
 
file  app_zapateller.c
 Playback the special information tone to get rid of telemarketers.
 
file  conf_state.c
 Confbridge state handling.
 
file  conf_state_empty.c
 Confbridge state handling for the EMPTY state.
 
file  conf_state_inactive.c
 Confbridge state handling for the INACTIVE state.
 
file  conf_state_multi.c
 Confbridge state handling for the MULTI state.
 
file  conf_state_multi_marked.c
 Confbridge state handling for the MULTI_MARKED state.
 
file  conf_state_single.c
 Confbridge state handling for the SINGLE state.
 
file  conf_state_single_marked.c
 Confbridge state handling for the SINGLE_MARKED state.
 
 
file  res_fax.c
 Generic FAX Resource for FAX technology resource modules.
 
file  res_format_attr_h263.c
 H.263 Format Attribute Module.
 
file  res_format_attr_h264.c
 H.264 Format Attribute Module.
 
file  res_realtime.c
 RealTime CLI.
 

Functions

static int iax2_prov_app (struct ast_channel *chan, const char *data)
 
int indicate_busy (struct ast_channel *chan, const char *data)
 
int indicate_congestion (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_answer (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_background (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_execiftime (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_goto (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_gotoiftime (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_hangup (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_proceeding (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_progress (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_ringing (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_setamaflags (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_wait (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_waitdigit (struct ast_channel *chan, const char *data)
 
static int pbx_builtin_waitexten (struct ast_channel *chan, const char *data)
 

Detailed Description

Applications support the dialplan. They register dynamically with.

Asterisk Dial Plan Applications

See also
ast_register_application() and unregister with
ast_unregister_application()
See also

Function Documentation

◆ iax2_prov_app()

static int iax2_prov_app ( struct ast_channel chan,
const char *  data 
)
static

iax2provision

Definition at line 12249 of file chan_iax2.c.

References ast_channel_tech(), ast_channel_tech_pvt(), ast_log, ast_sockaddr_isnull(), ast_sockaddr_stringify(), ast_strdupa, ast_strlen_zero, ast_verb, iax2_provision(), LOG_NOTICE, NULL, and PTR_TO_CALLNO.

Referenced by load_module().

12250 {
12251  int res;
12252  char *sdata;
12253  char *opts;
12254  int force =0;
12255  unsigned short callno = PTR_TO_CALLNO(ast_channel_tech_pvt(chan));
12256  if (ast_strlen_zero(data))
12257  data = "default";
12258  sdata = ast_strdupa(data);
12259  opts = strchr(sdata, '|');
12260  if (opts)
12261  *opts='\0';
12262 
12263  if (ast_channel_tech(chan) != &iax2_tech) {
12264  ast_log(LOG_NOTICE, "Can't provision a non-IAX device!\n");
12265  return -1;
12266  }
12267  if (!callno || !iaxs[callno] || ast_sockaddr_isnull(&iaxs[callno]->addr)) {
12268  ast_log(LOG_NOTICE, "Can't provision something with no IP?\n");
12269  return -1;
12270  }
12271  res = iax2_provision(&iaxs[callno]->addr, iaxs[callno]->sockfd, NULL, sdata, force);
12272  ast_verb(3, "Provisioned IAXY at '%s' with '%s'= %d\n",
12273  ast_sockaddr_stringify(&iaxs[callno]->addr),
12274  sdata, res);
12275  return res;
12276 }
void * ast_channel_tech_pvt(const struct ast_channel *chan)
#define NULL
Definition: resample.c:96
#define ast_verb(level,...)
Definition: logger.h:463
#define ast_strlen_zero(foo)
Definition: strings.h:52
static int ast_sockaddr_isnull(const struct ast_sockaddr *addr)
Checks if the ast_sockaddr is null. "null" in this sense essentially means uninitialized, or having a 0 length.
Definition: netsock2.h:127
#define ast_log
Definition: astobj2.c:42
#define PTR_TO_CALLNO(a)
Definition: chan_iax2.c:288
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
static struct chan_iax2_pvt * iaxs[IAX_MAX_CALLS]
an array of iax2 pvt structures
Definition: chan_iax2.c:1125
static int iax2_provision(struct ast_sockaddr *end, int sockfd, const char *dest, const char *template, int force)
Definition: chan_iax2.c:12197
static char * ast_sockaddr_stringify(const struct ast_sockaddr *addr)
Wrapper around ast_sockaddr_stringify_fmt() with default format.
Definition: netsock2.h:260
static struct ast_channel_tech iax2_tech
Definition: chan_iax2.c:1293
#define LOG_NOTICE
Definition: logger.h:263
const struct ast_channel_tech * ast_channel_tech(const struct ast_channel *chan)

◆ indicate_busy()

int indicate_busy ( struct ast_channel chan,
const char *  data 
)

Definition at line 739 of file pbx_builtins.c.

References AST_CAUSE_BUSY, ast_channel_hangupcause_set(), ast_channel_lock, ast_channel_unlock, AST_CONTROL_BUSY, ast_indicate(), ast_setstate(), AST_STATE_BUSY, AST_STATE_UP, and wait_for_hangup().

Referenced by __ast_pbx_run().

740 {
742  /* Don't change state of an UP channel, just indicate
743  busy in audio */
744  ast_channel_lock(chan);
745  if (ast_channel_state(chan) != AST_STATE_UP) {
748  }
749  ast_channel_unlock(chan);
750  wait_for_hangup(chan, data);
751  return -1;
752 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322
void ast_channel_hangupcause_set(struct ast_channel *chan, int value)
ast_channel_state
ast_channel states
Definition: channelstate.h:35
void wait_for_hangup(struct ast_channel *chan, const void *data)
Definition: pbx.c:8267
#define ast_channel_unlock(chan)
Definition: channel.h:2946
int ast_setstate(struct ast_channel *chan, enum ast_channel_state)
Change the state of a channel.
Definition: channel.c:7486
#define AST_CAUSE_BUSY
Definition: causes.h:148

◆ indicate_congestion()

int indicate_congestion ( struct ast_channel ,
const char *   
)

pbx_builtins.c functions needed by pbx.c

Definition at line 757 of file pbx_builtins.c.

References AST_CAUSE_CONGESTION, ast_channel_hangupcause_set(), ast_channel_lock, ast_channel_unlock, AST_CONTROL_CONGESTION, ast_indicate(), ast_setstate(), AST_STATE_BUSY, AST_STATE_UP, and wait_for_hangup().

Referenced by __ast_pbx_run().

758 {
760  /* Don't change state of an UP channel, just indicate
761  congestion in audio */
762  ast_channel_lock(chan);
763  if (ast_channel_state(chan) != AST_STATE_UP) {
766  }
767  ast_channel_unlock(chan);
768  wait_for_hangup(chan, data);
769  return -1;
770 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322
void ast_channel_hangupcause_set(struct ast_channel *chan, int value)
ast_channel_state
ast_channel states
Definition: channelstate.h:35
void wait_for_hangup(struct ast_channel *chan, const void *data)
Definition: pbx.c:8267
#define ast_channel_unlock(chan)
Definition: channel.h:2946
int ast_setstate(struct ast_channel *chan, enum ast_channel_state)
Change the state of a channel.
Definition: channel.c:7486
#define AST_CAUSE_CONGESTION
Definition: causes.h:152

◆ pbx_builtin_answer()

static int pbx_builtin_answer ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 775 of file pbx_builtins.c.

References __ast_answer(), args, AST_APP_ARG, AST_DECLARE_APP_ARGS, ast_log, AST_LOG_WARNING, AST_STANDARD_APP_ARGS, AST_STATE_UP, ast_strdupa, ast_strlen_zero, and parse().

776 {
777  int delay = 0;
778  char *parse;
780  AST_APP_ARG(delay);
781  AST_APP_ARG(answer_cdr);
782  );
783 
784  if (ast_strlen_zero(data)) {
785  return __ast_answer(chan, 0);
786  }
787 
788  parse = ast_strdupa(data);
789 
790  AST_STANDARD_APP_ARGS(args, parse);
791 
792  if (!ast_strlen_zero(args.delay) && (ast_channel_state(chan) != AST_STATE_UP))
793  delay = atoi(data);
794 
795  if (delay < 0) {
796  delay = 0;
797  }
798 
799  if (!ast_strlen_zero(args.answer_cdr) && !strcasecmp(args.answer_cdr, "nocdr")) {
800  ast_log(AST_LOG_WARNING, "The nocdr option for the Answer application has been removed and is no longer supported.\n");
801  }
802 
803  return __ast_answer(chan, delay);
804 }
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
#define AST_LOG_WARNING
Definition: logger.h:279
ast_channel_state
ast_channel states
Definition: channelstate.h:35
const char * args
#define ast_strlen_zero(foo)
Definition: strings.h:52
#define ast_log
Definition: astobj2.c:42
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
int __ast_answer(struct ast_channel *chan, unsigned int delay)
Answer a channel, with a selectable delay before returning.
Definition: channel.c:2704
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
#define AST_APP_ARG(name)
Define an application argument.

◆ pbx_builtin_background()

static int pbx_builtin_background ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 1144 of file pbx_builtins.c.

References args, ast_answer(), AST_APP_ARG, ast_app_parse_options(), ast_canmatch_extension(), ast_channel_caller(), ast_channel_context(), ast_channel_context_set(), ast_channel_exten_set(), ast_channel_flags(), ast_channel_language(), ast_channel_lock, ast_channel_name(), ast_channel_priority_set(), ast_channel_unlock, AST_DECLARE_APP_ARGS, AST_DIGIT_ANY, AST_FLAG_DISABLE_WORKAROUNDS, ast_log, ast_matchmore_extension(), AST_STANDARD_APP_ARGS, AST_STATE_UP, ast_stopstream(), ast_strdupa, ast_streamfile(), ast_strip(), ast_strlen_zero, ast_test_flag, ast_waitstream(), ast_waitstream_exten(), BACKGROUND_MATCHEXTEN, BACKGROUND_NOANSWER, background_opts, BACKGROUND_PLAYBACK, BACKGROUND_SKIP, buf, context, done, exten, ast_flags::flags, LOG_WARNING, NULL, options, parse(), pbx_builtin_getvar_helper(), pbx_builtin_setvar_helper(), S_COR, and strsep().

1145 {
1146  int res = 0;
1147  int mres = 0;
1148  struct ast_flags flags = {0};
1149  char *parse, exten[2] = "";
1151  AST_APP_ARG(filename);
1153  AST_APP_ARG(lang);
1155  );
1156 
1157  if (ast_strlen_zero(data)) {
1158  ast_log(LOG_WARNING, "Background requires an argument (filename)\n");
1159  return -1;
1160  }
1161 
1162  parse = ast_strdupa(data);
1163 
1164  AST_STANDARD_APP_ARGS(args, parse);
1165 
1166  if (ast_strlen_zero(args.lang))
1167  args.lang = (char *)ast_channel_language(chan); /* XXX this is const */
1168 
1169  if (ast_strlen_zero(args.context)) {
1170  const char *context;
1171  ast_channel_lock(chan);
1172  if ((context = pbx_builtin_getvar_helper(chan, "MACRO_CONTEXT"))) {
1173  args.context = ast_strdupa(context);
1174  } else {
1175  args.context = ast_strdupa(ast_channel_context(chan));
1176  }
1177  ast_channel_unlock(chan);
1178  }
1179 
1180  if (args.options) {
1181  if (!strcasecmp(args.options, "skip"))
1182  flags.flags = BACKGROUND_SKIP;
1183  else if (!strcasecmp(args.options, "noanswer"))
1184  flags.flags = BACKGROUND_NOANSWER;
1185  else
1186  ast_app_parse_options(background_opts, &flags, NULL, args.options);
1187  }
1188 
1189  /* Answer if need be */
1190  if (ast_channel_state(chan) != AST_STATE_UP) {
1191  if (ast_test_flag(&flags, BACKGROUND_SKIP)) {
1192  goto done;
1193  } else if (!ast_test_flag(&flags, BACKGROUND_NOANSWER)) {
1194  res = ast_answer(chan);
1195  }
1196  }
1197 
1198  if (!res) {
1199  char *back = ast_strip(args.filename);
1200  char *front;
1201 
1202  ast_stopstream(chan); /* Stop anything playing */
1203  /* Stream the list of files */
1204  while (!res && (front = strsep(&back, "&")) ) {
1205  if ( (res = ast_streamfile(chan, front, args.lang)) ) {
1206  ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", ast_channel_name(chan), (char*)data);
1207  res = 0;
1208  mres = 1;
1209  break;
1210  }
1211  if (ast_test_flag(&flags, BACKGROUND_PLAYBACK)) {
1212  res = ast_waitstream(chan, "");
1213  } else if (ast_test_flag(&flags, BACKGROUND_MATCHEXTEN)) {
1214  res = ast_waitstream_exten(chan, args.context);
1215  } else {
1216  res = ast_waitstream(chan, AST_DIGIT_ANY);
1217  }
1218  ast_stopstream(chan);
1219  }
1220  }
1221 
1222  /* If ast_waitstream didn't give us back a digit, there is nothing else to do */
1223  if (res <= 0) {
1224  goto done;
1225  }
1226 
1227  exten[0] = res;
1228 
1229  /*
1230  * If the single digit DTMF is an extension in the specified context, then
1231  * go there and signal no DTMF. Otherwise, we should exit with that DTMF.
1232  * If we're in Macro, we'll exit and seek that DTMF as the beginning of an
1233  * extension in the Macro's calling context. If we're not in Macro, then
1234  * we'll simply seek that extension in the calling context. Previously,
1235  * someone complained about the behavior as it related to the interior of a
1236  * Gosub routine, and the fix (#14011) inadvertently broke FreePBX
1237  * (#14940). This change should fix both of these situations, but with the
1238  * possible incompatibility that if a single digit extension does not exist
1239  * (but a longer extension COULD have matched), it would have previously
1240  * gone immediately to the "i" extension, but will now need to wait for a
1241  * timeout.
1242  *
1243  * Later, we had to add a flag to disable this workaround, because AGI
1244  * users can EXEC Background and reasonably expect that the DTMF code will
1245  * be returned (see #16434).
1246  */
1248  && ast_canmatch_extension(chan, args.context, exten, 1,
1249  S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))
1250  && !ast_matchmore_extension(chan, args.context, exten, 1,
1251  S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
1252  char buf[2] = { 0, };
1253  snprintf(buf, sizeof(buf), "%c", res);
1254  ast_channel_exten_set(chan, buf);
1255  ast_channel_context_set(chan, args.context);
1256  ast_channel_priority_set(chan, 0);
1257  res = 0;
1258  }
1259 done:
1260  pbx_builtin_setvar_helper(chan, "BACKGROUNDSTATUS", mres ? "FAILED" : "SUCCESS");
1261  return res;
1262 }
struct ast_party_caller * ast_channel_caller(struct ast_channel *chan)
int ast_matchmore_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid)
Looks to see if adding anything to this extension might match something. (exists ^ canmatch) ...
Definition: pbx.c:4199
#define ast_channel_lock(chan)
Definition: channel.h:2945
static char exten[AST_MAX_EXTENSION]
Definition: chan_alsa.c:118
int ast_streamfile(struct ast_channel *c, const char *filename, const char *preflang)
Streams a file.
Definition: file.c:1250
#define BACKGROUND_MATCHEXTEN
Definition: pbx_builtins.c:685
#define AST_DIGIT_ANY
Definition: file.h:48
#define ast_test_flag(p, flag)
Definition: utils.h:63
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
#define LOG_WARNING
Definition: logger.h:274
unsigned int flags
Definition: utils.h:200
ast_channel_state
ast_channel states
Definition: channelstate.h:35
const char * args
#define NULL
Definition: resample.c:96
int ast_canmatch_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid)
Looks for a valid matching extension.
Definition: pbx.c:4194
const char * pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name)
Return a pointer to the value of the corresponding channel variable.
#define ast_strlen_zero(foo)
Definition: strings.h:52
int done
Definition: test_amihooks.c:48
Number structure.
Definition: app_followme.c:154
#define ast_log
Definition: astobj2.c:42
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
Definition: strings.h:219
#define S_COR(a, b, c)
returns the equivalent of logic or for strings, with an additional boolean check: second one if not e...
Definition: strings.h:85
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
static const struct ast_app_option background_opts[128]
Definition: pbx_builtins.c:693
int ast_app_parse_options(const struct ast_app_option *options, struct ast_flags *flags, char **args, char *optstr)
Parses a string containing application options and sets flags/arguments.
Definition: main/app.c:2906
#define BACKGROUND_PLAYBACK
Definition: pbx_builtins.c:686
#define BACKGROUND_SKIP
Definition: pbx_builtins.c:683
#define ast_channel_unlock(chan)
Definition: channel.h:2946
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
Structure used to handle boolean flags.
Definition: utils.h:199
void ast_channel_exten_set(struct ast_channel *chan, const char *value)
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name...
char * strsep(char **str, const char *delims)
void ast_channel_context_set(struct ast_channel *chan, const char *value)
const char * ast_channel_name(const struct ast_channel *chan)
int ast_waitstream(struct ast_channel *c, const char *breakon)
Waits for a stream to stop or digit to be pressed.
Definition: file.c:1776
int ast_answer(struct ast_channel *chan)
Answer a channel.
Definition: channel.c:2814
const char * ast_channel_language(const struct ast_channel *chan)
#define BACKGROUND_NOANSWER
Definition: pbx_builtins.c:684
const char * ast_channel_context(const struct ast_channel *chan)
static struct test_options options
static char context[AST_MAX_CONTEXT]
Definition: chan_alsa.c:116
struct ast_flags * ast_channel_flags(struct ast_channel *chan)
void ast_channel_priority_set(struct ast_channel *chan, int value)
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
int ast_stopstream(struct ast_channel *c)
Stops a stream.
Definition: file.c:187
int ast_waitstream_exten(struct ast_channel *c, const char *context)
Waits for a stream to stop or digit matching a valid one digit exten to be pressed.
Definition: file.c:1795
#define AST_APP_ARG(name)
Define an application argument.

◆ pbx_builtin_execiftime()

static int pbx_builtin_execiftime ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 959 of file pbx_builtins.c.

References app, ast_build_timing(), ast_check_timing(), ast_destroy_timing(), ast_log, ast_strdupa, ast_strlen_zero, LOG_WARNING, pbx_exec(), pbx_findapp(), S_OR, strsep(), and usage.

960 {
961  char *s, *appname;
962  struct ast_timing timing;
963  struct ast_app *app;
964  static const char * const usage = "ExecIfTime requires an argument:\n <time range>,<days of week>,<days of month>,<months>[,<timezone>]?<appname>[(<appargs>)]";
965 
966  if (ast_strlen_zero(data)) {
967  ast_log(LOG_WARNING, "%s\n", usage);
968  return -1;
969  }
970 
971  appname = ast_strdupa(data);
972 
973  s = strsep(&appname, "?"); /* Separate the timerange and application name/data */
974  if (!appname) { /* missing application */
975  ast_log(LOG_WARNING, "%s\n", usage);
976  return -1;
977  }
978 
979  if (!ast_build_timing(&timing, s)) {
980  ast_log(LOG_WARNING, "Invalid Time Spec: %s\nCorrect usage: %s\n", s, usage);
981  ast_destroy_timing(&timing);
982  return -1;
983  }
984 
985  if (!ast_check_timing(&timing)) { /* outside the valid time window, just return */
986  ast_destroy_timing(&timing);
987  return 0;
988  }
989  ast_destroy_timing(&timing);
990 
991  /* now split appname(appargs) */
992  if ((s = strchr(appname, '('))) {
993  char *e;
994  *s++ = '\0';
995  if ((e = strrchr(s, ')')))
996  *e = '\0';
997  else
998  ast_log(LOG_WARNING, "Failed to find closing parenthesis\n");
999  }
1000 
1001 
1002  if ((app = pbx_findapp(appname))) {
1003  return pbx_exec(chan, app, S_OR(s, ""));
1004  } else {
1005  ast_log(LOG_WARNING, "Cannot locate application %s\n", appname);
1006  return -1;
1007  }
1008 }
int pbx_exec(struct ast_channel *c, struct ast_app *app, const char *data)
Execute an application.
Definition: pbx_app.c:471
#define LOG_WARNING
Definition: logger.h:274
#define ast_strlen_zero(foo)
Definition: strings.h:52
#define ast_log
Definition: astobj2.c:42
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
char * usage
Definition: utils/frame.c:37
int ast_check_timing(const struct ast_timing *i)
Evaluate a pre-constructed bitmap as to whether the current time falls within the range specified...
Definition: extconf.c:4002
int ast_destroy_timing(struct ast_timing *i)
Deallocates memory structures associated with a timing bitmap.
Definition: pbx_timing.c:285
int ast_build_timing(struct ast_timing *i, const char *info)
Construct a timing bitmap, for use in time-based conditionals.
Definition: extconf.c:3808
char * strsep(char **str, const char *delims)
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
ast_app: A registered application
Definition: pbx_app.c:45
struct ast_app * pbx_findapp(const char *app)
Look up an application.
Definition: ael_main.c:165
static const char app[]
Definition: app_mysql.c:62

◆ pbx_builtin_goto()

static int pbx_builtin_goto ( struct ast_channel chan,
const char *  data 
)
static

Goto

Definition at line 894 of file pbx_builtins.c.

References ast_channel_context(), ast_channel_exten(), ast_channel_priority(), ast_parseable_goto(), and ast_verb.

Referenced by pbx_builtin_gotoif(), and pbx_builtin_gotoiftime().

895 {
896  int res = ast_parseable_goto(chan, data);
897  if (!res)
898  ast_verb(3, "Goto (%s,%s,%d)\n", ast_channel_context(chan), ast_channel_exten(chan), ast_channel_priority(chan) + 1);
899  return res;
900 }
int ast_channel_priority(const struct ast_channel *chan)
#define ast_verb(level,...)
Definition: logger.h:463
int ast_parseable_goto(struct ast_channel *chan, const char *goto_string)
Definition: pbx.c:8859
const char * ast_channel_exten(const struct ast_channel *chan)
const char * ast_channel_context(const struct ast_channel *chan)

◆ pbx_builtin_gotoiftime()

static int pbx_builtin_gotoiftime ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 905 of file pbx_builtins.c.

References ast_build_timing(), ast_channel_lock, ast_channel_unlock, ast_check_timing2(), ast_debug, ast_destroy_timing(), ast_log, ast_strdupa, ast_strlen_zero, ast_tvnow(), LOG_WARNING, NULL, pbx_builtin_getvar_helper(), pbx_builtin_goto(), pbx_builtin_setvar_helper(), and strsep().

906 {
907  char *s, *ts, *branch1, *branch2, *branch;
908  struct ast_timing timing;
909  const char *ctime;
910  struct timeval tv = ast_tvnow();
911  long timesecs;
912 
913  if (!chan) {
914  ast_log(LOG_WARNING, "GotoIfTime requires a channel on which to operate\n");
915  return -1;
916  }
917 
918  if (ast_strlen_zero(data)) {
919  ast_log(LOG_WARNING, "GotoIfTime requires an argument:\n <time range>,<days of week>,<days of month>,<months>[,<timezone>]?'labeliftrue':'labeliffalse'\n");
920  return -1;
921  }
922 
923  ts = s = ast_strdupa(data);
924 
925  ast_channel_lock(chan);
926  if ((ctime = pbx_builtin_getvar_helper(chan, "TESTTIME")) && sscanf(ctime, "%ld", &timesecs) == 1) {
927  tv.tv_sec = timesecs;
928  } else if (ctime) {
929  ast_log(LOG_WARNING, "Using current time to evaluate\n");
930  /* Reset when unparseable */
931  pbx_builtin_setvar_helper(chan, "TESTTIME", NULL);
932  }
933  ast_channel_unlock(chan);
934 
935  /* Separate the Goto path */
936  strsep(&ts, "?");
937  branch1 = strsep(&ts,":");
938  branch2 = strsep(&ts,"");
939 
940  /* struct ast_include include contained garbage here, fixed by zeroing it on get_timerange */
941  if (ast_build_timing(&timing, s) && ast_check_timing2(&timing, tv)) {
942  branch = branch1;
943  } else {
944  branch = branch2;
945  }
946  ast_destroy_timing(&timing);
947 
948  if (ast_strlen_zero(branch)) {
949  ast_debug(1, "Not taking any branch\n");
950  return 0;
951  }
952 
953  return pbx_builtin_goto(chan, branch);
954 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
int ast_check_timing2(const struct ast_timing *i, const struct timeval tv)
Evaluate a pre-constructed bitmap as to whether a particular time falls within the range specified...
Definition: pbx_timing.c:251
#define LOG_WARNING
Definition: logger.h:274
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
Definition: time.h:150
#define NULL
Definition: resample.c:96
const char * pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name)
Return a pointer to the value of the corresponding channel variable.
#define ast_strlen_zero(foo)
Definition: strings.h:52
#define ast_debug(level,...)
Log a DEBUG message.
Definition: logger.h:452
#define ast_log
Definition: astobj2.c:42
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
int ast_destroy_timing(struct ast_timing *i)
Deallocates memory structures associated with a timing bitmap.
Definition: pbx_timing.c:285
#define ast_channel_unlock(chan)
Definition: channel.h:2946
int ast_build_timing(struct ast_timing *i, const char *info)
Construct a timing bitmap, for use in time-based conditionals.
Definition: extconf.c:3808
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name...
char * strsep(char **str, const char *delims)
static int pbx_builtin_goto(struct ast_channel *chan, const char *data)
Definition: pbx_builtins.c:894

◆ pbx_builtin_hangup()

static int pbx_builtin_hangup ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 859 of file pbx_builtins.c.

References AST_CAUSE_NORMAL_CLEARING, ast_channel_hangupcause(), ast_channel_hangupcause_set(), ast_channel_lock, ast_channel_unlock, ast_log, ast_set_hangupsource(), AST_SOFTHANGUP_EXPLICIT, ast_softhangup_nolock(), ast_str2cause(), ast_strlen_zero, and LOG_WARNING.

860 {
861  int cause;
862 
863  ast_set_hangupsource(chan, "dialplan/builtin", 0);
864 
865  if (!ast_strlen_zero(data)) {
866  cause = ast_str2cause(data);
867  if (cause <= 0) {
868  if (sscanf(data, "%30d", &cause) != 1 || cause <= 0) {
869  ast_log(LOG_WARNING, "Invalid cause given to Hangup(): \"%s\"\n", data);
870  cause = 0;
871  }
872  }
873  } else {
874  cause = 0;
875  }
876 
877  ast_channel_lock(chan);
878  if (cause <= 0) {
879  cause = ast_channel_hangupcause(chan);
880  if (cause <= 0) {
882  }
883  }
884  ast_channel_hangupcause_set(chan, cause);
886  ast_channel_unlock(chan);
887 
888  return -1;
889 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
void ast_channel_hangupcause_set(struct ast_channel *chan, int value)
#define LOG_WARNING
Definition: logger.h:274
#define ast_strlen_zero(foo)
Definition: strings.h:52
#define ast_log
Definition: astobj2.c:42
void ast_set_hangupsource(struct ast_channel *chan, const char *source, int force)
Set the source of the hangup in this channel and it&#39;s bridge.
Definition: channel.c:2504
#define AST_CAUSE_NORMAL_CLEARING
Definition: causes.h:105
int ast_softhangup_nolock(struct ast_channel *chan, int reason)
Softly hangup up a channel (no channel lock)
Definition: channel.c:2463
#define ast_channel_unlock(chan)
Definition: channel.h:2946
int ast_channel_hangupcause(const struct ast_channel *chan)
int ast_str2cause(const char *name) attribute_pure
Convert the string form of a cause code to a number.
Definition: channel.c:625

◆ pbx_builtin_proceeding()

static int pbx_builtin_proceeding ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 712 of file pbx_builtins.c.

References AST_CONTROL_PROCEEDING, and ast_indicate().

713 {
715  return 0;
716 }
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322

◆ pbx_builtin_progress()

static int pbx_builtin_progress ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 721 of file pbx_builtins.c.

References AST_CONTROL_PROGRESS, and ast_indicate().

722 {
724  return 0;
725 }
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322

◆ pbx_builtin_ringing()

static int pbx_builtin_ringing ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 730 of file pbx_builtins.c.

References AST_CONTROL_RINGING, and ast_indicate().

731 {
733  return 0;
734 }
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322

◆ pbx_builtin_setamaflags()

static int pbx_builtin_setamaflags ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 831 of file pbx_builtins.c.

References amaflags, ast_channel_amaflags_set(), ast_channel_lock, ast_channel_name(), ast_channel_string2amaflag(), ast_channel_unlock, ast_log, AST_LOG_WARNING, and ast_strlen_zero.

832 {
833  ast_log(AST_LOG_WARNING, "The SetAMAFlags application is deprecated. Please use the CHANNEL function instead.\n");
834 
835  if (ast_strlen_zero(data)) {
836  ast_log(AST_LOG_WARNING, "No parameter passed to SetAMAFlags\n");
837  return 0;
838  }
839  /* Copy the AMA Flags as specified */
840  ast_channel_lock(chan);
841  if (isdigit(data[0])) {
842  int amaflags;
843  if (sscanf(data, "%30d", &amaflags) != 1) {
844  ast_log(AST_LOG_WARNING, "Unable to set AMA flags on channel %s\n", ast_channel_name(chan));
845  ast_channel_unlock(chan);
846  return 0;
847  }
848  ast_channel_amaflags_set(chan, amaflags);
849  } else {
851  }
852  ast_channel_unlock(chan);
853  return 0;
854 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
static int amaflags
Definition: chan_iax2.c:431
#define AST_LOG_WARNING
Definition: logger.h:279
#define ast_strlen_zero(foo)
Definition: strings.h:52
enum ama_flags ast_channel_string2amaflag(const char *flag)
Convert a string to a detail record AMA flag.
Definition: channel.c:4405
#define ast_log
Definition: astobj2.c:42
void ast_channel_amaflags_set(struct ast_channel *chan, enum ama_flags value)
#define ast_channel_unlock(chan)
Definition: channel.h:2946
const char * ast_channel_name(const struct ast_channel *chan)

◆ pbx_builtin_wait()

static int pbx_builtin_wait ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 1013 of file pbx_builtins.c.

References ast_app_parse_timelen(), ast_safe_sleep(), and TIMELEN_SECONDS.

1014 {
1015  int ms;
1016 
1017  /* Wait for "n" seconds */
1018  if (!ast_app_parse_timelen(data, &ms, TIMELEN_SECONDS) && ms > 0) {
1019  return ast_safe_sleep(chan, ms);
1020  }
1021  return 0;
1022 }
int ast_safe_sleep(struct ast_channel *chan, int ms)
Wait for a specified amount of time, looking for hangups.
Definition: channel.c:1574
int ast_app_parse_timelen(const char *timestr, int *result, enum ast_timelen defunit)
Common routine to parse time lengths, with optional time unit specifier.
Definition: main/app.c:3113

◆ pbx_builtin_waitdigit()

static int pbx_builtin_waitdigit ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 1027 of file pbx_builtins.c.

References args, AST_APP_ARG, ast_app_parse_timelen(), AST_DECLARE_APP_ARGS, AST_DIGIT_ANY, AST_STANDARD_APP_ARGS, ast_strdupa, ast_waitfordigit_full(), parse(), pbx_builtin_setvar_helper(), S_OR, TIMELEN_SECONDS, and timeout.

1028 {
1029  int res;
1030  int ms;
1031  char *parse;
1034  AST_APP_ARG(digits);
1035  );
1036 
1037  parse = ast_strdupa(data);
1038  AST_STANDARD_APP_ARGS(args, parse);
1039 
1040  if (ast_app_parse_timelen(args.timeout, &ms, TIMELEN_SECONDS) || ms < 0) {
1041  pbx_builtin_setvar_helper(chan, "WAITDIGITSTATUS", "ERROR");
1042  return 0;
1043  }
1044 
1045  /* Wait for "n" seconds */
1046  res = ast_waitfordigit_full(chan, ms, S_OR(args.digits, AST_DIGIT_ANY), -1, -1);
1047  if (res < 0) {
1048  pbx_builtin_setvar_helper(chan, "WAITDIGITSTATUS", "CANCEL");
1049  return -1;
1050  }
1051 
1052  if (res == 0) {
1053  pbx_builtin_setvar_helper(chan, "WAITDIGITSTATUS", "TIMEOUT");
1054  } else {
1055  char key[2];
1056 
1057  snprintf(key, sizeof(key), "%c", res);
1058  pbx_builtin_setvar_helper(chan, "WAITDIGITRESULT", key);
1059  pbx_builtin_setvar_helper(chan, "WAITDIGITSTATUS", "DTMF");
1060  }
1061 
1062  return 0;
1063 }
#define AST_DIGIT_ANY
Definition: file.h:48
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
static int timeout
Definition: cdr_mysql.c:86
const char * args
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name...
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
int ast_app_parse_timelen(const char *timestr, int *result, enum ast_timelen defunit)
Common routine to parse time lengths, with optional time unit specifier.
Definition: main/app.c:3113
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
int ast_waitfordigit_full(struct ast_channel *c, int ms, const char *breakon, int audiofd, int ctrlfd)
Wait for a digit Same as ast_waitfordigit() with audio fd for outputting read audio and ctrlfd to mon...
Definition: channel.c:3248
#define AST_APP_ARG(name)
Define an application argument.

◆ pbx_builtin_waitexten()

static int pbx_builtin_waitexten ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 1068 of file pbx_builtins.c.

References args, AST_APP_ARG, ast_app_parse_options(), ast_app_parse_timelen(), ast_channel_caller(), ast_channel_context(), ast_channel_exten(), ast_channel_name(), ast_channel_pbx(), ast_channel_priority(), ast_channel_zone(), ast_check_hangup(), AST_CONTROL_HOLD, AST_CONTROL_UNHOLD, AST_DECLARE_APP_ARGS, ast_exists_extension(), ast_get_indication_tone(), ast_indicate(), ast_indicate_data(), ast_log, ast_playtones_start(), ast_playtones_stop(), AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero, ast_test_flag, ast_tone_zone_sound_unref(), ast_tonepair_start(), ast_verb, ast_waitfordigit(), ast_tone_zone_sound::data, LOG_WARNING, NULL, options, parse(), raise_exception(), ast_pbx::rtimeoutms, S_COR, S_OR, set_ext_pri(), TIMELEN_SECONDS, timeout, WAITEXTEN_DIALTONE, WAITEXTEN_MOH, and waitexten_opts.

1069 {
1070  int ms, res;
1071  struct ast_flags flags = {0};
1072  char *opts[1] = { NULL };
1073  char *parse;
1077  );
1078 
1079  if (!ast_strlen_zero(data)) {
1080  parse = ast_strdupa(data);
1081  AST_STANDARD_APP_ARGS(args, parse);
1082  } else
1083  memset(&args, 0, sizeof(args));
1084 
1085  if (args.options)
1086  ast_app_parse_options(waitexten_opts, &flags, opts, args.options);
1087 
1088  if (ast_test_flag(&flags, WAITEXTEN_MOH) && !opts[0] ) {
1089  ast_log(LOG_WARNING, "The 'm' option has been specified for WaitExten without a class.\n");
1090  } else if (ast_test_flag(&flags, WAITEXTEN_MOH)) {
1091  ast_indicate_data(chan, AST_CONTROL_HOLD, S_OR(opts[0], NULL),
1092  !ast_strlen_zero(opts[0]) ? strlen(opts[0]) + 1 : 0);
1093  } else if (ast_test_flag(&flags, WAITEXTEN_DIALTONE)) {
1094  struct ast_tone_zone_sound *ts = ast_get_indication_tone(ast_channel_zone(chan), "dial");
1095  if (ts) {
1096  ast_playtones_start(chan, 0, ts->data, 0);
1097  ts = ast_tone_zone_sound_unref(ts);
1098  } else {
1099  ast_tonepair_start(chan, 350, 440, 0, 0);
1100  }
1101  }
1102  /* Wait for "n" seconds */
1103  if (!ast_app_parse_timelen(args.timeout, &ms, TIMELEN_SECONDS) && ms > 0) {
1104  /* Yay! */
1105  } else if (ast_channel_pbx(chan)) {
1106  ms = ast_channel_pbx(chan)->rtimeoutms;
1107  } else {
1108  ms = 10000;
1109  }
1110 
1111  res = ast_waitfordigit(chan, ms);
1112  if (!res) {
1113  if (ast_check_hangup(chan)) {
1114  /* Call is hungup for some reason. */
1115  res = -1;
1116  } else if (ast_exists_extension(chan, ast_channel_context(chan), ast_channel_exten(chan), ast_channel_priority(chan) + 1,
1117  S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
1118  ast_verb(3, "Timeout on %s, continuing...\n", ast_channel_name(chan));
1119  } else if (ast_exists_extension(chan, ast_channel_context(chan), "t", 1,
1120  S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
1121  ast_verb(3, "Timeout on %s, going to 't'\n", ast_channel_name(chan));
1122  set_ext_pri(chan, "t", 0); /* 0 will become 1, next time through the loop */
1123  } else if (ast_exists_extension(chan, ast_channel_context(chan), "e", 1,
1124  S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
1125  raise_exception(chan, "RESPONSETIMEOUT", 0); /* 0 will become 1, next time through the loop */
1126  } else {
1127  ast_log(LOG_WARNING, "Timeout but no rule 't' or 'e' in context '%s'\n",
1128  ast_channel_context(chan));
1129  res = -1;
1130  }
1131  }
1132 
1133  if (ast_test_flag(&flags, WAITEXTEN_MOH))
1135  else if (ast_test_flag(&flags, WAITEXTEN_DIALTONE))
1136  ast_playtones_stop(chan);
1137 
1138  return res;
1139 }
struct ast_party_caller * ast_channel_caller(struct ast_channel *chan)
#define ast_test_flag(p, flag)
Definition: utils.h:63
int ast_indicate(struct ast_channel *chan, int condition)
Indicates condition of channel.
Definition: channel.c:4322
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
#define LOG_WARNING
Definition: logger.h:274
static int timeout
Definition: cdr_mysql.c:86
unsigned int flags
Definition: utils.h:200
struct ast_tone_zone * ast_channel_zone(const struct ast_channel *chan)
int ast_indicate_data(struct ast_channel *chan, int condition, const void *data, size_t datalen)
Indicates condition of channel, with payload.
Definition: channel.c:4698
#define WAITEXTEN_MOH
Definition: pbx_builtins.c:695
const char * args
void ast_playtones_stop(struct ast_channel *chan)
Stop playing tones on a channel.
Definition: indications.c:393
#define NULL
Definition: resample.c:96
int ast_channel_priority(const struct ast_channel *chan)
#define ast_verb(level,...)
Definition: logger.h:463
#define ast_strlen_zero(foo)
Definition: strings.h:52
Number structure.
Definition: app_followme.c:154
#define ast_log
Definition: astobj2.c:42
int raise_exception(struct ast_channel *chan, const char *reason, int priority)
Definition: pbx.c:2806
struct ast_pbx * ast_channel_pbx(const struct ast_channel *chan)
#define S_COR(a, b, c)
returns the equivalent of logic or for strings, with an additional boolean check: second one if not e...
Definition: strings.h:85
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
static struct ast_tone_zone_sound * ast_tone_zone_sound_unref(struct ast_tone_zone_sound *ts)
Release a reference to an ast_tone_zone_sound.
Definition: indications.h:227
int ast_exists_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid)
Determine whether an extension exists.
Definition: pbx.c:4179
int ast_app_parse_options(const struct ast_app_option *options, struct ast_flags *flags, char **args, char *optstr)
Parses a string containing application options and sets flags/arguments.
Definition: main/app.c:2906
const char * ast_channel_exten(const struct ast_channel *chan)
int ast_check_hangup(struct ast_channel *chan)
Check to see if a channel is needing hang up.
Definition: channel.c:445
void set_ext_pri(struct ast_channel *c, const char *exten, int pri)
Definition: pbx.c:4268
Description of a tone.
Definition: indications.h:35
struct ast_tone_zone_sound * ast_get_indication_tone(const struct ast_tone_zone *zone, const char *indication)
Locate a tone zone sound.
Definition: indications.c:455
static const struct ast_app_option waitexten_opts[128]
Definition: pbx_builtins.c:701
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
Structure used to handle boolean flags.
Definition: utils.h:199
int ast_waitfordigit(struct ast_channel *c, int ms)
Waits for a digit.
Definition: channel.c:3184
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
const char * ast_channel_name(const struct ast_channel *chan)
int ast_playtones_start(struct ast_channel *chan, int vol, const char *tonelist, int interruptible)
Start playing a list of tones on a channel.
Definition: indications.c:302
int ast_tonepair_start(struct ast_channel *chan, int freq1, int freq2, int duration, int vol)
Definition: channel.c:7682
const char * ast_channel_context(const struct ast_channel *chan)
const char * data
Description of a tone.
Definition: indications.h:52
static struct test_options options
int ast_app_parse_timelen(const char *timestr, int *result, enum ast_timelen defunit)
Common routine to parse time lengths, with optional time unit specifier.
Definition: main/app.c:3113
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
#define WAITEXTEN_DIALTONE
Definition: pbx_builtins.c:696
#define AST_APP_ARG(name)
Define an application argument.
int rtimeoutms
Definition: pbx.h:213