Все тот же Callback в kppp (собсно САБЖ)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
B@RT
Сообщения: 116

Все тот же Callback в kppp

Сообщение B@RT »

Народ, помогите, намаялса я с этим callback'ом. Как может уже все заметили, что присоединитса на сервак провайдера под Windows'ом с callback'ом невозможно. Я опишу что я дклал, а вы меня поправите и укажите на мои ошибки и есно выскажите свое мнение....

-Сначало я скачал исходникик pppd и скомпилил их с поддержкой cbcs... или что-то в этом роде, я не помню.... :( Вобщем скомпилил. Откапал в инете наверное 15-20 разных скриптов для подключения. Нифига. Часто мой модем вообще не хотел звонить.
-Нашел патч на kppp для подключения с калбеком. Стал компилить и заметил, что патч для kppp из kde 3.2, а у меня kde 3.1. Есно ничего я не скомпили. Скачал с сайта kde kdeNETWORK 3.2. Хотел поставить, а ему видетели нужен полностью весь kde. Блин, мне его пол года качать надо будет (это я перегнул... :) ).
-Плюнул на все и решил скачать альтернативу, какой нить другой диллер. Нашел xisp. Да, вроде ничего, но он падла звонить не хочет.... Как мне его настроить? В инете доков на него почти нету....

Может кто даст какой-нить путевый совет. Одно но! есть ли решения выхода в инете без скриптов, а то это примитив (для меня)....
Спасибо сказали:
Аватара пользователя
B@RT
Сообщения: 116

Re: Все тот же Callback в kppp

Сообщение B@RT »

Спасибо народу за то, что помогли решить мне эту проблему... Незнаю, чтобы я без вас делал....! Блин, хоть бы ссылочку дали...

Вот патч на kppp из пакета kdeNETWORK-3.2. Дамаю как ставить патчи, знают все....
----------------

Код: Выделить всё

diff -urN kdenetwork-3.2.1.orig/kppp/cbtype.h kdenetwork-3.2.1/kppp/cbtype.h
--- kdenetwork-3.2.1.orig/kppp/cbtype.h    1970-01-01 03:00:00.000000000 +0300
+++ kdenetwork-3.2.1/kppp/cbtype.h    2004-04-16 02:01:04.745373912 +0300
@@ -0,0 +1,8 @@
+#ifndef __CBTYPE__H__
+#define __CBTYPE__H__
+
+#define CBTYPE_NONE     0
+#define CBTYPE_ADMIN    1
+#define CBTYPE_USER     2
+
+#endif
diff -urN kdenetwork-3.2.1.orig/kppp/connect.cpp kdenetwork-3.2.1/kppp/connect.cpp
--- kdenetwork-3.2.1.orig/kppp/connect.cpp    2003-09-02 16:58:35.000000000 +0300
+++ kdenetwork-3.2.1/kppp/connect.cpp    2004-04-16 02:01:04.747373608 +0300
@@ -62,6 +62,7 @@
 #endif

 #include "auth.h"
+#include "cbtype.h"
 #include "connect.h"
 #include "docking.h"
 #include "main.h"
@@ -353,7 +354,7 @@

   if(vmain == 4) {
     if(!expecting) {
-      if(!gpppdata.waitForDialTone()) {
+      if(!gpppdata.waitForDialTone() || gpppdata.waitCallback()) {
     QString msg = i18n("Turning off dial tone waiting...");
     messg->setText(msg);
     emit debugMessage(msg);
@@ -372,6 +373,15 @@
       timeout_timer->stop();
       timeout_timer->start(gpppdata.modemTimeout()*1000);

+      if(gpppdata.waitCallback()) {
+        QString msg = i18n("Waiting for callback...");
+        messg->setText(msg);
+        emit debugMessage(msg);
+        setExpect(gpppdata.modemRingResp());
+        vmain = 102;
+        return;
+      }
+
       QStringList &plist = gpppdata.phonenumbers();
       QString bmarg= gpppdata.dialPrefix();
       bmarg += *plist.at(dialnumber);
@@ -424,6 +434,7 @@
       Modem::modem->setDataMode(false);
       vmain = 0;
       substate = -1;
+      gpppdata.setWaitCallback(false);
       return;
     }

@@ -433,6 +444,7 @@
       messg->setText(i18n("No Dial Tone"));
       vmain = 20;
       Modem::modem->unlockdevice();
+      gpppdata.setWaitCallback(false);
       return;
     }

@@ -442,6 +454,7 @@
       messg->setText(i18n("No Carrier"));
       vmain = 20;
       Modem::modem->unlockdevice();
+      gpppdata.setWaitCallback(false);
       return;
     }

@@ -458,6 +471,7 @@
                               "Do NOT connect this modem to a digital phone "
                   "line or the modem could get permanently "
                   "damaged"));
+      gpppdata.setWaitCallback(false);
       return;
     }

@@ -477,6 +491,16 @@
       return;
     }
   }
+
+  // send answer on callback phase
+  if(vmain == 102) {
+    if(!expecting) {
+      writeline(gpppdata.modemAnswerStr());
+      setExpect(gpppdata.modemConnectResp());
+      vmain = 100;
+      return;
+    }
+  }

   // execute the script
   if(vmain == 2) {
@@ -877,6 +901,7 @@
     // starting pppd wasn't successful. Error messages were
     // handled by execppp();
     if_timeout_timer->stop();
+
     this->hide();
     messg->setText("");
     p_kppp->quit_b->setFocus();
@@ -897,6 +922,7 @@
   // this is a "wait until cancel" entry

   if(vmain == 20) {
+    gpppdata.setWaitCallback(false);
   }
 }

@@ -985,6 +1011,7 @@


 void ConnectWidget::cancelbutton() {
+  gpppdata.setWaitCallback(false);
   Modem::modem->stop();
   killTimer(main_timer_ID);
   timeout_timer->stop();
@@ -1229,6 +1256,19 @@
   {
     command += " " + *it;
   }
+
+  // Callback settings
+  if(gpppdata.callbackType() && !gpppdata.waitCallback()) {
+    if(!gpppdata.pppdVersionMin(2,4,2)) {
+      command += " +callback";
+      if(gpppdata.callbackType() == CBTYPE_USER)
+        command += " callback " + gpppdata.callbackPhone();
+    } else {
+      command += " callback ";
+      command += (gpppdata.callbackType() == CBTYPE_ADMIN ? "0" : gpppdata.callbackPhone());
+    }
+  } else
+    gpppdata.setWaitCallback(false);

   // PAP settings
   if(gpppdata.authMethod() == AUTH_PAP) {
@@ -1262,7 +1302,7 @@
   }

   kapp->flushX();
-
+
   return Requester::rq->execPPPDaemon(command);
 }

diff -urN kdenetwork-3.2.1.orig/kppp/edit.cpp kdenetwork-3.2.1/kppp/edit.cpp
--- kdenetwork-3.2.1.orig/kppp/edit.cpp    2003-05-15 18:33:54.000000000 +0300
+++ kdenetwork-3.2.1/kppp/edit.cpp    2004-04-16 02:01:04.748373456 +0300
@@ -43,11 +43,12 @@
 #include "newwidget.h"
 #include "iplined.h"
 #include "auth.h"
+#include "cbtype.h"

 DialWidget::DialWidget( QWidget *parent, bool isnewaccount, const char *name )
   : QWidget(parent, name)
 {
-  const int GRIDROWS = 6;
+  const int GRIDROWS = 8;

   QGridLayout *tl = new QGridLayout(parent, GRIDROWS, 2, 0, KDialog::spacingHint());

@@ -150,10 +151,38 @@
                "plain text in the config file, which is\n"
                "readable only to you. Make sure nobody\n"
                "gains access to this file!"));
-
+
+  cbtype_l = new QLabel(i18n("&Callback type:"), parent);
+  tl->addWidget(cbtype_l, 5, 0);
+
+  cbtype = new QComboBox(parent);
+  cbtype_l->setBuddy(cbtype);
+  cbtype->insertItem(i18n("None"));
+  cbtype->insertItem(i18n("Administrator-defined"));
+  cbtype->insertItem(i18n("User-defined"));
+  connect(cbtype, SIGNAL(highlighted(int)),
+      this, SLOT(cbtypeChanged(int)));
+  tl->addWidget(cbtype, 5, 1);
+  tmp = i18n("Callback type");
+
+  QWhatsThis::add(cbtype_l,tmp);
+  QWhatsThis::add(cbtype,tmp);
+
+  cbphone_l = new QLabel(i18n("Call&back number:"), parent);
+  tl->addWidget(cbphone_l, 6, 0);
+
+  cbphone = new QLineEdit(parent);
+  cbphone_l->setBuddy(cbphone);
+  cbphone->setMaxLength(14);
+  tl->addWidget(cbphone, 6, 1);
+  tmp = i18n("Callback phone number");
+
+  QWhatsThis::add(cbphone_l,tmp);
+  QWhatsThis::add(cbphone,tmp);
+
   pppdargs = new QPushButton(i18n("Customize &pppd Arguments..."), parent);
   connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton()));
-  tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter);
+  tl->addMultiCellWidget(pppdargs, 7, 7, 0, 1, AlignCenter);

   // Set defaults if editing an existing connection
   if(!isnewaccount) {
@@ -177,11 +206,16 @@

     auth->setCurrentItem(gpppdata.authMethod());
     store_password->setChecked(gpppdata.storePassword());
+    cbtype->setCurrentItem(gpppdata.callbackType());
+    cbphone->setText(gpppdata.callbackPhone());
   } else {
     // select PAP/CHAP as default
     auth->setCurrentItem(AUTH_PAPCHAP);
+    // select NONE as default
+    cbtype->setCurrentItem(CBTYPE_NONE);
   }

+  emit cbtypeChanged(cbtype->currentItem());
   numbersChanged();
   tl->activate();
 }
@@ -205,6 +239,8 @@
     gpppdata.setPhonenumber(number);
     gpppdata.setAuthMethod(auth->currentItem());
     gpppdata.setStorePassword(store_password->isChecked());
+    gpppdata.setCallbackType(cbtype->currentItem());
+    gpppdata.setCallbackPhone(cbphone->text());
     return true;
   }
 }
@@ -218,6 +254,10 @@
   down->setEnabled(sel != -1 && sel != (int)numbers->count()-1);
 }

+void DialWidget::cbtypeChanged(int value) {
+  cbphone_l->setEnabled(value == CBTYPE_USER);
+  cbphone->setEnabled(value == CBTYPE_USER);
+}

 void DialWidget::selectionChanged(int) {
   numbersChanged();
diff -urN kdenetwork-3.2.1.orig/kppp/edit.h kdenetwork-3.2.1/kppp/edit.h
--- kdenetwork-3.2.1.orig/kppp/edit.h    2003-05-15 18:33:54.000000000 +0300
+++ kdenetwork-3.2.1/kppp/edit.h    2004-04-16 02:01:04.749373304 +0300
@@ -57,6 +57,7 @@
   bool save();
   void pppdargsbutton();
   void numbersChanged();
+  void cbtypeChanged(int);
   void selectionChanged(int);
   void addNumber();
   void delNumber();
@@ -72,6 +73,11 @@
   QLabel *auth_l;
   QCheckBox *store_password;

+  // callback support
+  QComboBox *cbtype;
+  QLabel *cbtype_l;
+  QLineEdit *cbphone;
+  QLabel *cbphone_l;
   // for the phonenumber selection
   QPushButton *add, *del, *up, *down;
   QListBox *numbers;
diff -urN kdenetwork-3.2.1.orig/kppp/kpppwidget.cpp kdenetwork-3.2.1/kppp/kpppwidget.cpp
--- kdenetwork-3.2.1.orig/kppp/kpppwidget.cpp    2003-11-30 11:48:38.000000000 +0200
+++ kdenetwork-3.2.1/kppp/kpppwidget.cpp    2004-04-16 02:01:04.751373000 +0300
@@ -495,8 +495,11 @@
       removedns();
       Modem::modem->unlockdevice();
       con->pppdDied();
-
-      if(!gpppdata.automatic_redial()) {
+
+      Requester::rq->pppdExitStatus();
+      gpppdata.setWaitCallback(gpppdata.callbackType() && Requester::rq->lastStatus == E_CBCP_WAIT);
+
+      if(!gpppdata.automatic_redial() && !gpppdata.waitCallback()) {
     quit_b->setFocus();
     show();
     con_win->stopClock();
@@ -525,7 +528,10 @@
     if(KMessageBox::warningYesNo(0, msg, i18n("Error"), i18n("&OK"), i18n("&Details...")) == KMessageBox::No)
       PPPL_ShowLog();
       } else { /* reconnect on disconnect */
-    kdDebug(5002) << "Trying to reconnect... " << endl;
+        if(gpppdata.waitCallback())
+          kdDebug(5002) << "Waiting for callback... " << endl;
+        else
+          kdDebug(5002) << "Trying to reconnect... " << endl;

         if(gpppdata.authMethod() == AUTH_PAP ||
        gpppdata.authMethod() == AUTH_CHAP ||
@@ -538,7 +544,7 @@
     con_win->stopClock();
     stopAccounting();
     gpppdata.setpppdRunning(false);
-    // not in a signal handler !!!    KNotifyClient::beep();
+    // not in a signal handler !!!  KNotifyClient::beep();
     emit cmdl_start();
     }
   }
diff -urN kdenetwork-3.2.1.orig/kppp/Makefile.in kdenetwork-3.2.1/kppp/Makefile.in
--- kdenetwork-3.2.1.orig/kppp/Makefile.in    2004-03-01 18:03:15.000000000 +0200
+++ kdenetwork-3.2.1/kppp/Makefile.in    2004-04-16 02:01:35.864643064 +0300
@@ -409,6 +409,7 @@
         runtests.h \
         loginterm.h \
         auth.h \
+        cbtype.h \
         version.h \
         macros.h \
         ppplog.h \
diff -urN kdenetwork-3.2.1.orig/kppp/pppdata.cpp kdenetwork-3.2.1/kppp/pppdata.cpp
--- kdenetwork-3.2.1.orig/kppp/pppdata.cpp    2004-01-17 14:54:17.000000000 +0200
+++ kdenetwork-3.2.1/kppp/pppdata.cpp    2004-04-16 02:01:35.865642912 +0300
@@ -43,7 +43,8 @@
      caccount(-1),         // set the current account index also
      suidprocessid(-1),    // process ID of setuid child
      pppdisrunning(false),
-     pppderror(0)
+     pppderror(0),
+     waitcallback(false)
 {
 }

@@ -897,6 +898,29 @@
   return (bool)readNumConfig(cgroup, STORE_PASSWORD_KEY, 1);
 }

+int PPPData::callbackType() {
+  return readNumConfig(cgroup, CALLBACK_TYPE_KEY, 0);
+}
+
+void PPPData::setCallbackType(int value) {
+  writeConfig(cgroup, CALLBACK_TYPE_KEY, value);
+}
+
+const QString PPPData::callbackPhone() {
+  return readConfig(cgroup, CALLBACK_PHONE_KEY, "");
+}
+
+void PPPData::setCallbackPhone(const QString &b) {
+  writeConfig(cgroup, CALLBACK_PHONE_KEY, B);
+}
+
+bool PPPData::waitCallback() {
+  return waitcallback;
+}
+
+void PPPData::setWaitCallback(bool value) {
+  waitcallback = value;
+}

 const QString PPPData::command_before_connect() {
   return readConfig(cgroup, BEFORE_CONNECT_KEY);
diff -urN kdenetwork-3.2.1.orig/kppp/pppdata.h kdenetwork-3.2.1/kppp/pppdata.h
--- kdenetwork-3.2.1.orig/kppp/pppdata.h    2003-07-21 10:38:12.000000000 +0300
+++ kdenetwork-3.2.1/kppp/pppdata.h    2004-04-16 02:01:35.866642760 +0300
@@ -116,6 +116,8 @@
 #define STORED_PASSWORD_KEY "Password"
 #define STORED_USERNAME_KEY "Username"
 #define STORE_PASSWORD_KEY "StorePassword"
+#define CALLBACK_TYPE_KEY  "CallbackType"
+#define CALLBACK_PHONE_KEY "CallbackPhone"
 #define BEFORE_CONNECT_KEY  "BeforeConnect"
 #define COMMAND_KEY        "Command"
 #define DISCONNECT_COMMAND_KEY "DisconnectCommand"
@@ -151,6 +153,7 @@
 // pppd errors
 #define E_IF_TIMEOUT       1
 #define E_PPPD_DIED        2
+#define E_CBCP_WAIT       14

 // window position
 #define WINPOS_CONWIN_X    "WindowPositionConWinX"
@@ -355,6 +358,15 @@
   bool storePassword();
   void setStorePassword(bool);

+  int callbackType();
+  void setCallbackType(int);
+
+  const QString callbackPhone();
+  void setCallbackPhone(const QString &);
+
+  bool waitCallback();
+  void setWaitCallback(bool);
+
   const QString speed();
   void setSpeed(const QString &);

@@ -460,6 +472,7 @@
                                          // daemon
   int pppderror;                         // error encounterd running pppd
   int pppdVer, pppdMod, pppdPatch;       // pppd version
+  bool waitcallback;             // callback waiting flag

   QStringList phonelist;
 };
Спасибо сказали: