Esempio n. 1
0
    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
Esempio n. 2
0
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
Esempio n. 3
0
 def sendData(self, data):
     self.transport.write(encode_header(data))
Esempio n. 4
0
def send_message(s, request):
    header_string = encode_header(request)
    send_all(s, header_string)