/* -*- C++ -*-
 *
 *            kPPP: A pppd front end for the KDE project
 *
 * $Id$
 *
 *            Copyright (C) 1997 Bernd Johannes Wuebben
 *                   wuebben@math.cornell.edu
 *
 * based on EzPPP:
 * Copyright (C) 1997  Jay Painter
 *
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this program; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#ifndef _CONNECT_H_
#define _CONNECT_H_

#include <tqtimer.h>
#include <kpushbutton.h>
#include <tqlabel.h>
#include <tqevent.h>

#include "kpppconfig.h"
#include "pwentry.h"
#include "docking.h"
#include "loginterm.h"

#define MAXLOOPNEST (MAX_SCRIPT_ENTRIES/2)

class PPPStats;

class ConnectWidget : public TQWidget {
  Q_OBJECT
  
public:
  ConnectWidget(TQWidget *parent, const char *name, PPPStats *st);
  ~ConnectWidget();

public:
  void set_con_speed_string();
  void setMsg(const TQString &);
  void pppdDied();

  // these are only necessary to prevent the user from clicking in the cancel 
  // button during the disconnect delay in KPPPWidget
  void disableButtons();
  void enableButtons();

protected:
  void timerEvent(TQTimerEvent *);
  void closeEvent( TQCloseEvent *e );

private slots:
  void readChar(unsigned char);
  void pause();
  void if_waiting_slot();

public slots:
  void init();
  void preinit();
  void script_timed_out();
  void if_waiting_timed_out();
  void cancelbutton();

signals:
  void if_waiting_signal();
  void debugMessage(const TQString &);
  void toggleDebugWindow();
  void closeDebugWindow();
  void debugPutChar(unsigned char);
  void startAccounting();
  void stopAccounting();

public:
  TQString myreadbuffer;  // we want to keep every thing in order to fish for the

  // connection speed later on
  TQPushButton *debug;
  int main_timer_ID;

private:
  int vmain;
  int substate;
  int scriptindex;
  TQString scriptCommand, scriptArgument;
  TQStringList *comlist, *arglist;

  //  static const int maxloopnest=(MAX_SCRIPT_ENTRIES/2);
  int loopnest;
  int loopstartindex[MAXLOOPNEST];
  bool loopend;
  TQString loopstr[MAXLOOPNEST];

  bool semaphore;
  TQTimer *inittimer;

  TQTimer *timeout_timer;
  bool execppp();
  void writeline(const TQString &);
  void checkBuffers();

  void setExpect(const TQString &);
  bool expecting;
  TQString expectstr;

  TQString readbuffer;

  void setScan(const TQString &);
  TQString scanvar;
  TQString scanstr;
  TQString scanbuffer;
  bool scanning;

  bool pausing;
  PWEntry *prompt;
  LoginTerm *termwindow;

  int scriptTimeout;
  TQTimer *pausetimer;
  TQTimer *if_timer;
  TQTimer *if_timeout_timer;

  TQLabel *messg;
  KPushButton *cancel;

  bool firstrunID;
  bool firstrunPW;

  unsigned int dialnumber; // the current number to dial

  PPPStats *stats;
};


// non-member function to kill&wait on the pppd child process
extern void killppp();
void adddns();
void addpeerdns();
void removedns();
void add_domain(const TQString & newdomain);
void auto_hostname();

#endif