void Server::sendImage() { //screenshot(); QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << (quint32)0; /*******************************/ virConnectPtr conn = NULL; /* the hypervisor connection */ virDomainPtr dom = NULL; /* the domain to be screenshotted */ virStreamPtr st = NULL; char *mimetype = NULL; conn = virConnectOpen("qemu:///system"); if (conn == NULL) { fprintf(stderr, "Failed to connect to hypervisor\n"); if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } /* Find the domain of the given id */ dom = virDomainLookupByName(conn, "win7-1"); if (dom == NULL) { fprintf(stderr, "Failed to connect to hypervisor\n"); if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } st = virStreamNew(conn, 0); mimetype = virDomainScreenshot(dom, st, 0, 0); if(mimetype == NULL) { fprintf(stderr, "Failed in virDomainScreenshot funcation\n"); if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if(virStreamRecvAll(st, mysink, &out) < 0) { fprintf(stderr, "Failed in virStreamRecvAll funcation\n"); if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if (virStreamFinish(st) < 0) { fprintf(stderr, "Failed in virStreamFinish funcation\n"); if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if(st != NULL) virStreamFree(st); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); /*******************************/ out.device()->seek(0); out << (quint32)(block.size() - sizeof(quint32)); QTcpSocket *clientConnection = tcpServer->nextPendingConnection(); connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater())); clientConnection->write(block); clientConnection->disconnectFromHost(); QTextStream info(stdout); info << tr("has sended %1 bytes\n").arg(block.size() - 4); }
static bool cmdVolDownload(vshControl *ctl, const vshCmd *cmd) { const char *file = NULL; virStorageVolPtr vol = NULL; bool ret = false; int fd = -1; virStreamPtr st = NULL; const char *name = NULL; unsigned long long offset = 0, length = 0; bool created = false; if (!vshConnectionUsability(ctl, ctl->conn)) return false; if (vshCommandOptULongLong(cmd, "offset", &offset) < 0) { vshError(ctl, _("Unable to parse integer")); return false; } if (vshCommandOptULongLong(cmd, "length", &length) < 0) { vshError(ctl, _("Unable to parse integer")); return false; } if (!(vol = vshCommandOptVol(ctl, cmd, "vol", "pool", &name))) return false; if (vshCommandOptString(cmd, "file", &file) < 0) { vshError(ctl, _("file must not be empty")); goto cleanup; } if ((fd = open(file, O_WRONLY|O_CREAT|O_EXCL, 0666)) < 0) { if (errno != EEXIST || (fd = open(file, O_WRONLY|O_TRUNC, 0666)) < 0) { vshError(ctl, _("cannot create %s"), file); goto cleanup; } } else { created = true; } st = virStreamNew(ctl->conn, 0); if (virStorageVolDownload(vol, st, offset, length, 0) < 0) { vshError(ctl, _("cannot download from volume %s"), name); goto cleanup; } if (virStreamRecvAll(st, vshStreamSink, &fd) < 0) { vshError(ctl, _("cannot receive data from volume %s"), name); goto cleanup; } if (VIR_CLOSE(fd) < 0) { vshError(ctl, _("cannot close file %s"), file); virStreamAbort(st); goto cleanup; } if (virStreamFinish(st) < 0) { vshError(ctl, _("cannot close volume %s"), name); goto cleanup; } ret = true; cleanup: VIR_FORCE_CLOSE(fd); if (!ret && created) unlink(file); if (vol) virStorageVolFree(vol); if (st) virStreamFree(st); return ret; }
void Server::screenshot() { virConnectPtr conn = NULL; /* the hypervisor connection */ virDomainPtr dom = NULL; /* the domain to be screenshotted */ virStreamPtr st = NULL; char *mimetype = NULL; FILE *fp = NULL; conn = virConnectOpen("qemu:///system"); if (conn == NULL) { fprintf(stderr, "Failed to connect to hypervisor\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } /* Find the domain of the given id */ dom = virDomainLookupByName(conn, "win7-1"); if (dom == NULL) { fprintf(stderr, "Failed to connect to hypervisor\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } st = virStreamNew(conn, 0); mimetype = virDomainScreenshot(dom, st, 0, 0); if(mimetype == NULL) { fprintf(stderr, "Failed in virDomainScreenshot funcation\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } fp = fopen("shot.ppm", "w"); if(fp == NULL) { fprintf(stderr, "Failed in fopen funcation\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if(virStreamRecvAll(st, mysink, fp) < 0) { fprintf(stderr, "Failed in virStreamRecvAll funcation\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if (virStreamFinish(st) < 0) { fprintf(stderr, "Failed in virStreamFinish funcation\n"); if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); return; } if(st != NULL) virStreamFree(st); if(fp != NULL) fclose(fp); if(mimetype !=NULL) free(mimetype); if (dom != NULL) virDomainFree(dom); if (conn != NULL) virConnectClose(conn); }