def dataReceived(self, data): if self.state == STATE_LEN: self.buffer = data else: self.buffer += data if self.state == STATE_LEN: if len(self.buffer) >= 4: self.header_len = struct.unpack('!I', self.buffer[0:4])[0] self.buffer = self.buffer[4:] self.state = STATE_HEADER if self.state == STATE_HEADER: if len(self.buffer) >= self.header_len: header_string = self.buffer[0:self.header_len] header_json = json.loads(header_string) if 'vm_path' in header_json: vm_path = header_json['vm_path'] guest_path = header_json['guest_path'] url = self.server.on_download_request(vm_path, guest_path) # send url self.transport.write(encode_header({'url': url})) LOG.debug('Header: %s', header_json) if 'cancel' in header_json: self.server.on_cancel(header_json['url']) LOG.debug('Header: %s', header_json) if 'progress' in header_json: self.server.on_progress(header_json['url'], header_json['progress']) self.buffer = self.buffer[self.header_len:] self.state = STATE_LEN
def send_request(s, vm_path, guest_path): # request is a dict type request = {'vm_path': vm_path, 'guest_path': guest_path} header_string = encode_header(request) send_all(s, header_string) # receive response len_string = receive_all(s, 4) if len_string: header_length, = struct.unpack('!I', len_string) json_string = receive_all(s, header_length) response = json.loads(json_string) if 'url' in response: url = response['url'] return url
def sendData(self, data): self.transport.write(encode_header(data))
def send_message(s, request): header_string = encode_header(request) send_all(s, header_string)