Команда RECORD имеет опцию "y", завершающую запись при получении любого DTMF-кода. При этом переменная RECORD_STATUS принимает значение "DTMF". Сам набранный абонентом код нигде не фиксируется. Исправляем эту ситуацию.
Открываем код команды "../apps/app_record.c". Установка опции "y" проверяется в функции record_dtmf_response. При включенной опции, функция устанавливает переменную dtmf_response в значение RESPONSE_DTMF (строка 181). Алгоритм действия при получении DTMF кода от абонента начинается со строки 463. Если значение dtmf_response равно RESPONSE_DTMF, то заполняется переменная status_response, которая потом будет использована для заполнения RECORD_STATUS.
case RESPONSE_DTMF:
status_response = "DTMF";
ast_debug(1, "Got DTMF\n");
break;
char status_response_dtmf[10];
Далее в соответствующем разделе пишем следующее:
case RESPONSE_DTMF:
sprintf(status_response_dtmf, "DTMF %c", f->subclass.integer);
status_response = status_response_dtmf;
ast_debug(1, "Got DTMF %c\n", f->subclass.integer);
break;
Т.е. сначала формируем значение status_response_dtmf из строки "DTMF " и DTMF-кода. Формат %c, потому что DTMF-код хранится в переменной типа int в виде ASCII кода.
После пересборки имеем в RECORD_STATUS (при включенной опции "y") значение вида "DTMF 3", если абонент прервал запись нажатием "3".
Комментариев нет:
Отправить комментарий