#ifndef NetworkDiscovery_H #define NetworkDiscovery_H #include #include #include #include #include #include #include #include #include #include "interfaceconfiguration.h" #include "networkmanager.h" #include "../common/fbgui.h" #include "dhcp.h" #define DEFAULT_PATHTODHCPCDEXE "/home/niklas/fbgui/customdhcpcd/src/build/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(); bool checkConnectivityViaTcp(); QVariantMap getInterfaceConfig(QString ifName); private 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 allProcessesFinished(); void continueBoot(QString ifName, int userChoice); void setManualConfInterfaces(QString jsonArr); void readyForRun(); private: QString _tag; QLocalServer *_server; QMap _clients; QLocalSocket *_client; QMap _ifNameToClient; QMap _clientProcessToIfNameMap; QString _pathToDhcpcdExe; QStringList _dhcpcdArguments; int _numberOfProcesses; NetworkManager _networkManager; bool _userChoice; bool _blocked; bool _autoUp; QString _serverIp; QString _pathToLogFile; QList _ifUpList; QList _ifDownList; int _ifUpCountdown; QTimer *_timer; QList _pidsList; QMap _ifcMap; void mainWork(); void handleNewInput(QLocalSocket * client); void runDHCPCD(QList &interfaces); void runDHCPCD(QString interface); bool checkCarrierState(QString interface); bool checkConnectivity(QString ifName); bool checkConnectivityViaTcp(QString server); bool checkBlackList(QString i); void getListOfNetworkInterfaces(); void getListOfNetworkInterfacesWithAutoUp(); }; #endif // NetworkDiscovery_H