Example #1
0
    def serveUploadPost(self, qs): #, lastUploadCode, lastUploadConfig, lastUploadFile):
        global maybeIsInSubprocess
        global forceInterrupt

        # TODO
        lastUploadCode = ""
        lastUploadConfig = ""
        lastUploadFile = ""

        # Parse the form data posted
        form = cgi.FieldStorage(
            fp = self.rfile,
            headers = self.headers,
            environ = {
                'REQUEST_METHOD':'POST',
                'CONTENT_TYPE':self.headers['Content-Type']
            })

        self.send_response(200)
        self.sendDefaultHeaders()
        self.end_headers()
        
        file_data = None

        codeType = "C"
        if "compile" in form:
            if "language" in form:
                codeType = form["language"].value.strip().lower()
            configuration.c.setCfgValue("codeType", codeType)

        if "slow" in form:
            slow = form["slow"].value == "on"
        else:
            slow = False
        configuration.c.setCfgValue("slowUpload", slow)
        configuration.c.save()

        code = None
        fileContents = None
        fileName = None

        if "compile" in form and "code" in form:
            code = form["code"].value
        if "upload" in form and "file" in form:
            fileContents = form["file"].file.read()
            fileName = form["file"].filename

        # check if what to upload is provided
        if not fileContents and not code:
            infoMsg = "Neither filename nor code specified!"
            maybeIsInSubprocess = False
            forceInterrupt = True
            self.writeChunk(infoMsg);
            return

        for m in motes.getMotes():
            name = "mote" + m.getFullBasename()
            if name in form:
                isChecked = form[name].value == "on"
            else:
                isChecked = False

            if isChecked:
                m.isSelected = True
            else:
                m.isSelected = False

        # remember which motes were selected and which not
        motes.storeSelected()
        # check if any motes are selected
        if not motes.anySelected():
            infoMsg = "No motes selected!"
            maybeIsInSubprocess = False
            forceInterrupt = True
            self.writeChunk(infoMsg);
            return

        config = ""
        if "config" in form.keys():
            lastUploadConfig = form["config"].value
            config = lastUploadConfig
        if slow:
            config += "\nSLOW_UPLOAD=y\n"

        retcode = self.compileAndUpload(code, config, fileName, fileContents, codeType)
        motesText = self.serveMotes("upload", "Upload", None, form)
        codeType = configuration.c.getCfgValue("codeType")
        isSlow = configuration.c.getCfgValueAsBool("slowUpload")
        if retcode == 0:
            infoMsg = "Upload done!"
        else:
            infoMsg = "Upload failed!"
        self.writeChunk(infoMsg);
Example #2
0
    def serveUploadPost(self, qs, lastUploadCode, lastUploadConfig, lastUploadFile):
        global maybeIsInSubprocess
        global isPostEntered

        # Parse the form data posted
        form = cgi.FieldStorage(
            fp = self.rfile,
            headers = self.headers,
            environ = {'REQUEST_METHOD':'POST',
                     'CONTENT_TYPE':self.headers['Content-Type'],
                     })

        # signal the upload result thread that we are are ready to start serving
        isPostEntered = True

        self.send_response(200)
        self.sendDefaultHeaders()
        self.end_headers()
        
        file_data = None

        isSEAL = False
        if "compile" in form:
            if "language" in form:
                isSEAL = form["language"].value.strip() == "SEAL"
            configuration.c.setCfgValue("isSealCode", isSEAL)

        if "slow" in form:
            slow = form["slow"].value == "on"
        else:
            slow = False
        configuration.c.setCfgValue("slowUpload", slow)
        configuration.c.save()

        if "code" in form.keys():
            code = form["code"].value
        else:
            code = None

        if "file" in form.keys():
            fileContents = form["file"].file.read()
        else:
            fileContents = None

        # check if what to upload is provided
        if not fileContents and not code:
            text = "Neither filename nor code specified!"
            maybeIsInSubprocess = False
            self.serveAnyPage("error:critical", qs, errorMsg = text)
            return

        for m in motes.getMotes():
            name = "mote" + m.getPortBasename()
            if name in form:
                isChecked = form[name].value == "on"
            else:
                isChecked = False

            if isChecked:
                m.isSelected = True
            else:
                m.isSelected = False

        # remember which motes were selected and which not
        motes.storeSelected()
        # check if any motes are selected
        if not motes.anySelected():
            text = "No motes selected!"
            maybeIsInSubprocess = False         
            return self.serveAnyPage("error:critical", qs, errorMsg = text, generatedContentOnly = True)

        config = ""
        if "config" in form.keys():
            lastUploadConfig = form["config"].value
            config = lastUploadConfig
        if slow:
            config += "\nSLOW_UPLOAD=y\n"

        retcode = self.compileAndUpload(code, config, fileContents, isSEAL)
        motesText = self.serveMotes("upload", "Upload", None, form)
        isSealCode = configuration.c.getCfgValueAsBool("isSealCode")
        isSlow = configuration.c.getCfgValueAsBool("slowUpload")
        if retcode == 0:
            infoMsg = "<div><strong>Upload done!</strong></div><br/>"
        else:
            infoMsg = "<div><strong>Upload failed!</strong></div><br/>"
            
        '''self.serveAnyPage("upload", qs, True, {"MOTES_TXT" : motesText,
                        "CCODE_CHECKED": 'checked="checked"' if not isSealCode else "",
                        "SEALCODE_CHECKED" : 'checked="checked"' if isSealCode else "",
                        "UPLOAD_CODE" : lastUploadCode,
                        "UPLOAD_CONFIG" : lastUploadConfig,
                        "UPLOAD_FILENAME": lastUploadFile,
                        "SLOW_CHECKED" : 'checked="checked"' if isSlow else ""}, infoMsg = infoMsg)'''
        self.writeChunk("ok")
Example #3
0
    def do_GET(self):
        self.headerIsServed = False
        o = urlparse(self.path)
        qs = parse_qs(o.query)
        global lastUploadCode
        global lastUploadConfig
        global lastUploadFile

        # TODO:
        # if "Android" in self.headers["user-agent"]:
        #     self.htmlDirectory = self.htmlDirectory + "_mobile"

        if o.path == "/" or o.path == "/default":
            self.serveDefault(qs)
        elif o.path == "/motes":
            self.serveMoteSelect(qs)
        elif o.path == "/config":
            self.serveConfig(qs)
        elif o.path == "/graph":
            self.serveGraphs(qs)
        elif o.path == "/graph-data":
            self.serveGraphData(qs)
        elif o.path == "/graph-form":
            self.serveGraphForm(qs)
        elif o.path == "/upload":
            self.serveUploadGet(qs, lastUploadCode, lastUploadConfig, lastUploadFile)
        elif o.path == "/login":
            self.serveLogin(qs)
        elif o.path == "/server":
            self.serveServer(qs)
        elif o.path == "/account":
            self.serveAccount(qs)
        elif o.path == "/users":
            self.serveUsers(qs)
        elif o.path == "/upload-result":
            self.serveUploadResult(qs)
        elif o.path == "/listen":
            self.serveListen(qs)
        elif o.path == "/listen-data":
            self.serveListenData(qs)
        elif o.path == "/blockly":
            self.serveBlockly(qs)
        elif o.path == "/seal-frame":
            self.serveSealFrame(qs)
        elif o.path[:13] == "/seal-blockly":
            self.serveFile(os.path.join(self.sealBlocklyDirectory, o.path[14:]), qs)
        elif o.path == "/sync":
            self.serveSync(qs)
        elif o.path == "/code":
            # qs['src'] contains SEAL-Blockly code
            code = qs.get('src')[0] if "src" in qs else ""
            config = qs.get('config')[0] if "config" in qs else ""
            if motes.anySelected():
                self.compileAndUpload(code, config, None, True)
            self.serveSync(qs)
        elif o.path[-4:] == ".css":
            self.serveFile(os.path.join(self.htmlDirectory, "css", o.path[1:]), qs)
        elif o.path[-4:] in [".png", ".jpg", ".gif", ".tif"]:
            self.serveFile(os.path.join(self.htmlDirectory, "img", o.path[1:]), qs)
        elif o.path[-3:] in [".js"]:
            self.serveFile(os.path.join(self.htmlDirectory, "js", o.path[1:]), qs)
        else:
            self.serve404Error(o.path, qs)   
Example #4
0
    def serveListen(self, qs):
        self.setSession(qs)
        self.send_response(200)
        self.sendDefaultHeaders()
        self.end_headers()

        motesText = self.serveMotes("listen", "Listen", qs, None)
        errorMsg = None
        global isListening
        if "action" in qs and self.getLevel() > 1:
            if qs["action"][0] == "Start":
                if not motes.anySelected():
                    errorMsg = "\n<h4 class='err'>Error: No motes selected!</h4>\n"
                if isListening:
                    errorMsg = "\n<h4 class='err'>Already listening!</h4>\n"
                else:
                    sensor_data.moteData.reset()
                    ht.openAllSerial()
                    isListening = True
                # Open DB connection
                data_utils.openDBConnection()
            else:
                ht.closeAllSerial()
                isListening = False
                # Close DB connection 
                data_utils.closeDBConnection()

        txt = ""
        for line in sensor_data.moteData.listenTxt:
            txt += line + "<br/>"

        action = "Stop" if isListening else "Start"
        
        dataFilename = configuration.c.getCfgValue("saveToFilename")
        saveProcessedData = configuration.c.getCfgValueAsBool("saveProcessedData")
        
        if self.getLevel() > 1:
            if "dataFile" in qs:
                dataFilename = qs["dataFile"][0]
                if len(dataFilename) and dataFilename.find(".") == -1:
                    dataFilename += ".csv"
            if "dataType" in qs:
                saveProcessedData = not qs["dataType"][0] == "raw"
                saveMultipleFiles = qs["dataType"][0] == "mprocessed"

            configuration.c.setCfgValue("saveToFilename", dataFilename)
            configuration.c.setCfgValue("saveProcessedData", bool(saveProcessedData))
            configuration.c.save()
        
        rawdataChecked = not saveProcessedData
        mprocessedChecked = saveProcessedData

        div_height = "0"
        if "div_height" in qs:
            div_height = qs["div_height"][0]

        self.serveAnyPage("listen", qs, True, {"MOTES_TXT" : motesText,
                        "LISTEN_TXT" : txt,
                        "MOTE_ACTION": action,
                        "DATA_FILENAME" : dataFilename,
                        "RAWDATA_CHECKED" : 'checked="checked"' if rawdataChecked else "",
                        "MPROCDATA_CHECKED" : 'checked="checked"' if mprocessedChecked else "",
                        "DIV_HEIGHT" : div_height}, errorMsg = errorMsg)
Example #5
0
    def serveUploadPost(
            self, qs):  #, lastUploadCode, lastUploadConfig, lastUploadFile):
        global maybeIsInSubprocess
        global forceInterrupt

        # TODO
        lastUploadCode = ""
        lastUploadConfig = ""
        lastUploadFile = ""

        # Parse the form data posted
        form = cgi.FieldStorage(fp=self.rfile,
                                headers=self.headers,
                                environ={
                                    'REQUEST_METHOD': 'POST',
                                    'CONTENT_TYPE':
                                    self.headers['Content-Type']
                                })

        self.send_response(200)
        self.sendDefaultHeaders()
        self.end_headers()

        file_data = None

        codeType = "C"
        if "compile" in form:
            if "language" in form:
                codeType = form["language"].value.strip().lower()
            configuration.c.setCfgValue("codeType", codeType)

        if "slow" in form:
            slow = form["slow"].value == "on"
        else:
            slow = False
        configuration.c.setCfgValue("slowUpload", slow)
        configuration.c.save()

        code = None
        fileContents = None
        fileName = None

        if "compile" in form and "code" in form:
            code = form["code"].value
        if "upload" in form and "file" in form:
            fileContents = form["file"].file.read()
            fileName = form["file"].filename

        # check if what to upload is provided
        if not fileContents and not code:
            infoMsg = "Neither filename nor code specified!"
            maybeIsInSubprocess = False
            forceInterrupt = True
            self.writeChunk(infoMsg)
            return

        for m in motes.getMotes():
            name = "mote" + m.getFullBasename()
            if name in form:
                isChecked = form[name].value == "on"
            else:
                isChecked = False

            if isChecked:
                m.isSelected = True
            else:
                m.isSelected = False

        # remember which motes were selected and which not
        motes.storeSelected()
        # check if any motes are selected
        if not motes.anySelected():
            infoMsg = "No motes selected!"
            maybeIsInSubprocess = False
            forceInterrupt = True
            self.writeChunk(infoMsg)
            return

        config = ""
        if "config" in form.keys():
            lastUploadConfig = form["config"].value
            config = lastUploadConfig
        if slow:
            config += "\nSLOW_UPLOAD=y\n"

        retcode = self.compileAndUpload(code, config, fileName, fileContents,
                                        codeType)
        motesText = self.serveMotes("upload", "Upload", None, form)
        codeType = configuration.c.getCfgValue("codeType")
        isSlow = configuration.c.getCfgValueAsBool("slowUpload")
        if retcode == 0:
            infoMsg = "Upload done!"
        else:
            infoMsg = "Upload failed!"
        self.writeChunk(infoMsg)
Example #6
0
    def do_GET(self):
        self.headerIsServed = False
        o = urlparse(self.path)
        qs = parse_qs(o.query)
#        global lastUploadCode
#        global lastUploadConfig
#        global lastUploadFile

        # TODO:
        # if "Android" in self.headers["user-agent"]:
        #     self.htmlDirectory = self.htmlDirectory + "_mobile"

        if o.path == "/" or o.path == "/default":
            self.serveDefault(qs)
        elif o.path == "/motes":
            self.serveMoteSelect(qs)
        elif o.path == "/config":
            self.serveConfig(qs)
        elif o.path == "/graph":
            self.serveGraphs(qs)
        elif o.path == "/graph-data":
            self.serveGraphData(qs)
        elif o.path == "/graph-form":
            self.serveGraphForm(qs)
        elif o.path == "/upload":
            self.serveUploadGet(qs) #, lastUploadCode, lastUploadConfig, lastUploadFile)
        elif o.path == "/login":
            self.serveLogin(qs)
        elif o.path == "/server":
            self.serveServer(qs)
        elif o.path == "/account":
            self.serveAccount(qs)
        elif o.path == "/users":
            self.serveUsers(qs)
        elif o.path == "/upload-result":
            self.serveUploadResult(qs)
        elif o.path == "/listen":
            self.serveListen(qs)
        elif o.path == "/listen-single":
            self.serveListenSingle(qs)
        elif o.path == "/talk-to":
            self.serveTalkTo(qs)
        elif o.path == "/listen-data":
            self.serveListenData(qs)
        elif o.path == "/blockly":
            self.serveBlockly(qs)
        elif o.path == "/seal-frame":
            self.serveSealFrame(qs)
        elif o.path[:13] == "/seal-blockly":
            self.serveFile(os.path.join(self.sealBlocklyDirectory, o.path[14:]), qs)
        elif o.path == "/sync":
            self.serveSync(qs)
        elif o.path == "/code":
            # qs['src'] contains SEAL-Blockly code
            code = qs.get('src')[0] if "src" in qs else ""
            config = qs.get('config')[0] if "config" in qs else ""
            # Parse the form data posted
            self.serveMotes("upload", "Upload", qs, None)
            if motes.anySelected():
                self.compileAndUpload(code, config, None, None, 'seal')
            self.serveSync(qs)
        elif o.path[-4:] == ".css":
            self.serveFile(os.path.join(self.htmlDirectory, "css", o.path[1:]), qs)
        elif o.path[-4:] in [".png", ".jpg", ".gif", ".tif"]:
            self.serveFile(os.path.join(self.htmlDirectory, "img", o.path[1:]), qs)
        elif o.path[-3:] in [".js"]:
            self.serveFile(os.path.join(self.htmlDirectory, "js", o.path[1:]), qs)
        else:
            self.serve404Error(o.path, qs)   
Example #7
0
    def serveListen(self, qs):
        self.setSession(qs)
        self.send_response(200)
        self.sendDefaultHeaders()
        self.end_headers()

        motesText = self.serveMotes("listen", "Listen", qs, None, True)

        errorStyle = "none"
        errorMsg = ""
        global isListening

        if "action" in qs and self.getLevel() > 1:
            if qs["action"][0] == "Start":
                if not motes.anySelected():
                    errorMsg = "\n<h4 class='err'>Error: No motes selected!</h4>\n"
                    errorStyle = "block"
                elif isListening:
                    errorMsg = "\n<h4 class='err'>Already listening!</h4>\n"
                    errorStyle = "block"
                else:
                    sensor_data.moteData.reset()
                    ht.openAllSerial()
                    isListening = True
                # Open DB connection
                data_utils.openDBConnection()
            else:
                ht.closeAllSerial()
                isListening = False
                # Close DB connection 
                data_utils.closeDBConnection()

        txt = ""
        for line in sensor_data.moteData.listenTxt:
            txt += line + "<br/>"

        if errorMsg == "":
            action = "Stop" if isListening else "Start"
        else:
            action = "Start"
        
        dataFilename = configuration.c.getCfgValue("saveToFilename")
        saveProcessedData = configuration.c.getCfgValueAsBool("saveProcessedData")
        
        if self.getLevel() > 1:
            if "dataFile" in qs:
                dataFilename = qs["dataFile"][0]
                if len(dataFilename) and dataFilename.find(".") == -1:
                    dataFilename += ".csv"
            if "dataType" in qs:
                saveProcessedData = not qs["dataType"][0] == "raw"
                saveMultipleFiles = qs["dataType"][0] == "mprocessed"

            configuration.c.setCfgValue("saveToFilename", dataFilename)
            configuration.c.setCfgValue("saveProcessedData", bool(saveProcessedData))
            configuration.c.save()
        
        rawdataChecked = not saveProcessedData
        mprocessedChecked = saveProcessedData

        self.serveAnyPage("listen", qs, True, {"MOTES_TXT" : motesText,
                        "LISTEN_TXT" : txt,
                        "MOTE_ACTION": action,
                        "DATA_FILENAME" : dataFilename,
                        "RAWDATA_CHECKED" : 'checked="checked"' if rawdataChecked else "",
                        "MPROCDATA_CHECKED" : 'checked="checked"' if mprocessedChecked else "",
                        "ERROR_MSG" : errorMsg,
                        "ERROR_STATUS" : errorStyle})