Skip to content

Commit

Permalink
And now with screenshots
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Bradly committed Mar 5, 2009
1 parent f4f9f5d commit 74dcd8e
Show file tree
Hide file tree
Showing 6 changed files with 262 additions and 178 deletions.
2 changes: 1 addition & 1 deletion extconf.rb
@@ -1,6 +1,6 @@
require 'mkmf'

$CFLAGS = (ENV['CFLAGS']||"") + "-Wall"
$CFLAGS = (ENV['CFLAGS']||"") + "-Wall -g"
$LDFLAGS = (ENV["LDFLAGS"]||"")+"-lvixAllProducts"

have_library('vixAllProducts','VixHost_Connect')
Expand Down
11 changes: 11 additions & 0 deletions functions.h
Expand Up @@ -23,6 +23,17 @@ VALUE _copy_file_from_guest_to_host(VALUE,VALUE,VALUE,VALUE);
VALUE _copy_file_from_host_to_guest(VALUE,VALUE,VALUE,VALUE);
VALUE _create_directory_in_guest(VALUE, VALUE, VALUE);
VALUE _create_temp_file_in_guest(VALUE, VALUE);
VALUE _delete_directory_in_guest(VALUE, VALUE, VALUE);
VALUE _delete_file_in_guest(VALUE, VALUE, VALUE);
VALUE _directory_exists_in_guest(VALUE, VALUE, VALUE);
VALUE _login_in_guest(VALUE, VALUE, VALUE, VALUE);
VALUE _logout_from_guest(VALUE, VALUE);

/* Misc functions */
VALUE _getproperty(VALUE, VALUE, VALUE);
VALUE _getproperty_int(VixHandle, int);
VALUE _getproperty_str(VixHandle, int);
VALUE _getproperty_bool(VixHandle, int);
VALUE _getproperty_handle(VixHandle, int);
VALUE _getproperty_int64(VixHandle, int);
VALUE _getproperty_blob(VixHandle, int);
108 changes: 74 additions & 34 deletions guest.c
@@ -1,34 +1,39 @@
#include <stdio.h>
#include <ruby.h>
#include "vix.h"
#include "functions.h"

VALUE
_capture_screen_image(VALUE self, VALUE rvm)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

VALUE pngdata;

job = VixVM_CaptureScreenImage(vm, VIX_CAPTURESCREENFORMAT_PNG,
VIX_INVALID_HANDLE, NULL, NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);

if(VIX_FAILED(err))
{
fprintf(stderr,"Failed to capture screen on virtual machine: %s\n", Vix_GetErrorText(err,NULL));
Vix_ReleaseHandle(job);
fprintf(stderr,"Failed to capture screen on virtual machine: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

/* Read the image from teh Job properties */
pngdata = _getproperty_blob(job, VIX_PROPERTY_JOB_RESULT_SCREEN_IMAGE_DATA);
Vix_ReleaseHandle(job);
return Qtrue;

return pngdata;
}

VALUE
_wait_for_tools(VALUE self, VALUE rvm, VALUE rtimeout)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

Expand All @@ -37,20 +42,21 @@ _wait_for_tools(VALUE self, VALUE rvm, VALUE rtimeout)
job = VixVM_WaitForToolsInGuest(vm,timeout,NULL,NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);
Vix_ReleaseHandle(job);
if(VIX_ERROR(err))

if(VIX_FAILED(err))
{
fprintf(stderr,"Error waiting for VMtools in guest: %n\n",
Vix_GetErrorTest(err,NULL));
fprintf(stderr,"Error waiting for VMtools in guest: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

return Qtrue;o
return Qtrue;
}

VALUE
_copy_file_from_guest_to_host(VALUE self, VALUE rvm, VALUE rsrc, VALUE rdst)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

Expand All @@ -76,7 +82,7 @@ _copy_file_from_guest_to_host(VALUE self, VALUE rvm, VALUE rsrc, VALUE rdst)
VALUE
_copy_file_from_host_to_guest(VALUE self, VALUE rvm, VALUE rsrc, VALUE rdst)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

Expand All @@ -103,7 +109,7 @@ _copy_file_from_host_to_guest(VALUE self, VALUE rvm, VALUE rsrc, VALUE rdst)
VALUE
_create_directory_in_guest(VALUE self, VALUE rvm, VALUE rpath)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

Expand All @@ -126,7 +132,7 @@ _create_directory_in_guest(VALUE self, VALUE rvm, VALUE rpath)
VALUE
_create_temp_file_in_guest(VALUE self, VALUE rvm)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;
char *tempfilepath;
Expand All @@ -150,7 +156,7 @@ _create_temp_file_in_guest(VALUE self, VALUE rvm)
VALUE
_delete_directory_in_guest(VALUE self, VALUE rvm, VALUE rpath)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

Expand All @@ -173,51 +179,95 @@ _delete_directory_in_guest(VALUE self, VALUE rvm, VALUE rpath)
VALUE
_delete_file_in_guest(VALUE self, VALUE rvm, VALUE rpath)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

char *path = StringValueCStr(rpath);

job = VixVM_DeleteFileInGuest(vm, path, NULL, NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);
Vix_ReleaseHandle(job);

if(VIX_FAILED(err))
{
fprintf(stderr,"Failed to delete file on guest: %s\n", Vix_GetErrorText(err,NULL));
Vix_ReleaseHandle(job);
fprintf(stderr,"Failed to delete file on guest: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

Vix_ReleaseHandle(job);

return Qtrue;
}

VALUE
_directory_exists_in_guest(VALUE self, VALUE rvm, VALUE rpath)
{
VixHandle vm = NUM2INT(rvm);
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

char *path = StringValueCStr(rpath);

job = VixVM_DirectoryExistsInGuest(vm, path, NULL, NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);
Vix_ReleaseHandle(job);

if(VIX_FAILED(err))
{
//fprintf(stderr,"Failed to delete file on guest: %s\n", Vix_GetErrorText(err,NULL));
Vix_ReleaseHandle(job);
fprintf(stderr,"Failed to check directory on guest: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

return Qtrue;
}


VALUE
_login_in_guest(VALUE self, VALUE rvm, VALUE ruser, VALUE rpass)
{
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;
char *user=StringValueCStr(ruser);
char *pass=StringValueCStr(rpass);

job = VixVM_LoginInGuest(vm, user, pass, 0, NULL, NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);
Vix_ReleaseHandle(job);

if(VIX_FAILED(err))
{
fprintf(stderr,"Failed to login on guest: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

return Qtrue;
}

VALUE
_logout_from_guest(VALUE self, VALUE rvm)
{
VixHandle vm = NUM2INT(rb_iv_get(rvm,"@handle"));
VixHandle job;
VixError err;

job = VixVM_LogoutFromGuest(vm, NULL, NULL);
err = VixJob_Wait(job, VIX_PROPERTY_NONE);
Vix_ReleaseHandle(job);

if(VIX_FAILED(err))
{
fprintf(stderr,"Failed to logout of guest: %s\n",
Vix_GetErrorText(err,NULL));
return Qnil;
}

return Qtrue;
}


/*
VALUE
Expand Down Expand Up @@ -256,16 +306,6 @@ _list_processes_in_guest(VALUE self, VALUE rvm)
{
}
VALUE
_login_in_guest(VALUE self, VALUE rvm)
{
}
VALUE
_logout_from_guest(VALUE self, VALUE rvm)
{
}
VALUE
_open_url_in_guest(VALUE self, VALUE rvm)
{
Expand Down

0 comments on commit 74dcd8e

Please sign in to comment.