Beispiel #1
0
 def _wait_for_connections(self, s_left, addr, treq):
     # determine request method  (HEAD and GET are supported) (PM: added support to POST )

     request_method = treq.split(' ')[0]
     if (self.modep == 1):
        print ("Method: ", request_method)
        print ("Full HTTP message: -->")
        print (treq)      # KN: Enable this print to see the value of treq in debug mode
        print ("<--")
     treqhead = treq.split("\r\n\r\n")[0]
     print("treqhead:", treqhead)
     treqbody = treq[len(treqhead):].lstrip()      # PM: makes easier to handle various types of newlines
     if (self.modep == 1):
        print ("only the HTTP body: -->")
        print (treqbody)    # KN: Enable this print to see the value of treqbody in debug mode
        print ("<--")
     # split on space "GET /file.html" -into-> ('GET','file.html',...)
     file_requested = treq.split(' ')
     #if(self.modep==1): print("Debug Server: File Requested: ", file_requested)    # KN: Enable this print to see the file requested in debug mode
     if (file_requested == ''):
        file_requested = '/index.html'
     file_requested = file_requested[1] # get 2nd element
     # Check for URL arguments. Disregard them
     file_requested = file_requested.split('?')[0]  # disregard anything after '?'
     if (file_requested == '/'):  # in case no file is specified by the browser
             file_requested = '/index.html' # load index.html by default
     elif (file_requested == '/favicon.ico'):  # most browsers ask for this file...
             file_requested = '/index.html' # ...giving them index.html instead
     file_requested = self.www_dir + file_requested
     if (self.modep == 1): print ("Serving web page ["+file_requested+"]")

# GET method
     if (request_method == 'GET') | (request_method == 'HEAD') :
     ## Load file content
         if (self.modep == 1): print ("file_requested: ", file_requested)
         try:
             gc.collect()
             if (request_method == 'GET' and file_requested =='/flash/registro'):
                 if (self.modep == 1): print ('Regreso del Usuario',self.userR)
                 tabla = BaseDatos(self.modep)
                 response_content,self.userR = tabla.ingresoRegistro(self.userR,1)
                 if (self.modep == 1): print ('Datos Regreso', response_content)
             else:
                 file_handler = open(file_requested,'rb')
                 if (request_method == 'GET'):      # only read the file when GET
                    response_content = file_handler.read()     # read file content
                 file_handler.close()
             response_headers = self._gen_headers(200)
             if (self.modep == 1): print ('response_headers', response_headers)
         except Exception as e:     # in case file was not found, generate 404 page
             error_str = str(e)
             if (error_str[:24] == 'memory allocation failed'):
                print ("Warning, memory allocation failed. Serving response code 500"+" -> "+error_str)
                response_headers = self._gen_headers(500)
                if (request_method == 'GET'):
                    response_content = b"<html><body><p>Error 500: Memory allocation failed</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                else:
                    print ("Warning, file not found from GET. Serving response code 404\n", e)
                    response_headers = self._gen_headers( 404)
                    if (request_method == 'GET'):
                        response_content = b"<html><head><meta charset='utf-8'><title>LoRa</title></head><body><p>Error 404: File not found</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
         server_response =  response_headers.encode()      # return headers for GET and HEAD
         if (request_method == 'GET'):
            server_response +=  response_content      # return additional content for GET only
         s_left.send(server_response)
         if (self.modep == 1): print ("Closing connection with client")
         ufun.set_led_to(OFF)
         s_left.close()

# POST method
     elif (request_method == 'POST'):
             ## Load file content
         try:
             if (file_requested.find("execposthandler") != -1):
                 if (self.modep == 1):
                    print ("... PM: running python code")
                    print ("DEBUG Server: lenght message:", len(treqbody))
                 if (len(treqbody) > 25):
                     self.form = treqbody
                     response_content, self.dest_lora_address = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,0, self.modep)
                 else:
	                 if (self.modep == 1): print ("... PM: empty POST received")
	                 response_content = b"<html><body><p>Error: EMPTY FORM RECEIVED, Please Check Again</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
             elif (file_requested.find("tabla") != -1):                 
                 if (self.modep == 1): print ("DEBUG Server: Checking Messages")
                 if (self.modep == 2): print ("Checking Messages")
                 if (self.modep == 3): print ("Checking messages")
                 gc.collect()
                 tabla = BaseDatos(self.modep)
                 response_content = tabla.consulta(self.userR)
             elif (file_requested.find("registro") != -1):
                 if (self.modep == 1): 
                    print ("DEBUG Server: Register")
                    print ("DEBUG Server: lenght user:"******"DEBUG Server: treqbody:", treqbody)
                 tabla = BaseDatos(self.modep)
                 if (len(treqbody) > 12 ):
                     response_content,self.userR = tabla.ingresoRegistro(treqbody,0)
                     gc.collect()
                     print ("Register Ok")
                 else:
                     print ("... PM: empty POST received")
                     response_content = b"<html><body><p>Error: Please Choose a username</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"

             # Handling sensors data: START
             elif (file_requested.find("mqttproxypush") != -1):
                 if (self.modep == 1): 
                    print ("DEBUG Server: MqttProxy PUSH request")
                    print ("DEBUG Server: lenght user:"******"DEBUG Server: treqbody:", treqbody)
                 if (len(treqbody) > 10 ):  # to be adapted!!!
                     print ("MqttProxy PUSH request Ok")
                     response_content = b"<html><body><p>MqttProxy PUSH request</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                 else:
                     print ("MqttProxy request ERROR")
                     response_content = b"<html><body><p>ERROR MqttProxy PUSH request</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                 # value 3 in "broadcast field" indicates that is anycasting, that is the closest with the service    
                 response_content, self.dest_lora_address = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,3, self.modep)
             elif (file_requested.find("mqttproxypop") != -1):                 
                 if (self.modep == 1): 
                    print ("DEBUG Server: MqttProxy POP request")
                    print ("DEBUG Server: lenght user:"******"DEBUG Server: treqbody:", treqbody)
                 if (len(treqbody) > 10 ):  # to be adapted!!!
                     print ("MqttProxy POP request Ok")
                     response_content = b"<html><body><p>MqttProxy POP request</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                 else:
                     print ("MqttProxy request ERROR")
                     response_content = b"<html><body><p>ERROR MqttProxy POP request</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                 gc.collect()
                 tabla = BaseDatos(self.modep)
                 response_content = tabla.consulta("mqttproxy")
             # Handling sensors data: END

             elif (file_requested.find("broadcast") != -1):
                if (self.modep == 1 | self.modep ==2 ): print ("AM: Sending Message Broadcast")
                if (self.modep == 3): print ("Message Broadcast sent")
                gc.collect()
                tabla = BaseDatos(self.modep)
                response_content, self.dest_lora_address = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,1, self.modep)
             elif (file_requested.find("telegram") != -1):
                print ("AM: Telegram Message")
                tabla = BaseDatos(self.modep)
                if (self.modep == 1): print ("DEBUG Server: lenght message:", len(treqbody))
                if (len(treqbody) > 25):
                    response_content, self.dest_lora_address = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,2, self.modep)
                else:
                    print ("... AM: empty POST received")
                    response_content = b"<html><body><p>Error: EMPTY FORM RECEIVED, Please Check Again</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
             elif (file_requested.find("resend") != -1):
                    if (self.modep == 1): print ("DEBUG Server: Resending message")
                    response_content = posthandler.resend(self.form, self.s_right, self.loramac, self.userR, self.dest_lora_address, self.modep)
             else:
                 file_handler = open(file_requested,'rb')
                 response_content = file_handler.read()     # read file content
                 file_handler.close()
             response_headers = self._gen_headers(200)
         except Exception as e:      # in case file was not found, generate 404 page
             print ("Warning, file not found. Serving response code 404\n", e)
             response_headers = self._gen_headers(404)
             response_content = b"<html><body><p>Error 404: File not found</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"

         server_response =  response_headers.encode()       # return headers
         server_response +=  response_content       # return additional content
         s_left.send(server_response)
         if (self.modep == 1): print ("Closing connection with client")
         ufun.set_led_to(OFF)
         s_left.close()
     else:
         print ("Unknown HTTP request method:", request_method)
Beispiel #2
0
 def _wait_for_connections(self,s_left,addr,treq):
     #determine request method  (HEAD and GET are supported) (PM: added support to POST )
     request_method = treq.split(' ')[0]
     print ("Method: ", request_method)
     print ("Full HTTP message: -->")
     print (treq)
     print ("<--")
     treqhead = treq.split("\r\n\r\n")[0]
     treqbody = treq[len(treqhead):].lstrip() # PM: makes easier to handle various types of newlines
     print ("only the HTTP body: -->")
     print (treqbody)
     print ("<--")

         # split on space "GET /file.html" -into-> ('GET','file.html',...)
     file_requested = treq.split(' ')
     if DEBUG_MODE: print("File Requested: ", file_requested)
     if(file_requested==''):
        file_requested = '/index.html'
     file_requested = file_requested[1] # get 2nd element

         #Check for URL arguments. Disregard them
     file_requested = file_requested.split('?')[0]  # disregard anything after '?'

     if (file_requested == '/'):  # in case no file is specified by the browser
             file_requested = '/index.html' # load index.html by default
     elif (file_requested == '/favicon.ico'):  # most browsers ask for this file...
             file_requested = '/index.html' # ...giving them index.html instead
     file_requested = self.www_dir + file_requested
     print ("Serving web page [",file_requested,"]")

# GET method
     if (request_method == 'GET') | (request_method == 'HEAD') :
    ## Load file content
         try:
             gc.collect()
             print("mem_free: ", gc.mem_free())
             file_handler = open(file_requested,'rb')
             if (request_method == 'GET'):  #only read the file when GET
                 response_content = file_handler.read() # read file content
             file_handler.close()
             response_headers = self._gen_headers( 200)
         except Exception as e: #in case file was not found, generate 404 page
             error_str = str(e)
             if (error_str[:24] == 'memory allocation failed'):
                print ("Warning, memory allocation failed. Serving response code 500"+" -> "+error_str)
                response_headers = self._gen_headers(500)
                if (request_method == 'GET'):
                    response_content = b"<html><body><p>Error 500: Memory allocation failed</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
                else:
                    print ("Warning, file not found from GET. Serving response code 404\n", e)
                    response_headers = self._gen_headers( 404)
                    if (request_method == 'GET'):
                        response_content = b"<html><head><meta charset='utf-8'><title>LoRa</title></head><body><p>Error 404: File not found</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
         server_response =  response_headers.encode() # return headers for GET and HEAD
         if (request_method == 'GET'):
             server_response +=  response_content  # return additional conten for GET only
         s_left.send(server_response)
         print ("Closing connection with client")
         ufun.set_led_to(OFF)
         s_left.close()

# POST method
     elif (request_method == 'POST'):
             ## Load file content
         try:
             if (file_requested.find("execposthandler") != -1):
                 print("... PM: running python code")
                 if DEBUG_MODE: print("DEBUG: lenght message:",len(treqbody))
                 if (len(treqbody) > 25):
                     response_content = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,0)
                 else:
	                 print("... PM: empty POST received")
	                 response_content = b"<html><body><p>Error: EMPTY FORM RECEIVED, Please Check Again</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
             elif (file_requested.find("tabla") != -1):
                 print("AM: Checking Messages")
                 tabla=BaseDatos()
                 response_content = tabla.consulta(self.userR)
             elif (file_requested.find("registro") != -1):
                 print("AM: Register")
                 if DEBUG_MODE: print("DEBUG: lenght user:"******"DEBUG: treqbody:",treqbody)
                 tabla=BaseDatos()
                 if (len(treqbody) > 12 ):
                     response_content,self.userR = tabla.ingresoRegistro(treqbody)
                     print("Register Ok")
                 else:
                     print("... PM: empty POST received")
                     response_content = b"<html><body><p>Error: Please Choose a username</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"
             elif (file_requested.find("broadcast") != -1):
                print("AM: Sending Message Broadcast")
                tabla=BaseDatos()
                response_content = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,1)
             elif (file_requested.find("telegram") != -1):
                print("AM: Telegram Message")
                tabla=BaseDatos()
                if DEBUG_MODE: print("DEBUG: lenght message:",len(treqbody))
                if (len(treqbody) > 25):
                    response_content = posthandler.run(treqbody,self.s_right,self.loramac,self.userR,2)
                else:
                    print("... AM: empty POST received")
                    response_content = b"<html><body><p>Error: EMPTY FORM RECEIVED, Please Check Again</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"

             else:
                 file_handler = open(file_requested,'rb')
                 response_content = file_handler.read() # read file content
                 file_handler.close()

             response_headers = self._gen_headers(200)
         except Exception as e: #in case file was not found, generate 404 page
             print ("Warning, file not found. Serving response code 404\n", e)
             response_headers = self._gen_headers(404)
             response_content = b"<html><body><p>Error 404: File not found</p><p>Python HTTP server</p><p><a href='/'>Back to home</a></p></body></html>"

         server_response =  response_headers.encode() # return headers
         server_response +=  response_content  # return additional content
         s_left.send(server_response)
         print ("Closing connection with client")
         ufun.set_led_to(OFF)
         s_left.close()

     else:
         print("Unknown HTTP request method:", request_method)