def put_body(self):
		max_length = self.remote_info.max_packet_length
		file_data = self.file_data
		
		# Send the file data.
		
		# The optimum size is the maximum packet length accepted by the
		# remote device minus three bytes for the header ID and length
		# minus three bytes for the request.
		optimum_size = max_length - 3 - 3
		
		data = file_data[:optimum_size]
		self.file_data=self.file_data[optimum_size:]
		
		if len(data) == 0:
			raise Exception("work done")
		
		if len(self.file_data) > 0:
			self.state_put = common.PUT_BODY
			request = requests.Put()
			request.add_header(headers.Body(data, False), max_length)
			self.socket.sendall(request.encode())			
		else:
			self.state_put = common.PUT_FINAL
			request = requests.Put_Final()
			request.add_header(headers.End_Of_Body(data, False), max_length)
			self.socket.sendall(request.encode())
Esempio n. 2
0
    def get(self, socket, request):

        name = ""
        type = ""

        for header in request.header_data:

            print("header is " + header)
            if isinstance(header, headers.Name):
                name = header.decode().strip(b"\x00")
                print("Receiving request for %s" % name)

            elif isinstance(header, headers.Type):
                type = header.decode().strip(b"\x00")
                print("Type %s" % type)

        path = os.path.abspath(os.path.join(self.directory, name))

        if os.path.isdir(path) or type == "x-obex/folder-listing":

            details = {}

            if path.startswith(self.directory):

                l = os.listdir(path)
                s = '<?xml version="1.0"?>\n<folder-listing>\n'
                for i in l:
                    objpath = os.path.join(path, i)
                    if os.path.isdir(objpath):
                        details[i] = (i, os.stat(objpath)[stat.ST_CTIME])
                        s += '  <folder name="%s" created="%s" />' % details[i]
                    else:
                        details[i] = (i, os.stat(objpath)[stat.ST_CTIME],
                                      os.stat(objpath)[stat.ST_SIZE])
                        s += '  <file name="%s" created="%s" size="%s" />' % details[
                            i]

                s += "</folder-listing>\n"
                print(s)

                response = responses.Success()
                response_headers = [
                    headers.Name(name.encode("utf8")),
                    headers.Length(len(s)),
                    headers.Body(s.encode("utf8"))
                ]
                self.send_response(socket, response, response_headers)

            else:
                self._reject(socket)
        else:
            self._reject(socket)
Esempio n. 3
0
 def _put(self, name, file_data, header_list = ()):
 
     header_list = [
         headers.Name(name),
         headers.Length(len(file_data))
         ] + list(header_list)
     
     max_length = self.remote_info.max_packet_length
     request = requests.Put()
     
     response = self._send_headers(request, header_list, max_length)
     yield response
     
     if not isinstance(response, responses.Continue):
         return
     
     # Send the file data.
     
     # The optimum size is the maximum packet length accepted by the
     # remote device minus three bytes for the header ID and length
     # minus three bytes for the request.
     optimum_size = max_length - 3 - 3
     
     i = 0
     while i < len(file_data):
     
         data = file_data[i:i+optimum_size]
         i += len(data)
         if i < len(file_data):
             request = requests.Put()
             request.add_header(headers.Body(data, False), max_length)
             self.socket.sendall(request.encode())
             
             response = self.response_handler.decode(self.socket)
             yield response
             
             if not isinstance(response, responses.Continue):
                 return
         
         else:
             request = requests.Put_Final()
             request.add_header(headers.End_Of_Body(data, False), max_length)
             self.socket.sendall(request.encode())
             
             response = self.response_handler.decode(self.socket)
             yield response
             
             if not isinstance(response, responses.Success):
                 return