summaryrefslogblamecommitdiffstats
path: root/src/fbgui/networkdiscovery.h
blob: d63ad0b35884b2da11a24e6cb12d7cab5f8d6f43 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15














                                                                          













                           


                                   


                 
                            
 
 
 
                                              
 


                                      

       



















                                                                        
 
             





                                                                            
 
                         
 
                           


        











                                                                           

        






































                                                     




                            
/**
 * Copyright (c) 2010,2011 - RZ Uni Freiburg
 * Copyright (c) 2010,2011 - OpenSLX Project
 *
 * This program/file is free software distributed under the GPL version 2.
 * See http://openslx.org/COPYING
 *
 * If you have any feedback please consult http://openslx.org/feedback and
 * send your feedback to feedback@openslx.org
 *
 * General information about OpenSLX can be found under http://openslx.org
 */



#ifndef NetworkDiscovery_H
#define NetworkDiscovery_H

#include <QtNetwork>
#include <QtCore>

#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <syslog.h>
#include <sysfs/libsysfs.h>

#include "interfaceconfiguration.h"
#include "networkmanager.h"


#include "dhcp.h"

#include "../common/fbgui.h"



#define DEFAULT_PATHTODHCPCDEXE "/bin/cdhcpcd"

class NetworkDiscovery: public QObject
{
  Q_OBJECT

public:
  NetworkDiscovery(QObject *parent = 0);
  ~NetworkDiscovery();

  void initAndRun(QString serverIp, bool userChoice,
                  bool autoUp,
                  QString pathToLogFile,
                  QString serverPath = DEFAULT_QTSOCKETADDRESS,
                  QString pathToExe = DEFAULT_PATHTODHCPCDEXE,
                  QStringList* args = NULL);
  int ip4_replaceDefaultRoute(QString ifName, QString gateway, int mss);
  QString getGatewayForInterface(QString ifName);

  int ip4_setManualConfiguration(QVariantMap result);
  QString readLogFile();
  void tryAgain();
  void prepareTryAgain();
  bool checkConnectivity(QString ifName);
  bool checkConnectivityViaTcp();
  QVariantMap getInterfaceConfig(QString ifName);
  QString GetErrorStr();

public slots:
  void handleNewConnection();
  void handleNewInput();
  void handleNewInputLine(QLocalSocket * client, QString data);
  void handleProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
  void handleProcessStarted();
  void handleClientDisconnect();

  void slotReadyForRun();

  void checkForIsRunning();


signals:
  void addInterface(const QString &ifName);
  void changeProgressBarValue(const QString & ifName, const int $newValue);
  void connectionEstablished(QString ifName);
  void abortBoot(QString msg);
  void updateIfStatus(QString ifName, QString status);
  void updateStatus(QString status);
  void allProcessesFinished();
  void continueBoot(QString ifName);
  void continueBootWithoutCheck(QString ifName);
  void setManualConfInterfaces(QString jsonArr);

  void readyForRun();

private:
  QString _tag;
  QLocalServer *_server;
  QMap<QLocalSocket*, QLocalSocket*> _clients;
  QLocalSocket *_client;
  QMap<QString, QLocalSocket*> _ifNameToClient;
  QMap<QProcess*, QString> _clientProcessToIfNameMap;
  QString _serverPath;
  QString _pathToDhcpcdExe;
  QStringList _dhcpcdArguments;
  int _numberOfProcesses;
  NetworkManager* _networkManager;
  bool _userChoice;
  bool _blocked;
  bool _autoUp;
  QString _serverIp;
  QString _pathToLogFile;
  QList<QString> _ifUpList;
  QList<QString> _ifDownList;
  int _ifUpCountdown;
  QTimer*_timer;
  QList<Q_PID> _pidsList;
  QString _errorStr;
  QMap<QString, interfaceconfiguration*> _ifcMap;
  void mainWork();

  void killDHCPCD();

  void handleNewInput(QLocalSocket * client);

  void runDHCPCD(QList<QString> &interfaces);
  void runDHCPCD(QString interface);

  bool checkCarrierState(QString interface);
  bool checkConnectivityViaTcp(QString server);

  bool checkBlackList(QString i);

  void getListOfNetworkInterfaces();
  void getListOfNetworkInterfacesWithAutoUp();


};

#endif // NetworkDiscovery_H