[sisyphus] продолжение истории с slmodem и kppp
Artem
=?iso-8859-1?q?u2u_=CE=C1_nm=2Eru?=
Ср Сен 21 01:09:06 MSD 2005
Artem wrote:
> Доброго времени суток.
> Напомню, что проблема состояла в том, что по нажатии кнопки 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.
Ну что же. Раз все молчат - буду писать в Bugzilla :-)
>
> Основная же проблема решается 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
>
Добавил и туда, и туда. В первом случае - hangup отрабатывается по
нажатию disconnect, во втором- когда убивается pppd (проверял kill-ом)
>
> P.S. kdenetwork-kppp-3.4.1-alt1
>
P.P.S. Патч тоже постить в bugzilla ?
Подробная информация о списке рассылки Sisyphus