浏览代码

stdout in file abspeichern, für interface bearbeitung. Beispiel mit cat auf /etc/network/interfaces und modifikation eines EIntrages

Reinhard Russinger 8 年之前
父节点
当前提交
037fe64e57
共有 5 个文件被更改,包括 204 次插入24 次删除
  1. 25 0
      application.cpp
  2. 4 0
      application.h
  3. 149 0
      example/AppTest/SetNetworkInterface.qml
  4. 25 24
      example/AppTest/main.qml
  5. 1 0
      example/AppTest/qml.qrc

+ 25 - 0
application.cpp

@@ -1,6 +1,9 @@
 #include "application.h"
 #include <QProcess>
 #include <QDebug>
+#include <QFile>
+#include <QTextStream>
+
 Application::Application(QObject *parent) :
     QObject(parent),
     m_process(new QProcess(this))
@@ -28,6 +31,17 @@ void Application::setAppName(const QString &appName)
     m_AppName = appName;
 }
 
+QString Application::outFName() const
+{
+    return m_outFName;
+}
+
+void Application::setoutFName(const QString &outFName)
+{
+    m_outFName = outFName;
+}
+
+
 QString Application::stdERR() const
 {
     return m_stdERR;
@@ -93,6 +107,17 @@ void Application::finished(int exitCode, QProcess::ExitStatus status)
     m_exitCode = exitCode;
     m_exitStatus = status;
 
+
+   if(m_outFName.length() > 0) {
+       QFile outfile(m_outFName);
+
+       if(outfile.open(QIODevice::ReadWrite|QFile::Truncate)){
+           QTextStream stream (&outfile);
+           stream << m_stdOUT;
+           outfile.close();
+       }
+   }
+
     emit this->appFinished();
 }
 

+ 4 - 0
application.h

@@ -12,6 +12,7 @@ public:
     Q_PROPERTY( QString arguments READ arguments WRITE setArguments)
     Q_PROPERTY( QString stdERR READ stdERR  WRITE setstdERR)
     Q_PROPERTY( QString stdOUT READ stdOUT WRITE setstdOUT)
+    Q_PROPERTY( QString outFName READ outFName WRITE setoutFName)
 
     Q_PROPERTY( int exitCode READ exitCode)
     int exitCode();
@@ -27,6 +28,8 @@ public:
     void setAppName(const QString &appName);
     QString arguments() const;
     void setArguments(const QString &arguments);
+    QString outFName() const;
+    void setoutFName(const QString &outFName);
     QString stdERR() const;
     void setstdERR(const QString &stdERR);
     QString stdOUT() const;
@@ -43,6 +46,7 @@ private:
     QProcess *m_process;
     QString m_AppName;
     QString m_Arguments;
+    QString m_outFName;
     QString m_stdERR;
     QString m_stdOUT;
     int m_exitCode;

+ 149 - 0
example/AppTest/SetNetworkInterface.qml

@@ -0,0 +1,149 @@
+import QtQuick 2.5
+import ApplicationLauncher 1.0
+
+Item {
+    property string mode: "static"
+    property string ifacename: "eth0"
+    property string address: "192.168.0.125"
+    property string netmask: "255.255.255.0"
+    property string gateway: "192.168.0.10"
+    property string infile: "/etc/networks/interfaces"
+    property string outfile: "/etc/networks/interfaces"
+
+    function doSetInterface() {
+        setInterface.launchScript();
+    }
+
+    Application {
+        id: writeInterfaces
+        outFName: outfile
+        onAppFinished: {
+            console.log("IfaceDone");
+        }
+
+        onAppStarted: {
+            console.debug("IFACEappStarted :");
+        }
+
+        onAppError: {
+            console.debug("IFACEappError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+    }
+
+    Application {
+        id: setInterface
+        appName: "cat"
+        arguments: infile
+
+        onAppFinished: {
+            console.debug("AppFinished :");
+            //console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+            console.debug("stdERR :" + stdERR);
+            //console.debug("stdOUT :" + stdOUT);
+            //console.debug("======================================");
+
+            var lines = stdOUT.split(/[\r\n]+/g);
+            var idx = 0;
+            var iface = [];
+            var inIface = 0;
+
+            lines.forEach(function(entry) {
+                if (entry.length > 0) {
+
+                    if(entry.charAt(0) === '#'){
+                        //console.log(idx + ":: " + "=======>:" + JSON.stringify(entry));
+                    } else {
+                        if (entry.indexOf("iface") !== -1){ //Interface Entry start
+                            var ifaceEntry = entry.split(" ");
+                            if ((ifaceEntry.length >=2) && (ifaceEntry[1] === "eth0")) {
+                                iface.push({index: idx, txt: entry});
+                                inIface = 1;
+                            } else {
+                                inIface = 0;
+                            }
+                        } else {
+                            if(inIface === 1) {
+                                iface.push({index: idx, txt: entry});
+                            }
+                        }
+                    }
+                }
+                ++idx;
+            });
+
+            lines.splice(iface[0].index, iface[iface.length - 1].index - iface[0].index + 1);
+
+            var insertIdx = iface[0].index;
+            var insertText;
+            if(mode === "static") {
+                insertText = "iface " + ifacename + " inet " + mode;
+                lines.splice(insertIdx, 0, insertText);
+                ++insertIdx;
+                insertText = "\taddress " + address;
+                lines.splice(insertIdx, 0, insertText);
+                ++insertIdx;
+                insertText = "\tnetmask " + netmask;
+                lines.splice(insertIdx, 0, insertText);
+                ++insertIdx;
+
+
+                //Broadcas Adresse ausrechnen
+                var wrkAddr = address.split(".");
+                var ipAddress = new Uint8Array(4);
+                var i;
+
+                for (i = 0; i< 4; i++) {
+                    ipAddress[i] = wrkAddr[i];
+                }
+
+                wrkAddr = netmask.split(".");
+                var ipMask = new Uint8Array(4);
+                for (i = 0; i< 4; i++) {
+                    ipMask[i] = wrkAddr[i];
+                }
+
+                var broadcastUINT = new Uint8Array(4);
+
+                for (i = 0; i< 4; i++) {
+                    broadcastUINT[i] = ipAddress[i] | (~ipMask[i]);
+                }
+
+                var broadcast = broadcastUINT[0] +"." +
+                        broadcastUINT[1] +"." + broadcastUINT[2] +"." +
+                        broadcastUINT[3];
+
+                insertText = "\tbroadcast " + broadcast;
+                lines.splice(insertIdx, 0, insertText);
+                ++insertIdx;
+
+                insertText = "\tpost-up echo " + "'nameserver "  + gateway + "' > /etc/resolv.conf";
+                lines.splice(insertIdx, 0, insertText);
+            } else if (mode === "dhcp") {
+                insertText = "iface " + ifacename + " inet " + mode;
+                lines.splice(insertIdx, 0, insertText);
+                ++insertIdx;
+            }
+
+            var cmd = "echo -e " + "\"";
+            lines.forEach(function(entry){
+                cmd = cmd + entry + "\\n"
+                //console.log(JSON.stringify(entry));
+            });
+
+            cmd = cmd + "\"";
+            writeInterfaces.appName = cmd;
+            writeInterfaces.launchScript();
+
+        }
+
+        onAppStarted: {
+            console.debug("appStarted :");
+            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+
+        onAppError: {
+            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+    }
+
+}

+ 25 - 24
example/AppTest/main.qml

@@ -3,34 +3,24 @@ import QtQuick.Controls 1.4
 import QtQuick.Layouts 1.0
 import ApplicationLauncher 1.0
 
+import "."
+
 ApplicationWindow {
     visible: true
     width: 640
     height: 480
     title: qsTr("Hello World")
 
-    Application {
-        id: testScripts
-        appName: "cat"
-        arguments: "/etc/passwd"
-
-        onAppFinished: {
-            console.debug("AppFinished :");
-            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
-            console.debug("stdERR :" + stdERR);
-            console.debug("stdOUT :" + stdOUT);
-        }
-
-        onAppStarted: {
-            console.debug("appStarted :");
-            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+    SetNetworkInterface {
+        id: setEth0
+        mode: "static"
+        ifacename: "eth0"
+        address: "192.168.0.233"
+        netmask: "255.255.255.0"
+        gateway: "192.168.0.123"
 
-        }
-
-        onAppError: {
-            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
-
-        }
+        infile: "/home/ru/BUILD/QT562_di-soric/GfA/board/GfA/Display001/rootfs/etc/network/interfaces"
+        outfile: "/home/ru/out.txt"
     }
 
     Button {
@@ -38,11 +28,22 @@ ApplicationWindow {
         y:10
         height: 40
         width:120
-        text: "apptest"
+        text: "Eth0 static"
         onClicked: {
-            testScripts.launchScript();
+            setEth0.mode = "static";
+        setEth0.doSetInterface();
         }
     }
 
-
+    Button {
+        x:10
+        y:80
+        height: 40
+        width:120
+        text: "Eth0 dhcp"
+        onClicked: {
+            setEth0.mode = "dhcp";
+        setEth0.doSetInterface();
+        }
+    }
 }

+ 1 - 0
example/AppTest/qml.qrc

@@ -1,5 +1,6 @@
 <RCC>
     <qresource prefix="/">
         <file>main.qml</file>
+        <file>SetNetworkInterface.qml</file>
     </qresource>
 </RCC>