示例#1
0
/*!
 * \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;
}
示例#2
0
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);
}