[sisyphus] продолжение истории с slmodem и kppp
Artem
=?iso-8859-1?q?u2u_=CE=C1_nm=2Eru?=
Пн Сен 19 02:18:43 MSD 2005
Доброго времени суток.
Напомню, что проблема состояла в том, что по нажатии кнопки disconnect в
kppp,
демон pppd умирал, но kppp не вешал трубку.
После сегодняшних упражнений выяснил, что ,при дисконнекте, чтобы
повесить трубку модема,
необходимо сделать что-то вроде
echo "ATH" > /dev/ttySLM0
Одна из грабель по этому поводу (обнаруженная позднее). В дефолтных
настройках kppp
строка hangup выглядит так: "+++ATH". Но slmodem такую строку не
принимает (проверял вручную
из терминала kppp). Slmodem после +++ выдает OK, после чего можно делать
ATH. Но если же сделать
+++ATH - то никакой ответной реакции не будет. Ковыряние в исходниках
показало, что HANGUP в kppp
выполняется в 2 приема - сначала выполняется строка escape "+++" -
затем, когда модем оказывается в
командном режиме - выполняется непосредственно "ATH". Подозреваю, что
"+++ATH" в качестве hangup -
не совсем корректная вещь? Данная строка дефолтная и содержится в
pppdata.cpp, линия 759
const QString PPPData::modemHangupStr()
{
return readConfig(cmodemgroup, HANGUPSTR_KEY,
"+++ATH");
}
Просьба community проверить подобное поведение на своих slmodem.
Основная же проблема решается 2-мя способами, но какой из них правильнее
- я не знаю, поэтому спрашиваю совета.
1. Добавление
if(Modem::modem->opentty())
Modem::modem->hangup() ;
в метод
void KPPPWidget::delayedDisconnect() {
// this is where the actual disconnection takes place
(файл kpppwidget.cpp)
2. Добавление
if(Modem::modem->opentty())
Modem::modem->hangup() ;
в обработчик сигнала
void KPPPWidget::sigPPPDDied() {
kdDebug(5002) << "Received a SIGUSR1" << endl;
(тот же файл)
Вот собственно - и вопрос: в каком случае более правильное исправление?
В обработчике нажатия клавиши disconnect ? Или в обработчике сигнала,
уведомляющего о том, что pppd - "сдох" (посылается сигнал SIGUSR1). ?
Насколько я понимаю - SIGUSR1 посылает "рутовая" часть kppp -
пользовательской ? В debug log при этом след. сообщения:
It was pppd that died
pppd exited with return value 16
Sending 28779 a SIGUSR1
<skip>
kppp: Received a SIGUSR1
P.S. kdenetwork-kppp-3.4.1-alt1
С уважением. Артем.
Подробная информация о списке рассылки Sisyphus