[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