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())
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)
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