Продолжаем мучать app_record.c
Задача: отловить набор внутреннего номера. Номера начинаются с "4".
Т.е. нужно прервать запись только по нажатию "4", и сообщить об этом факте.
Добавим опцию "e" в приложение Record. Для этого:
строка 43: вносим описание опции в раздел DOCUMENTATION
строка 128: добавляем переменную с нужной нам цифрой
#define LOCAL_EXTEN_KEY '4'
строка 132: добавляем нашу опцию
enum {
OPTION_APPEND = (1 << 0),
OPTION_CALL_EXTEN = (1 << 1),
OPTION_NOANSWER = (1 << 2),
строка 146: добавляем наш ответ
enum dtmf_response {
RESPONSE_NO_MATCH = 0,
RESPONSE_OPERATOR,
RESPONSE_DTMF,
RESPONSE_LOCAL_EXTEN,
};
строка 153: добавляем ключ вызова опции
AST_APP_OPTIONS(app_opts,{
AST_APP_OPTION('a', OPTION_APPEND),
AST_APP_OPTION('e', OPTION_CALL_EXTEN),
строка 172: добавляем условие срабатывания
struct ast_flags *flags, int dtmf_integer, int terminator)
{
...
if ((dtmf_integer == LOCAL_EXTEN_KEY) &&
ast_test_flag(flags, OPTION_CALL_EXTEN))) {
return RESPONSE_LOCAL_EXTEN;
}
строка 477: добавляем условие возврата нужного значения переменной RECORD_STATUS
switch(rc) {
...
case RESPONSE_LOCAL_EXTEN:
status_response = "LOCAL";
ast_debug(1, "Got local exten DTMF 4\n");
break;
Теперь при нажатии "4" запись будет прерываться, а RECORD_STATUS пример значение LOCAL.
Комментариев нет:
Отправить комментарий