From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <432DE7C3.5010808@nm.ru> Date: Mon, 19 Sep 2005 01:18:43 +0300 From: Artem User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050719) X-Accept-Language: en-us, en MIME-Version: 1.0 To: ALT Linux Sisyphus discussion list Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Subject: [sisyphus] =?koi8-r?b?0NLPxM/M1sXOycUgydPUz9LJySDTIHNsbW9kZW0g?= =?koi8-r?b?ySBrcHBw?= X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux Sisyphus discussion list List-Id: ALT Linux Sisyphus discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Sep 2005 22:19:21 -0000 Archived-At: List-Archive: Доброго времени суток. Напомню, что проблема состояла в том, что по нажатии кнопки 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 kppp: Received a SIGUSR1 P.S. kdenetwork-kppp-3.4.1-alt1 С уважением. Артем.