Hello community,

here is the log from the commit of package dynamips for openSUSE:Factory 
checked in at 2014-09-26 10:52:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dynamips (Old)
 and      /work/SRC/openSUSE:Factory/.dynamips.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dynamips"

Changes:
--------
--- /work/SRC/openSUSE:Factory/dynamips/dynamips.changes        2014-07-12 
17:14:57.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.dynamips.new/dynamips.changes   2014-09-26 
11:21:36.000000000 +0200
@@ -1,0 +2,13 @@
+Thu Sep 25 08:38:11 UTC 2014 - [email protected]
+
+- new upstream version 0.2.14
+  * Add optional argument 'format' to hypervisor commands 'send_con_msg' and 
+    'send_aux_msg'. Report "X byte(s) written" on succeess.
+  * String formats:
+    - plain - plain string (default, old behavior)
+    - base64 - base64 encoded string
+  * Fix issue with 7200 IOS crashing after restart
+  * Fixed issue #49 - IOS crashes after router restart
+  * Fixed issue #50 - vm send_con_msg
+
+-------------------------------------------------------------------

Old:
----
  dynamips-0.2.13.tar.gz

New:
----
  dynamips-0.2.14.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dynamips.spec ++++++
--- /var/tmp/diff_new_pack.yz8KbB/_old  2014-09-26 11:21:37.000000000 +0200
+++ /var/tmp/diff_new_pack.yz8KbB/_new  2014-09-26 11:21:37.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           dynamips
-Version:        0.2.13
+Version:        0.2.14
 Release:        0
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  dos2unix

++++++ dynamips-0.2.13.tar.gz -> dynamips-0.2.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/CMakeLists.txt 
new/dynamips-0.2.14/CMakeLists.txt
--- old/dynamips-0.2.13/CMakeLists.txt  2014-07-10 17:49:35.000000000 +0200
+++ new/dynamips-0.2.14/CMakeLists.txt  2014-09-23 20:59:26.000000000 +0200
@@ -25,7 +25,7 @@
 message ( STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}" )
 
 project ( dynamips C )
-set ( DYNAMIPS_VERSION_TRAIN 0.2.13 )
+set ( DYNAMIPS_VERSION_TRAIN 0.2.14 )
 set ( DYNAMIPS_VERSION_SUB )
 
 include ( utils )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/ChangeLog 
new/dynamips-0.2.14/ChangeLog
--- old/dynamips-0.2.13/ChangeLog       2014-07-10 17:49:35.000000000 +0200
+++ new/dynamips-0.2.14/ChangeLog       2014-09-23 20:59:26.000000000 +0200
@@ -2924,3 +2924,23 @@
 +--------------------.
 | Release:  v0.2.13   |
 +--------------------'
+
+10-Jul-2014 to 01-Sep-2014
+--------------------------
+   - Add -DUSE_UNSTABLE when making an unstable build (MacOSX)
+   - Add optional argument 'format' to hypervisor commands
+     - 'send_con_msg' and 'send_aux_msg'.
+     - Report "X byte(s) written" on succeess.
+     - String formats:
+        * plain - plain string (default, old behavior)
+        * base64 - base64 encoded string
+   - Use an auxiliary variable to record configured ram size for npe-400
+
+Fixed issue #49 - IOS crashes after router restart
+Fixed issue #50 - vm send_con_msg
+Fixed issue #55 - 'unstable' installs 'stable' version on Mac OS X
+
++--------------------+
+| Release:  v0.2.14  |
++--------------------+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/README.hypervisor 
new/dynamips-0.2.14/README.hypervisor
--- old/dynamips-0.2.13/README.hypervisor       2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/README.hypervisor       2014-09-23 20:59:26.000000000 
+0200
@@ -224,11 +224,29 @@
   The instance must exist, "cpu_id" is ignored.
   (since version 0.2.8-RC5-community)
 
-* "vm send_con_msg <instance_name> <str>" : 
-  Send a message on the console. (since version 0.2.6-RC3)
+* "vm send_con_msg <instance_name> <str> [<format>]" : 
+  (since version 0.2.6-RC3) Send a message on the console.
+  It only writes the bytes that fit in the console buffer.
 
-* "vm send_aux_msg <instance_name> <str>" : 
-  Send a message on the AUX port. (since version 0.2.6-RC3)
+  (since version 0.2.14)
+  The optional argument <format> indicates the string format.
+  On success it will report "X byte(s) written".
+
+  String formats:
+   * plain - plain string (default, old behavior)
+   * base64 - base64 encoded string
+
+* "vm send_aux_msg <instance_name> <str> [<format>]" : 
+  (since version 0.2.6-RC3) Send a message on the AUX port.
+  It only writes the bytes that fit in the aux buffer.
+
+  (since version 0.2.14)
+  The optional argument <format> indicates the string format.
+  On success it will report "X byte(s) written".
+
+  String formats:
+   * plain - plain string (default, old behavior)
+   * base64 - base64 encoded string
 
 * "vm slot_bindings <instance_name>" : 
   Show slot bindings. (since version 0.2.8-RC1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/RELEASE-NOTES 
new/dynamips-0.2.14/RELEASE-NOTES
--- old/dynamips-0.2.13/RELEASE-NOTES   2014-07-10 17:49:35.000000000 +0200
+++ new/dynamips-0.2.14/RELEASE-NOTES   2014-09-23 20:59:26.000000000 +0200
@@ -1,31 +1,29 @@
 Release Notes for Cisco router simulator (Dynamips)
 ===================================================
 
-Version:  v0.2.13
+Version:  v0.2.14
 
-Release date:  Thursday, July 10, 2014 (2014-07-10)
+Release date:  Tuesday, September 23, 2014 (2014-09-23)
 
-Source code:  https://github.com/GNS3/dynamips/tree/v0.2.13
+Source code:  https://github.com/GNS3/dynamips/tree/v0.2.14
 
 License: GNU GPLv2
 
 
-What's New since v0.2.12
+What's New since v0.2.13
 ========================
 
-Identify 10Mbps Ethernet chip in dev_am79c971 as Am79C970A. IOS said "AMD 
Unknown", now it's "AMD Presidio".
-Add CMake build system.
-Enable the Travis Continual Integration service.
-Fix Wireshark error "Frame too long" (thread safety issue could cause bad 
capture file data)
-Make a single FAT16 partition when pcmcia disks are first created.
-Improve packet transmission performance of i8254x (C7200-IO-2FE/E, 
C7200-I/O-GE+E, PA-2FE-TX, PA-GE) by sending up to 16 packets at a time.
-  - Code by candlerb (merged)
-Cleanups.
-
-Final fix for issue #9 - Reproducable crash
-Fixed issue #38 - Unknown file system detected
-Fixed issue #41 - "Frame is Too Long" error in Wireshark
-Merge pull request #45 from candlerb/candlerb/txperformance
+Allow building unstable version on MacOSX
+Add optional argument 'format' to hypervisor commands 'send_con_msg' and 
+'send_aux_msg'. Report "X byte(s) written" on succeess.
+    - String formats:
+        * plain - plain string (default, old behavior)
+        * base64 - base64 encoded string
+Fix issue with 7200 IOS crashing after restart
+
+Fixed issue #49 - IOS crashes after router restart
+Fixed issue #50 - vm send_con_msg
+Fixed issue #55 - 'unstable' installs 'stable' version on Mac OS X
 
 
 Known Issues
@@ -40,8 +38,8 @@
 Packet transmission rate is limited.
   - https://github.com/GNS3/dynamips/issues/46
 
-IOS crashes after router restart
-  - https://github.com/GNS3/dynamips/issues/49
+c1700 IOS Images start once and then fail to boot on second boot
+  - https://github.com/GNS3/dynamips/issues/54
 
 There is lots of missing hardware functionality.
 There are memory leaks.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/common/dev_c7200.c 
new/dynamips-0.2.14/common/dev_c7200.c
--- old/dynamips-0.2.13/common/dev_c7200.c      2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/common/dev_c7200.c      2014-09-23 20:59:26.000000000 
+0200
@@ -329,6 +329,7 @@
 
    memset(router,0,sizeof(*router));
    router->vm = vm;
+   router->npe400_ram_size = C7200_DEFAULT_RAM_SIZE;
    vm->hw_data = router;
    vm->elf_machine_id = C7200_ELF_MACHINE_ID;
 
@@ -1195,12 +1196,15 @@
    /* 
     * Add supplemental memory (as "iomem") if we have more than 256 Mb.
     */
-   if (vm->ram_size > C7200_BASE_RAM_LIMIT) {
-      vm->iomem_size = vm->ram_size - C7200_BASE_RAM_LIMIT;
+   if (VM_C7200(vm)->npe400_ram_size > C7200_BASE_RAM_LIMIT) {
+      vm->iomem_size = VM_C7200(vm)->npe400_ram_size - C7200_BASE_RAM_LIMIT;
       vm->ram_size = C7200_BASE_RAM_LIMIT;
-      dev_ram_init(vm,"ram1",vm->ram_mmap,TRUE,NULL,vm->sparse_mem,
+      dev_ram_init(vm,"iomem",vm->ram_mmap,TRUE,NULL,vm->sparse_mem,
                    C7200_IOMEM_ADDR,vm->iomem_size*1048576);
    }
+   else {
+      vm->iomem_size = 0;
+   }
 
    /* Initialize the Galileo GT-64120 system controller */
    if (c7200_init_gt64120(router) == -1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/common/dev_c7200.h 
new/dynamips-0.2.14/common/dev_c7200.h
--- old/dynamips-0.2.13/common/dev_c7200.h      2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/common/dev_c7200.h      2014-09-23 20:59:26.000000000 
+0200
@@ -164,6 +164,9 @@
    /* Associated VM instance */
    vm_instance_t *vm;
 
+   /* RAM size for npe-400 */
+   m_uint32_t npe400_ram_size;
+
    /* MV64460 device for NPE-G2 */
    struct mv64460_data *mv64460_sysctr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/common/dev_vtty.c 
new/dynamips-0.2.14/common/dev_vtty.c
--- old/dynamips-0.2.13/common/dev_vtty.c       2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/common/dev_vtty.c       2014-09-23 20:59:26.000000000 
+0200
@@ -618,21 +618,21 @@
    return(0);
 }
 
-/* Store a string in the FIFO buffer */
-int vtty_store_str(vtty_t *vtty,char *str)
+/* Store arbritary data in the FIFO buffer */
+int vtty_store_data(vtty_t *vtty,char *data, int len)
 {
-   if (!vtty)
-      return(0);
+   int bytes;
 
-   while(*str != 0) {
-      if (vtty_store(vtty,*str) == -1)
-         return(-1);
-      
-      str++;
+   if (!vtty || !data || len < 0)
+      return(-1); // invalid argument
+
+   for (bytes = 0; bytes < len; bytes++) {
+      if (vtty_store(vtty,data[bytes]) == -1)
+         break;
    }
 
    vtty->input_pending = TRUE;
-   return(0);
+   return(bytes);
 }
 
 /* Store CTRL+C in buffer */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/common/dev_vtty.h 
new/dynamips-0.2.14/common/dev_vtty.h
--- old/dynamips-0.2.13/common/dev_vtty.h       2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/common/dev_vtty.h       2014-09-23 20:59:26.000000000 
+0200
@@ -101,8 +101,8 @@
 /* delete a virtual tty */
 void vtty_delete(vtty_t *vtty);
 
-/* Store a string in the FIFO buffer */
-int vtty_store_str(vtty_t *vtty,char *str);
+/* Store arbritary data in the FIFO buffer */
+int vtty_store_data(vtty_t *vtty,char *data, int len);
 
 /* read a character from the buffer (-1 if the buffer is empty) */
 int vtty_get_char(vtty_t *vtty);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/common/dynamips.c 
new/dynamips-0.2.14/common/dynamips.c
--- old/dynamips-0.2.13/common/dynamips.c       2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/common/dynamips.c       2014-09-23 20:59:26.000000000 
+0200
@@ -74,7 +74,7 @@
 const char *sw_version = DYNAMIPS_VERSION"-"JIT_ARCH;
 
 /* Software version tag */
-const char *sw_version_tag = "2014071016";
+const char *sw_version_tag = "2014092320";
 
 /* Hypervisor */
 int hypervisor_mode = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/man/hypervisor_mode.7 
new/dynamips-0.2.14/man/hypervisor_mode.7
--- old/dynamips-0.2.13/man/hypervisor_mode.7   2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/man/hypervisor_mode.7   2014-09-23 20:59:26.000000000 
+0200
@@ -274,11 +274,33 @@
 The instance must exist, "cpu_id" is ignored.
 (since version 0.2.8\-RC5\-community)
 .TP
-.B vm send_con_msg <instance_name> <str>
-Send a message on the console. (since version 0.2.6\-RC3)
+.B vm send_con_msg <instance_name> <str> [<format>]
+(since version 0.2.6\-RC3) Send a message on the console. 
+It only writes the bytes that fit in the console buffer.
+.RS
+.PP
+(since version 0.2.14)
+The optional argument <format> indicates the string format.
+On success it will report "X byte(s) written".
+.PP
+String formats:
+ * plain - plain string (default, old behavior)
+ * base64 - base64 encoded string
+.RE
 .TP
-.B vm send_aux_msg <instance_name> <str>
-Send a message on the AUX port. (since version 0.2.6\-RC3)
+.B vm send_aux_msg <instance_name> <str> [<format>]
+(since version 0.2.6\-RC3) Send a message on the AUX port.
+It only writes the bytes that fit in the aux buffer.
+.RS
+.PP
+(since version 0.2.14)
+The optional argument <format> indicates the string format.
+On success it will report "X byte(s) written".
+.PP
+String formats:
+ * plain - plain string (default, old behavior)
+ * base64 - base64 encoded string
+.RE
 .TP
 .B vm slot_bindings <instance_name>
 Show slot bindings. (since version 0.2.8\-RC1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/stable/hv_vm.c 
new/dynamips-0.2.14/stable/hv_vm.c
--- old/dynamips-0.2.13/stable/hv_vm.c  2014-07-10 17:49:35.000000000 +0200
+++ new/dynamips-0.2.14/stable/hv_vm.c  2014-09-23 20:59:26.000000000 +0200
@@ -301,6 +301,10 @@
 
    vm->ram_size = atoi(argv[1]);
 
+   /* XXX npe-400 can split excess ram into iomem, adjusting ram_size */
+   if (vm->elf_machine_id == C7200_ELF_MACHINE_ID)
+      VM_C7200(vm)->npe400_ram_size = vm->ram_size;
+
    vm_release(vm);
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
    return(0);
@@ -856,31 +860,75 @@
 /* Send a message on the console */
 static int cmd_send_con_msg(hypervisor_conn_t *conn,int argc,char *argv[])
 {
-   vm_instance_t *vm;
+   vm_instance_t *vm = NULL;
+   const char *format = NULL;
+   char *data = NULL;
+   int len,written;
 
    if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM)))
       return(-1);
 
-   vtty_store_str(vm->vtty_con,argv[1]);
+   format = (argc > 2)? argv[2]: "plain";
+   len = (int)strlen(argv[1]);
+   written = -1;
+
+   if (strcmp(format,"plain") == 0 && len >= 0) {
+      written = vtty_store_data(vm->vtty_con,argv[1],len);
+   }
+   else if (strcmp(format,"base64") == 0 && len >= 0) {
+      data = malloc(len+1);
+      len = base64_decode((unsigned char*)data,(const unsigned char 
*)argv[1],len);
+      written = vtty_store_data(vm->vtty_con,data,len);
+      free(data);
+      data = NULL;
+   }
 
    vm_release(vm);
-   hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
-   return(0);
+   if (written < 0) {
+      hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter");
+      return(-1);
+   }
+   else {
+      hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written);
+      return(0);
+   }
 }
 
 /* Send a message on the AUX port */
 static int cmd_send_aux_msg(hypervisor_conn_t *conn,int argc,char *argv[])
 {
-   vm_instance_t *vm;
+   vm_instance_t *vm = NULL;
+   const char *format = NULL;
+   char *data = NULL;
+   int len,written;
 
    if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM)))
       return(-1);
 
-   vtty_store_str(vm->vtty_aux,argv[1]);
+   format = (argc > 2)? argv[2]: "plain";
+   len = (int)strlen(argv[1]);
+   written = -1;
+
+   if (strcmp(format,"plain") == 0 && len >= 0) {
+      written = vtty_store_data(vm->vtty_aux,argv[1],len);
+   }
+   else if (strcmp(format,"base64") == 0 && len >= 0) {
+      data = malloc(len+1);
+      len = base64_decode((unsigned char*)data,(const unsigned char 
*)argv[1],len);
+      written = vtty_store_data(vm->vtty_aux,data,len);
+      free(data);
+      data = NULL;
+   }
 
    vm_release(vm);
-   hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
-   return(0);
+   if (written < 0) {
+      hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter");
+      return(-1);
+   }
+   else {
+      hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written);
+      return(0);
+   }
 }
 
 
@@ -1237,8 +1285,8 @@
    { "cpu_usage", 2, 2, cmd_show_cpu_usage, NULL },
    { "suspend", 1, 1, cmd_suspend, NULL },
    { "resume", 1, 1, cmd_resume, NULL },
-   { "send_con_msg", 2, 2, cmd_send_con_msg, NULL },
-   { "send_aux_msg", 2, 2, cmd_send_aux_msg, NULL },
+   { "send_con_msg", 2, 3, cmd_send_con_msg, NULL },
+   { "send_aux_msg", 2, 3, cmd_send_aux_msg, NULL },
    { "slot_bindings", 1, 1, cmd_slot_bindings, NULL },
    { "slot_nio_bindings", 2, 2, cmd_slot_nio_bindings, NULL },
    { "slot_add_binding", 4, 4, cmd_slot_add_binding, NULL },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/unstable/CMakeLists.txt 
new/dynamips-0.2.14/unstable/CMakeLists.txt
--- old/dynamips-0.2.13/unstable/CMakeLists.txt 2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/unstable/CMakeLists.txt 2014-09-23 20:59:26.000000000 
+0200
@@ -37,6 +37,8 @@
 endif ( NOT BUILD_DYNAMIPS_UNSTABLE )
 
 # dynamips_*_unstable
+add_definitions( "-DUSE_UNSTABLE" )
+
 set ( _files
    "${COMMON}/mempool.c"
    "${COMMON}/registry.c"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dynamips-0.2.13/unstable/hv_vm.c 
new/dynamips-0.2.14/unstable/hv_vm.c
--- old/dynamips-0.2.13/unstable/hv_vm.c        2014-07-10 17:49:35.000000000 
+0200
+++ new/dynamips-0.2.14/unstable/hv_vm.c        2014-09-23 20:59:26.000000000 
+0200
@@ -322,6 +322,10 @@
 
    vm->ram_size = atoi(argv[1]);
 
+   /* XXX npe-400 can split excess ram into iomem, adjusting ram_size */
+   if (vm->elf_machine_id == C7200_ELF_MACHINE_ID)
+      VM_C7200(vm)->npe400_ram_size = vm->ram_size;
+
    vm_release(vm);
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
    return(0);
@@ -877,31 +881,75 @@
 /* Send a message on the console */
 static int cmd_send_con_msg(hypervisor_conn_t *conn,int argc,char *argv[])
 {
-   vm_instance_t *vm;
+   vm_instance_t *vm = NULL;
+   const char *format = NULL;
+   char *data = NULL;
+   int len,written;
 
    if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM)))
       return(-1);
 
-   vtty_store_str(vm->vtty_con,argv[1]);
+   format = (argc > 2)? argv[2]: "plain";
+   len = (int)strlen(argv[1]);
+   written = -1;
+
+   if (strcmp(format,"plain") == 0 && len >= 0) {
+      written = vtty_store_data(vm->vtty_con,argv[1],len);
+   }
+   else if (strcmp(format,"base64") == 0 && len >= 0) {
+      data = malloc(len+1);
+      len = base64_decode((unsigned char*)data,(const unsigned char 
*)argv[1],len);
+      written = vtty_store_data(vm->vtty_con,data,len);
+      free(data);
+      data = NULL;
+   }
 
    vm_release(vm);
-   hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
-   return(0);
+   if (written < 0) {
+      hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter");
+      return(-1);
+   }
+   else {
+      hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written);
+      return(0);
+   }
 }
 
 /* Send a message on the AUX port */
 static int cmd_send_aux_msg(hypervisor_conn_t *conn,int argc,char *argv[])
 {
-   vm_instance_t *vm;
+   vm_instance_t *vm = NULL;
+   const char *format = NULL;
+   char *data = NULL;
+   int len,written;
 
    if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM)))
       return(-1);
 
-   vtty_store_str(vm->vtty_aux,argv[1]);
+   format = (argc > 2)? argv[2]: "plain";
+   len = (int)strlen(argv[1]);
+   written = -1;
+
+   if (strcmp(format,"plain") == 0 && len >= 0) {
+      written = vtty_store_data(vm->vtty_aux,argv[1],len);
+   }
+   else if (strcmp(format,"base64") == 0 && len >= 0) {
+      data = malloc(len+1);
+      len = base64_decode((unsigned char*)data,(const unsigned char 
*)argv[1],len);
+      written = vtty_store_data(vm->vtty_aux,data,len);
+      free(data);
+      data = NULL;
+   }
 
    vm_release(vm);
-   hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
-   return(0);
+   if (written < 0) {
+      hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter");
+      return(-1);
+   }
+   else {
+      hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written);
+      return(0);
+   }
 }
 
 
@@ -1259,8 +1307,8 @@
    { "cpu_usage", 2, 2, cmd_show_cpu_usage, NULL },
    { "suspend", 1, 1, cmd_suspend, NULL },
    { "resume", 1, 1, cmd_resume, NULL },
-   { "send_con_msg", 2, 2, cmd_send_con_msg, NULL },
-   { "send_aux_msg", 2, 2, cmd_send_aux_msg, NULL },
+   { "send_con_msg", 2, 3, cmd_send_con_msg, NULL },
+   { "send_aux_msg", 2, 3, cmd_send_aux_msg, NULL },
    { "slot_bindings", 1, 1, cmd_slot_bindings, NULL },
    { "slot_nio_bindings", 2, 2, cmd_slot_nio_bindings, NULL },
    { "slot_add_binding", 4, 4, cmd_slot_add_binding, NULL },

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to