/*! * \ingroup applications */ int indicate_congestion(struct ast_channel *chan, const char *data) { ast_indicate(chan, AST_CONTROL_CONGESTION); /* Don't change state of an UP channel, just indicate congestion in audio */ ast_channel_lock(chan); if (ast_channel_state(chan) != AST_STATE_UP) { ast_channel_hangupcause_set(chan, AST_CAUSE_CONGESTION); ast_setstate(chan, AST_STATE_BUSY); } ast_channel_unlock(chan); wait_for_hangup(chan, data); return -1; }
static int expect(char *str, int fn) { char *bptr, *sptr; char buf[BUFSIZ]; bptr = buf; for (sptr = str; *sptr; sptr++) { if (*sptr == '\\') { switch (*++sptr) { case 'H': *bptr++ = '\0'; if (expect_str(buf, fn) == FAIL) { return (FAIL); } if (wait_for_hangup(fn) == FAIL) { return (FAIL); } bptr = buf; continue; case '\\': *bptr++ = '\\'; continue; default: *bptr++ = '\\'; *bptr++ = *sptr; continue; } } else *bptr++ = *sptr; } *bptr = '\0'; if (expect_str(buf, fn) == FAIL) { return (FAIL); } return (0); }