1 /****************************************************************************
2 **
3 ** Copyright (C) 2008-2010 Andrey Rijov <ANDron142@yandex.ru>
4 ** Copyright (C) 2016 Tobias Gläßer (Qt5 port)
5 **
6 ** This file is part of AQEMU.
7 **
8 ** This program is free software; you can redistribute it and/or modify
9 ** it under the terms of the GNU General Public License as published by
10 ** the Free Software Foundation; either version 2 of the License.
11 **
12 ** This program is distributed in the hope that it will be useful,
13 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ** GNU General Public License for more details.
16 **
17 ** You should have received a copy of the GNU General Public License
18 ** along with this program; if not, write to the Free Software
19 ** Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 ** Boston, MA 02110-1301, USA.
21 **
22 ****************************************************************************/
23
24 #include <QRegExp>
25 #include <QUuid>
26 #include <QSettings>
27 #include <QFile>
28 #include <QDir>
29 #include <QStringList>
30 #include <QTextStream>
31
32 #include "VM.h"
33 #include "VM_Devices.h"
34 #include "Utils.h"
35 #include "HDD_Image_Info.h"
36 #include "System_Info.h"
37
38 using namespace TinyXML2QDomWrapper;
39
40 // Available_Devices ---------------------------------------------------------
41
Available_Devices()42 Available_Devices::Available_Devices()
43 {
44 CPU_List << Device_Map( QObject::tr("Default"), "" );
45 Machine_List << Device_Map( QObject::tr("Default"), "" );
46 Network_Card_List << Device_Map( QObject::tr("Default"), "" );
47 Video_Card_List << Device_Map( QObject::tr("Default"), "" );
48
49 PSO_SMP_Count = 1;
50 PSO_SMP_Cores = false;
51 PSO_SMP_Threads = false;
52 PSO_SMP_Sockets = false;
53 PSO_SMP_MaxCPUs = false;
54
55 PSO_Device = false;
56 PSO_Device_USB_EHCI = false;
57
58 PSO_Drive = false;
59 PSO_Drive_File = false;
60 PSO_Drive_If = false;
61 PSO_Drive_Bus_Unit = false;
62 PSO_Drive_Index = false;
63 PSO_Drive_Media = false;
64 PSO_Drive_Cyls_Heads_Secs_Trans = false;
65 PSO_Drive_Snapshot = false;
66 PSO_Drive_Cache = false;
67 PSO_Drive_AIO = false;
68 PSO_Drive_Format = false;
69 PSO_Drive_Serial = false;
70 PSO_Drive_ADDR = false;
71 PSO_Drive_Boot = false;
72
73 PSO_Boot_Order = false;
74 PSO_Initial_Graphic_Mode = false;
75 PSO_No_FB_Boot_Check = false;
76 PSO_Win2K_Hack = false;
77 PSO_Kernel_KQEMU = false;
78 PSO_No_ACPI = false;
79 PSO_KVM = false;
80 PSO_RTC_TD_Hack = false;
81
82 PSO_MTDBlock = false;
83 PSO_SD = false;
84 PSO_PFlash = false;
85 PSO_Name = false;
86 PSO_Curses = false;
87 PSO_No_Frame = false;
88 PSO_Alt_Grab = false;
89 PSO_No_Quit = false;
90 PSO_SDL = false;
91 PSO_Portrait = false;
92 PSO_No_Shutdown = false;
93 PSO_Startdate = false;
94 PSO_Show_Cursor = false;
95 PSO_Bootp = false;
96
97 PSO_Net_type_vde = false;
98 PSO_Net_type_dump = false;
99
100 PSO_Net_name = false;
101 PSO_Net_addr = false;
102 PSO_Net_vectors = false;
103
104 PSO_Net_net = false;
105 PSO_Net_host = false;
106 PSO_Net_restrict = false;
107 PSO_Net_dhcpstart = false;
108 PSO_Net_dns = false;
109 PSO_Net_tftp = false;
110 PSO_Net_bootfile = false;
111 PSO_Net_smb = false;
112 PSO_Net_hostfwd = false;
113 PSO_Net_guestfwd = false;
114
115 PSO_Net_ifname = false;
116 PSO_Net_script = false;
117 PSO_Net_downscript = false;
118 PSO_Net_sndbuf = false;
119 PSO_Net_vnet_hdr = false;
120 PSO_Net_vhost = false;
121 PSO_Net_vhostfd = false;
122
123 PSO_Net_listen = false;
124 PSO_Net_connect = false;
125
126 PSO_Net_mcast = false;
127
128 PSO_Net_sock = false;
129 PSO_Net_port = false;
130 PSO_Net_group = false;
131 PSO_Net_mode = false;
132
133 PSO_Net_file = false;
134 PSO_Net_len = false;
135
136 PSO_Enable_KVM = false;
137 PSO_No_KVM = false;
138 PSO_No_KVM_IRQChip = false;
139 PSO_No_KVM_Pit = false;
140 PSO_No_KVM_Pit_Reinjection = false;
141 PSO_Enable_Nesting = false;
142 PSO_KVM_Shadow_Memory = false;
143
144 PSO_TFTP = false;
145 PSO_SMB = false;
146 PSO_Std_VGA = false;
147
148 PSO_SPICE = false;
149 PSO_QXL = false;
150 }
151
152 //===========================================================================
153
154 // VM_Nativ_Storage_Device --------------------------------------------------
155
Emulator()156 Emulator::Emulator()
157 {
158 Name = "";
159 Path = "";
160 Default = false;
161 Check_Version = false;
162 Check_Available_Options = false;
163 Force_Version = false;
164 Version = VM::Obsolete;
165 Binary_Files = QMap<QString, QString>();
166 Devices = QMap<QString, Available_Devices>();
167 }
168
Emulator(const Emulator & emul)169 Emulator::Emulator( const Emulator &emul )
170 {
171 Name = emul.Get_Name();
172 Path = emul.Get_Path();
173 Default = emul.Get_Default();
174 Check_Version = emul.Get_Check_Version();
175 Check_Available_Options = emul.Get_Check_Available_Options();
176 Force_Version = emul.Get_Force_Version();
177 Version = emul.Get_Version();
178 Binary_Files = emul.Get_Binary_Files();
179 Devices = emul.Get_Devices();
180 }
181
operator ==(const Emulator & emul) const182 bool Emulator::operator==( const Emulator &emul ) const
183 {
184 if( Name == emul.Get_Name() &&
185 Path == emul.Get_Path() &&
186 Default == emul.Get_Default() &&
187 Check_Version == emul.Get_Check_Version() &&
188 Check_Available_Options == emul.Get_Check_Available_Options() &&
189 Force_Version == emul.Get_Force_Version() &&
190 Version == emul.Get_Version() &&
191 Binary_Files == emul.Get_Binary_Files() ) // compare devices?
192 {
193 return true;
194 }
195 else
196 {
197 return false;
198 }
199 }
200
operator !=(const Emulator & emul) const201 bool Emulator::operator!=( const Emulator &emul ) const
202 {
203 return ! ( operator==(emul) );
204 }
205
Load(const QString & path)206 bool Emulator::Load( const QString &path )
207 {
208 // Load file
209 QDomDocument doc;
210 QFile inFile( path );
211 if( ! inFile.open(QIODevice::ReadOnly) )
212 {
213 AQError( "bool Emulator::Load( const QString &path )",
214 QString("Cannot open file \"%1\"!").arg(path) );
215 return false;
216 }
217
218 QString errorString = "";
219 int errorLine = 0, errorColumn = 0;
220 if( ! doc.setContent(&inFile, true, &errorString, &errorLine, &errorColumn) )
221 {
222 AQError( "bool Emulator::Load( const QString &path )",
223 QString("Cannot set content form file \"%1\"!\n\nLine: %2\nColumn: %3\nString: %4" )
224 .arg(path).arg(errorLine).arg(errorColumn).arg(errorString) );
225 inFile.close();
226 return false;
227 }
228
229 inFile.close();
230
231 QDomElement rootElement = doc.documentElement();
232 if( rootElement.tagName() != "AQEMU_Emulator" )
233 {
234 AQError( "bool Emulator::Load( const QString &path )",
235 QString("File \"%1\" is not AQEMU emulator file!").arg(path) );
236 return false;
237 }
238
239 if( rootElement.attribute("version") == "0.8" )
240 {
241 AQDebug( "bool Emulator::Load( const QString &path )",
242 "Loading emulator file version 0.8" );
243 }
244 else
245 {
246 AQWarning( "bool Emulator::Load( const QString &path )",
247 QString("Emulator version %1 not defined!").arg(rootElement.attribute("version")) );
248 }
249
250 // Create vairables
251 QDomElement childElement = rootElement.firstChildElement( "Emulator" );
252 if( childElement.isNull() )
253 {
254 AQError( "bool Emulator::Load( const QString &path )",
255 "No \"Emulator\" element!" );
256 return false;
257 }
258
259 // Load
260 Name = childElement.firstChildElement( "Name" ).text();
261 Default = childElement.firstChildElement( "Default" ).text() == "yes";
262 Path = childElement.firstChildElement( "Path" ).text();
263 Check_Version = childElement.firstChildElement( "Check_Version" ).text() == "yes";
264 Check_Available_Options = childElement.firstChildElement( "Check_Available_Options" ).text() == "yes";
265 Force_Version = childElement.firstChildElement( "Force_Version" ).text() == "yes";
266 Version = String_To_Emulator_Version( childElement.firstChildElement("Version").text() );
267
268 // Load emulators executable path's
269 Binary_Files.clear();
270
271 childElement = childElement.firstChildElement( "Executable_Paths" );
272 if( childElement.isNull() )
273 {
274 AQError( "bool Emulator::Load( const QString &path )",
275 "No \"Executable_Paths\" element!" );
276 return false;
277 }
278
279 for( QDomNode node = childElement.firstChild(); node.isNull() == false; node = node.nextSibling() )
280 {
281 QDomElement elem = node.toElement();
282 if( ! elem.isNull() ) Binary_Files[ elem.tagName() ] = elem.text();
283 }
284
285 // Load devices
286 QMapIterator<QString, QString> iter( Binary_Files );
287 while( iter.hasNext() )
288 {
289 iter.next();
290
291 childElement = rootElement.firstChildElement( "Emulator" );
292
293 childElement = childElement.firstChildElement( iter.key() );
294 if( childElement.isNull() )
295 {
296 AQWarning( "bool Emulator::Load( const QString &path )",
297 QString("No \"%1\" element!").arg(iter.key()) );
298 continue;
299 }
300 else
301 {
302 Available_Devices tmpDev;
303
304 // System
305 tmpDev.System.Caption = childElement.firstChildElement( "System_Caption" ).text();
306 tmpDev.System.QEMU_Name = childElement.firstChildElement( "System_QEMU_Name" ).text();
307
308 // CPUs
309 tmpDev.CPU_List.clear();
310
311 QDomElement thirdElement = childElement.firstChildElement( "CPU_List" );
312
313 if( thirdElement.isNull() )
314 {
315 AQError( "bool Emulator::Load( const QString &path )",
316 "No \"CPU_List\" element!" );
317 return false;
318 }
319
320 QDomNode node = thirdElement.firstChild();
321 Device_Map tmpDevMap;
322 for( int ix = 1; node.isNull() == false; node = node.nextSibling(), ix++ )
323 {
324 QDomElement elem = node.toElement();
325 if( ! elem.isNull() )
326 {
327 if( ix % 2 != 0 ) tmpDevMap.Caption = elem.text();
328 else
329 {
330 tmpDevMap.QEMU_Name = elem.text();
331 tmpDev.CPU_List << tmpDevMap;
332 }
333 }
334 }
335
336 if( tmpDev.CPU_List.isEmpty() )
337 {
338 AQError( "bool Emulator::Load( const QString &path )",
339 "No values on \"CPU_List\" element! Add default CPU element." );
340 tmpDev.CPU_List << Device_Map( QObject::tr("Default"), "" );
341 }
342
343 // Machines
344 tmpDev.Machine_List.clear();
345
346 thirdElement = childElement.firstChildElement( "Machine_List" );
347
348 if( thirdElement.isNull() )
349 {
350 AQError( "bool Emulator::Load( const QString &path )",
351 "No \"Machine_List\" element!" );
352 return false;
353 }
354
355 node = thirdElement.firstChild();
356 for( int ix = 1; node.isNull() == false; node = node.nextSibling(), ix++ )
357 {
358 QDomElement elem = node.toElement();
359 if( ! elem.isNull() )
360 {
361 if( ix % 2 != 0 ) tmpDevMap.Caption = elem.text();
362 else
363 {
364 tmpDevMap.QEMU_Name = elem.text();
365 tmpDev.Machine_List << tmpDevMap;
366 }
367 }
368 }
369
370 if( tmpDev.Machine_List.isEmpty() )
371 {
372 AQError( "bool Emulator::Load( const QString &path )",
373 "No values on \"Machine_List\" element! Add default Machine element." );
374 tmpDev.Machine_List << Device_Map( QObject::tr("Default"), "" );
375 }
376
377 // Network Cards
378 tmpDev.Network_Card_List.clear();
379
380 thirdElement = childElement.firstChildElement( "Network_Card_List" );
381
382 if( thirdElement.isNull() )
383 {
384 AQError( "bool Emulator::Load( const QString &path )",
385 "No \"Network_Card_List\" element!" );
386 return false;
387 }
388
389 node = thirdElement.firstChild();
390 for( int ix = 1; node.isNull() == false; node = node.nextSibling(), ix++ )
391 {
392 QDomElement elem = node.toElement();
393 if( ! elem.isNull() )
394 {
395 if( ix % 2 != 0 ) tmpDevMap.Caption = elem.text();
396 else
397 {
398 tmpDevMap.QEMU_Name = elem.text();
399 tmpDev.Network_Card_List << tmpDevMap;
400 }
401 }
402 }
403
404 if( tmpDev.Network_Card_List.isEmpty() )
405 {
406 AQError( "bool Emulator::Load( const QString &path )",
407 "No values on \"Network_Card_List\" element! Add default Network Card element." );
408 tmpDev.Network_Card_List << Device_Map( QObject::tr("Default"), "" );
409 }
410
411 // Audio Cards
412 thirdElement = childElement.firstChildElement( "Audio_Card_List" );
413
414 if( thirdElement.isNull() )
415 {
416 AQError( "bool Emulator::Load( const QString &path )",
417 "No \"Audio_Card_List\" element!" );
418 return false;
419 }
420
421 tmpDev.Audio_Card_List.Audio_sb16 = (thirdElement.firstChildElement("sb16").text() == "yes");
422 tmpDev.Audio_Card_List.Audio_es1370 = (thirdElement.firstChildElement("es1370").text() == "yes");
423 tmpDev.Audio_Card_List.Audio_Adlib = (thirdElement.firstChildElement("Adlib").text() == "yes");
424 tmpDev.Audio_Card_List.Audio_PC_Speaker = (thirdElement.firstChildElement("PC_Speaker").text() == "yes");
425 tmpDev.Audio_Card_List.Audio_GUS = (thirdElement.firstChildElement("GUS").text() == "yes");
426 tmpDev.Audio_Card_List.Audio_AC97 = (thirdElement.firstChildElement("AC97").text() == "yes");
427 tmpDev.Audio_Card_List.Audio_HDA = (thirdElement.firstChildElement("HDA").text() == "yes");
428 tmpDev.Audio_Card_List.Audio_cs4231a = (thirdElement.firstChildElement("cs4231a").text() == "yes");
429
430 // Video Cards
431 tmpDev.Video_Card_List.clear();
432
433 thirdElement = childElement.firstChildElement( "Video_Card_List" );
434
435 if( thirdElement.isNull() )
436 {
437 AQError( "bool Emulator::Load( const QString &path )",
438 "No \"Video_Card_List\" element!" );
439 return false;
440 }
441
442 node = thirdElement.firstChild();
443 for( int ix = 1; node.isNull() == false; node = node.nextSibling(), ix++ )
444 {
445 QDomElement elem = node.toElement();
446 if( ! elem.isNull() )
447 {
448 if( ix % 2 != 0 ) tmpDevMap.Caption = elem.text();
449 else
450 {
451 tmpDevMap.QEMU_Name = elem.text();
452 tmpDev.Video_Card_List << tmpDevMap;
453 }
454 }
455 }
456
457 if( tmpDev.Video_Card_List.isEmpty() )
458 {
459 AQError( "bool Emulator::Load( const QString &path )",
460 "No values on \"Video_Card_List\" element! Add default Video Card element." );
461 tmpDev.Video_Card_List << Device_Map( QObject::tr("Default"), "" );
462 }
463
464 // Platform Specific Options
465 bool ok = false;
466 tmpDev.PSO_SMP_Count = childElement.firstChildElement( "SMP_Count" ).text().toUInt( &ok );
467 if( ! ok )
468 {
469 AQWarning( "bool Emulator::Load( const QString &path )",
470 "SMP_Count value not uint type! Use default value: 1" );
471 tmpDev.PSO_SMP_Count = 1;
472 }
473
474 tmpDev.PSO_SMP_Cores = (childElement.firstChildElement("SMP_Cores").text() == "yes" );
475 tmpDev.PSO_SMP_Threads = (childElement.firstChildElement("SMP_Threads").text() == "yes" );
476 tmpDev.PSO_SMP_Sockets = (childElement.firstChildElement("SMP_Sockets").text() == "yes" );
477 tmpDev.PSO_SMP_MaxCPUs = (childElement.firstChildElement("SMP_MaxCPUs").text() == "yes" );
478
479 tmpDev.PSO_Device = (childElement.firstChildElement("Device").text() == "yes" );
480 tmpDev.PSO_Device_USB_EHCI = (childElement.firstChildElement("Device_USB_EHCI").text() == "yes" );
481
482 tmpDev.PSO_Drive = (childElement.firstChildElement("Drive").text() == "yes" );
483 tmpDev.PSO_Drive_File = (childElement.firstChildElement("Drive_File").text() == "yes" );
484 tmpDev.PSO_Drive_If = (childElement.firstChildElement("Drive_If").text() == "yes" );
485 tmpDev.PSO_Drive_Bus_Unit = (childElement.firstChildElement("Drive_Bus_Unit").text() == "yes" );
486 tmpDev.PSO_Drive_Index = (childElement.firstChildElement("Drive_Index").text() == "yes" );
487 tmpDev.PSO_Drive_Media = (childElement.firstChildElement("Drive_Media").text() == "yes" );
488 tmpDev.PSO_Drive_Cyls_Heads_Secs_Trans = (childElement.firstChildElement("Drive_Cyls_Heads_Secs_Trans").text() == "yes" );
489 tmpDev.PSO_Drive_Snapshot = (childElement.firstChildElement("Drive_Snapshot").text() == "yes" );
490 tmpDev.PSO_Drive_Cache = (childElement.firstChildElement("Drive_Cache").text() == "yes" );
491 tmpDev.PSO_Drive_AIO = (childElement.firstChildElement("Drive_AIO").text() == "yes" );
492 tmpDev.PSO_Drive_Format = (childElement.firstChildElement("Drive_Format").text() == "yes" );
493 tmpDev.PSO_Drive_Serial = (childElement.firstChildElement("Drive_Serial").text() == "yes" );
494 tmpDev.PSO_Drive_ADDR = (childElement.firstChildElement("Drive_ADDR").text() == "yes" );
495 tmpDev.PSO_Drive_Boot = (childElement.firstChildElement("Drive_Boot").text() == "yes" );
496
497 tmpDev.PSO_Boot_Order = (childElement.firstChildElement("Boot_Order").text() == "yes" );
498 tmpDev.PSO_Initial_Graphic_Mode = (childElement.firstChildElement("Initial_Graphic_Mode").text() == "yes" );
499 tmpDev.PSO_No_FB_Boot_Check = (childElement.firstChildElement("No_FB_Boot_Check").text() == "yes" );
500 tmpDev.PSO_Win2K_Hack = (childElement.firstChildElement("Win2K_Hack").text() == "yes" );
501 tmpDev.PSO_Kernel_KQEMU = (childElement.firstChildElement("Kernel_KQEMU").text() == "yes" );
502 tmpDev.PSO_No_ACPI = (childElement.firstChildElement("No_ACPI").text() == "yes" );
503 tmpDev.PSO_KVM = (childElement.firstChildElement("KVM").text() == "yes" );
504 tmpDev.PSO_RTC_TD_Hack = (childElement.firstChildElement("RTC_TD_Hack").text() == "yes" );
505
506 tmpDev.PSO_MTDBlock = (childElement.firstChildElement("MTDBlock").text() == "yes" );
507 tmpDev.PSO_SD = (childElement.firstChildElement("SD").text() == "yes" );
508 tmpDev.PSO_PFlash = (childElement.firstChildElement("PFlash").text() == "yes" );
509 tmpDev.PSO_Name = (childElement.firstChildElement("Name").text() == "yes" );
510 tmpDev.PSO_Curses = (childElement.firstChildElement("Curses").text() == "yes" );
511 tmpDev.PSO_No_Frame = (childElement.firstChildElement("No_Frame").text() == "yes" );
512 tmpDev.PSO_Alt_Grab = (childElement.firstChildElement("Alt_Grab").text() == "yes" );
513 tmpDev.PSO_No_Quit = (childElement.firstChildElement("No_Quit").text() == "yes" );
514 tmpDev.PSO_SDL = (childElement.firstChildElement("SDL").text() == "yes" );
515 tmpDev.PSO_Portrait = (childElement.firstChildElement("Portrait").text() == "yes" );
516 tmpDev.PSO_No_Shutdown = (childElement.firstChildElement("No_Shutdown").text() == "yes" );
517 tmpDev.PSO_Startdate = (childElement.firstChildElement("Startdate").text() == "yes" );
518 tmpDev.PSO_Show_Cursor = (childElement.firstChildElement("Show_Cursor").text() == "yes" );
519 tmpDev.PSO_Bootp = (childElement.firstChildElement("Bootp").text() == "yes" );
520
521 tmpDev.PSO_Net_type_vde = (childElement.firstChildElement("Net_type_vde").text() == "yes" );
522 tmpDev.PSO_Net_type_dump = (childElement.firstChildElement("Net_type_dump").text() == "yes" );
523
524 tmpDev.PSO_Net_name = (childElement.firstChildElement("Net_name").text() == "yes" );
525 tmpDev.PSO_Net_addr = (childElement.firstChildElement("Net_addr").text() == "yes" );
526 tmpDev.PSO_Net_vectors = (childElement.firstChildElement("Net_vectors").text() == "yes" );
527
528 tmpDev.PSO_Net_net = (childElement.firstChildElement("Net_net").text() == "yes" );
529 tmpDev.PSO_Net_host = (childElement.firstChildElement("Net_host").text() == "yes" );
530 tmpDev.PSO_Net_restrict = (childElement.firstChildElement("Net_restrict").text() == "yes" );
531 tmpDev.PSO_Net_dhcpstart = (childElement.firstChildElement("Net_dhcpstart").text() == "yes" );
532 tmpDev.PSO_Net_dns = (childElement.firstChildElement("Net_dns").text() == "yes" );
533 tmpDev.PSO_Net_tftp = (childElement.firstChildElement("Net_tftp").text() == "yes" );
534 tmpDev.PSO_Net_bootfile = (childElement.firstChildElement("Net_bootfile").text() == "yes" );
535 tmpDev.PSO_Net_smb = (childElement.firstChildElement("Net_smb").text() == "yes" );
536 tmpDev.PSO_Net_hostfwd = (childElement.firstChildElement("Net_hostfwd").text() == "yes" );
537 tmpDev.PSO_Net_guestfwd = (childElement.firstChildElement("Net_guestfwd").text() == "yes" );
538
539 tmpDev.PSO_Net_ifname = (childElement.firstChildElement("Net_ifname").text() == "yes" );
540 tmpDev.PSO_Net_script = (childElement.firstChildElement("Net_script").text() == "yes" );
541 tmpDev.PSO_Net_downscript = (childElement.firstChildElement("Net_downscript").text() == "yes" );
542 tmpDev.PSO_Net_sndbuf = (childElement.firstChildElement("Net_sndbuf").text() == "yes" );
543 tmpDev.PSO_Net_vnet_hdr = (childElement.firstChildElement("Net_vnet_hdr").text() == "yes" );
544 tmpDev.PSO_Net_vhost = (childElement.firstChildElement("Net_vhost").text() == "yes" );
545 tmpDev.PSO_Net_vhostfd = (childElement.firstChildElement("Net_vhostfd").text() == "yes" );
546
547 tmpDev.PSO_Net_listen = (childElement.firstChildElement("Net_listen").text() == "yes" );
548 tmpDev.PSO_Net_connect = (childElement.firstChildElement("Net_connect").text() == "yes" );
549
550 tmpDev.PSO_Net_mcast = (childElement.firstChildElement("Net_mcast").text() == "yes" );
551
552 tmpDev.PSO_Net_sock = (childElement.firstChildElement("Net_sock").text() == "yes" );
553 tmpDev.PSO_Net_port = (childElement.firstChildElement("Net_port").text() == "yes" );
554 tmpDev.PSO_Net_group = (childElement.firstChildElement("Net_group").text() == "yes" );
555 tmpDev.PSO_Net_mode = (childElement.firstChildElement("Net_mode").text() == "yes" );
556
557 tmpDev.PSO_Net_file = (childElement.firstChildElement("Net_file").text() == "yes" );
558 tmpDev.PSO_Net_len = (childElement.firstChildElement("Net_len").text() == "yes" );
559
560 tmpDev.PSO_Enable_KVM = (childElement.firstChildElement("Enable_KVM").text() == "yes" );
561 tmpDev.PSO_No_KVM = (childElement.firstChildElement("No_KVM").text() == "yes" );
562 tmpDev.PSO_No_KVM_IRQChip = (childElement.firstChildElement("No_KVM_IRQChip").text() == "yes" );
563 tmpDev.PSO_No_KVM_Pit = (childElement.firstChildElement("No_KVM_Pit").text() == "yes" );
564 tmpDev.PSO_No_KVM_Pit_Reinjection = (childElement.firstChildElement("No_KVM_Pit_Reinjection").text() == "yes" );
565 tmpDev.PSO_Enable_Nesting = (childElement.firstChildElement("Enable_Nesting").text() == "yes" );
566 tmpDev.PSO_KVM_Shadow_Memory = (childElement.firstChildElement("KVM_Shadow_Memory").text() == "yes" );
567
568 tmpDev.PSO_SPICE = (childElement.firstChildElement("SPICE").text() == "yes" );
569 tmpDev.PSO_QXL = (childElement.firstChildElement("QXL").text() == "yes" );
570
571 tmpDev.PSO_TFTP = (childElement.firstChildElement("TFTP").text() == "yes" );
572 tmpDev.PSO_SMB = (childElement.firstChildElement("SMB").text() == "yes" );
573 tmpDev.PSO_Std_VGA = (childElement.firstChildElement("Std_VGA").text() == "yes" );
574
575 // Add devices
576 Devices[ iter.key() ] = tmpDev;
577 }
578 }
579
580 return true;
581 }
582
Save() const583 bool Emulator::Save() const
584 {
585 QString path = Get_Emulator_File_Path();
586 if( path.isEmpty() ) return false;
587
588 // Document type
589 QDomDocument domDocument( "AQEMU" );
590 domDocument.appendChild( domDocument.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"") );
591
592 // Document version
593 QDomElement rootElement = domDocument.createElement( "AQEMU_Emulator" );
594 rootElement.setAttribute( "version", "0.8" );
595 domDocument.appendChild( rootElement );
596
597 // Emulator - general section
598 QDomElement emulatorElement = domDocument.createElement( "Emulator" );
599 rootElement.appendChild( emulatorElement );
600
601 // Save emulator data
602 QDomElement domElement;
603 QDomText domText;
604
605 // Name
606 domElement = domDocument.createElement( "Name" );
607 emulatorElement.appendChild( domElement );
608 domText = domDocument.createTextNode( Name );
609 domElement.appendChild( domText );
610
611 // Default
612 domElement = domDocument.createElement( "Default" );
613 emulatorElement.appendChild( domElement );
614 domText = domDocument.createTextNode( (Default ? "yes" : "no") );
615 domElement.appendChild( domText );
616
617 // Path
618 domElement = domDocument.createElement( "Path" );
619 emulatorElement.appendChild( domElement );
620 domText = domDocument.createTextNode( Path );
621 domElement.appendChild( domText );
622
623 // Check_Version
624 domElement = domDocument.createElement( "Check_Version" );
625 emulatorElement.appendChild( domElement );
626 domText = domDocument.createTextNode( (Check_Version ? "yes" : "no") );
627 domElement.appendChild( domText );
628
629 // Check_Available_Options
630 domElement = domDocument.createElement( "Check_Available_Options" );
631 emulatorElement.appendChild( domElement );
632 domText = domDocument.createTextNode( (Check_Available_Options ? "yes" : "no") );
633 domElement.appendChild( domText );
634
635 // Check_Available_Options
636 domElement = domDocument.createElement( "Check_Available_Options" );
637 emulatorElement.appendChild( domElement );
638 domText = domDocument.createTextNode( (Check_Available_Options ? "yes" : "no") );
639 domElement.appendChild( domText );
640
641 // Force_Version
642 domElement = domDocument.createElement( "Force_Version" );
643 emulatorElement.appendChild( domElement );
644 domText = domDocument.createTextNode( (Force_Version ? "yes" : "no") );
645 domElement.appendChild( domText );
646
647 // Version
648 domElement = domDocument.createElement( "Version" );
649 emulatorElement.appendChild( domElement );
650
651 QString emulatorVersion = Emulator_Version_To_String( Version );
652 if( emulatorVersion.isEmpty() )
653 {
654 AQError( "bool Emulator::Save() const",
655 "Emulator version invalid! Use version: Obsolete" );
656 domText = domDocument.createTextNode( "Obsolete" );
657 }
658 else domText = domDocument.createTextNode( emulatorVersion );
659
660 domElement.appendChild( domText );
661
662 // Save emulators executable path's
663 domElement = domDocument.createElement( "Executable_Paths" );
664
665 QMap<QString, QString>::const_iterator binFilesIter = Binary_Files.constBegin();
666 while( binFilesIter != Binary_Files.constEnd() )
667 {
668 QDomElement binElement = domDocument.createElement( binFilesIter.key() );
669 domText = domDocument.createTextNode( binFilesIter.value() );
670 binElement.appendChild( domText );
671 domElement.appendChild( binElement );
672
673 ++binFilesIter;
674 }
675
676 emulatorElement.appendChild( domElement );
677
678 // Save devices
679 QMap<QString, Available_Devices>::const_iterator devicesIter = Devices.constBegin();
680 while( devicesIter != Devices.constEnd() )
681 {
682 const Available_Devices &tmpDev = devicesIter.value();
683 domElement = domDocument.createElement( devicesIter.key() );
684
685 QDomElement deviceElement;
686 QDomElement thirdElement;
687
688 // System
689 deviceElement = domDocument.createElement( "System_Caption" );
690 domElement.appendChild( deviceElement );
691 domText = domDocument.createTextNode( tmpDev.System.Caption );
692 deviceElement.appendChild( domText );
693
694 deviceElement = domDocument.createElement( "System_QEMU_Name" );
695 domElement.appendChild( deviceElement );
696 domText = domDocument.createTextNode( tmpDev.System.QEMU_Name );
697 deviceElement.appendChild( domText );
698
699 // CPUs
700 deviceElement = domDocument.createElement( "CPU_List" );
701 for( int ix = 0; ix < tmpDev.CPU_List.count(); ix++ )
702 {
703 thirdElement = domDocument.createElement( QString("Caption%1").arg(ix) );
704 domText = domDocument.createTextNode( tmpDev.CPU_List[ix].Caption );
705 thirdElement.appendChild( domText );
706 deviceElement.appendChild( thirdElement );
707
708 thirdElement = domDocument.createElement( QString("Name%1").arg(ix) );
709 domText = domDocument.createTextNode( tmpDev.CPU_List[ix].QEMU_Name );
710 thirdElement.appendChild( domText );
711 deviceElement.appendChild( thirdElement );
712 }
713 domElement.appendChild( deviceElement );
714
715 // Machines
716 deviceElement = domDocument.createElement( "Machine_List" );
717 for( int ix = 0; ix < tmpDev.Machine_List.count(); ix++ )
718 {
719 thirdElement = domDocument.createElement( QString("Caption%1").arg(ix) );
720 domText = domDocument.createTextNode( tmpDev.Machine_List[ix].Caption );
721 thirdElement.appendChild( domText );
722 deviceElement.appendChild( thirdElement );
723
724 thirdElement = domDocument.createElement( QString("Name%1").arg(ix) );
725 domText = domDocument.createTextNode( tmpDev.Machine_List[ix].QEMU_Name );
726 thirdElement.appendChild( domText );
727 deviceElement.appendChild( thirdElement );
728 }
729 domElement.appendChild( deviceElement );
730
731 // Network Cards
732 deviceElement = domDocument.createElement( "Network_Card_List" );
733 for( int ix = 0; ix < tmpDev.Network_Card_List.count(); ix++ )
734 {
735 thirdElement = domDocument.createElement( QString("Caption%1").arg(ix) );
736 domText = domDocument.createTextNode( tmpDev.Network_Card_List[ix].Caption );
737 thirdElement.appendChild( domText );
738 deviceElement.appendChild( thirdElement );
739
740 thirdElement = domDocument.createElement( QString("Name%1").arg(ix) );
741 domText = domDocument.createTextNode( tmpDev.Network_Card_List[ix].QEMU_Name );
742 thirdElement.appendChild( domText );
743 deviceElement.appendChild( thirdElement );
744 }
745 domElement.appendChild( deviceElement );
746
747 // Audio Cards
748 deviceElement = domDocument.createElement( "Audio_Card_List" );
749
750 thirdElement = domDocument.createElement( "sb16" );
751 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_sb16 ? "yes" : "no") );
752 thirdElement.appendChild( domText );
753 deviceElement.appendChild( thirdElement );
754
755 thirdElement = domDocument.createElement( "es1370" );
756 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_es1370 ? "yes" : "no") );
757 thirdElement.appendChild( domText );
758 deviceElement.appendChild( thirdElement );
759
760 thirdElement = domDocument.createElement( "Adlib" );
761 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_Adlib ? "yes" : "no") );
762 thirdElement.appendChild( domText );
763 deviceElement.appendChild( thirdElement );
764
765 thirdElement = domDocument.createElement( "PC_Speaker" );
766 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_PC_Speaker ? "yes" : "no") );
767 thirdElement.appendChild( domText );
768 deviceElement.appendChild( thirdElement );
769
770 thirdElement = domDocument.createElement( "GUS" );
771 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_GUS ? "yes" : "no") );
772 thirdElement.appendChild( domText );
773 deviceElement.appendChild( thirdElement );
774
775 thirdElement = domDocument.createElement( "AC97" );
776 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_AC97 ? "yes" : "no") );
777 thirdElement.appendChild( domText );
778 deviceElement.appendChild( thirdElement );
779
780 thirdElement = domDocument.createElement( "HDA" );
781 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_HDA ? "yes" : "no") );
782 thirdElement.appendChild( domText );
783 deviceElement.appendChild( thirdElement );
784
785 thirdElement = domDocument.createElement( "cs4231a" );
786 domText = domDocument.createTextNode( (tmpDev.Audio_Card_List.Audio_cs4231a ? "yes" : "no") );
787 thirdElement.appendChild( domText );
788 deviceElement.appendChild( thirdElement );
789
790 domElement.appendChild( deviceElement );
791
792 // Video Cards
793 deviceElement = domDocument.createElement( "Video_Card_List" );
794 for( int ix = 0; ix < tmpDev.Video_Card_List.count(); ix++ )
795 {
796 thirdElement = domDocument.createElement( QString("Caption%1").arg(ix) );
797 domText = domDocument.createTextNode( tmpDev.Video_Card_List[ix].Caption );
798 thirdElement.appendChild( domText );
799 deviceElement.appendChild( thirdElement );
800
801 thirdElement = domDocument.createElement( QString("Name%1").arg(ix) );
802 domText = domDocument.createTextNode( tmpDev.Video_Card_List[ix].QEMU_Name );
803 thirdElement.appendChild( domText );
804 deviceElement.appendChild( thirdElement );
805 }
806 domElement.appendChild( deviceElement );
807
808 // Platform Specific Options
809 // PSO_SMP_Count
810 deviceElement = domDocument.createElement( "SMP_Count" );
811 domElement.appendChild( deviceElement );
812 domText = domDocument.createTextNode( QString::number(tmpDev.PSO_SMP_Count) );
813 deviceElement.appendChild( domText );
814
815 // PSO_SMP_Cores
816 deviceElement = domDocument.createElement( "SMP_Cores" );
817 domElement.appendChild( deviceElement );
818 domText = domDocument.createTextNode( (tmpDev.PSO_SMP_Cores ? "yes" : "no") );
819 deviceElement.appendChild( domText );
820
821 // PSO_SMP_Threads
822 deviceElement = domDocument.createElement( "SMP_Threads" );
823 domElement.appendChild( deviceElement );
824 domText = domDocument.createTextNode( (tmpDev.PSO_SMP_Threads ? "yes" : "no") );
825 deviceElement.appendChild( domText );
826
827 // PSO_SMP_Sockets
828 deviceElement = domDocument.createElement( "SMP_Sockets" );
829 domElement.appendChild( deviceElement );
830 domText = domDocument.createTextNode( (tmpDev.PSO_SMP_Sockets ? "yes" : "no") );
831 deviceElement.appendChild( domText );
832
833 // PSO_SMP_MaxCPUs
834 deviceElement = domDocument.createElement( "SMP_MaxCPUs" );
835 domElement.appendChild( deviceElement );
836 domText = domDocument.createTextNode( (tmpDev.PSO_SMP_MaxCPUs ? "yes" : "no") );
837 deviceElement.appendChild( domText );
838
839 // PSO_Device
840 deviceElement = domDocument.createElement( "Device" );
841 domElement.appendChild( deviceElement );
842 domText = domDocument.createTextNode( (tmpDev.PSO_Device ? "yes" : "no") );
843 deviceElement.appendChild( domText );
844
845 // PSO_Device_USB_EHCI
846 deviceElement = domDocument.createElement( "Device_USB_EHCI" );
847 domElement.appendChild( deviceElement );
848 domText = domDocument.createTextNode( (tmpDev.PSO_Device_USB_EHCI ? "yes" : "no") );
849 deviceElement.appendChild( domText );
850
851 // PSO_Drive
852 deviceElement = domDocument.createElement( "Drive" );
853 domElement.appendChild( deviceElement );
854 domText = domDocument.createTextNode( (tmpDev.PSO_Drive ? "yes" : "no") );
855 deviceElement.appendChild( domText );
856
857 // PSO_Drive_File
858 deviceElement = domDocument.createElement( "Drive_File" );
859 domElement.appendChild( deviceElement );
860 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_File ? "yes" : "no") );
861 deviceElement.appendChild( domText );
862
863 // PSO_Drive_If
864 deviceElement = domDocument.createElement( "Drive_If" );
865 domElement.appendChild( deviceElement );
866 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_If ? "yes" : "no") );
867 deviceElement.appendChild( domText );
868
869 // PSO_Drive_Bus_Unit
870 deviceElement = domDocument.createElement( "Drive_Bus_Unit" );
871 domElement.appendChild( deviceElement );
872 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Bus_Unit ? "yes" : "no") );
873 deviceElement.appendChild( domText );
874
875 // PSO_Drive_Index
876 deviceElement = domDocument.createElement( "Drive_Index" );
877 domElement.appendChild( deviceElement );
878 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Index ? "yes" : "no") );
879 deviceElement.appendChild( domText );
880
881 // PSO_Drive_Media
882 deviceElement = domDocument.createElement( "Drive_Media" );
883 domElement.appendChild( deviceElement );
884 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Media ? "yes" : "no") );
885 deviceElement.appendChild( domText );
886
887 // PSO_Drive_Cyls_Heads_Secs_Trans
888 deviceElement = domDocument.createElement( "Drive_Cyls_Heads_Secs_Trans" );
889 domElement.appendChild( deviceElement );
890 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Cyls_Heads_Secs_Trans ? "yes" : "no") );
891 deviceElement.appendChild( domText );
892
893 // PSO_Drive_Snapshot
894 deviceElement = domDocument.createElement( "Drive_Snapshot" );
895 domElement.appendChild( deviceElement );
896 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Snapshot ? "yes" : "no") );
897 deviceElement.appendChild( domText );
898
899 // PSO_Drive_Cache
900 deviceElement = domDocument.createElement( "Drive_Cache" );
901 domElement.appendChild( deviceElement );
902 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Cache ? "yes" : "no") );
903 deviceElement.appendChild( domText );
904
905 // PSO_Drive_AIO
906 deviceElement = domDocument.createElement( "Drive_AIO" );
907 domElement.appendChild( deviceElement );
908 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_AIO ? "yes" : "no") );
909 deviceElement.appendChild( domText );
910
911 // PSO_Drive_Format
912 deviceElement = domDocument.createElement( "Drive_Format" );
913 domElement.appendChild( deviceElement );
914 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Format ? "yes" : "no") );
915 deviceElement.appendChild( domText );
916
917 // PSO_Drive_Serial
918 deviceElement = domDocument.createElement( "Drive_Serial" );
919 domElement.appendChild( deviceElement );
920 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Serial ? "yes" : "no") );
921 deviceElement.appendChild( domText );
922
923 // PSO_Drive_ADDR
924 deviceElement = domDocument.createElement( "Drive_ADDR" );
925 domElement.appendChild( deviceElement );
926 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_ADDR ? "yes" : "no") );
927 deviceElement.appendChild( domText );
928
929 // PSO_Drive_Boot
930 deviceElement = domDocument.createElement( "Drive_Boot" );
931 domElement.appendChild( deviceElement );
932 domText = domDocument.createTextNode( (tmpDev.PSO_Drive_Boot ? "yes" : "no") );
933 deviceElement.appendChild( domText );
934
935
936 // PSO_Boot_Order
937 deviceElement = domDocument.createElement( "Boot_Order" );
938 domElement.appendChild( deviceElement );
939 domText = domDocument.createTextNode( (tmpDev.PSO_Boot_Order ? "yes" : "no") );
940 deviceElement.appendChild( domText );
941
942 // PSO_Initial_Graphic_Mode
943 deviceElement = domDocument.createElement( "Initial_Graphic_Mode" );
944 domElement.appendChild( deviceElement );
945 domText = domDocument.createTextNode( (tmpDev.PSO_Initial_Graphic_Mode ? "yes" : "no") );
946 deviceElement.appendChild( domText );
947
948 // PSO_No_FB_Boot_Check
949 deviceElement = domDocument.createElement( "No_FB_Boot_Check" );
950 domElement.appendChild( deviceElement );
951 domText = domDocument.createTextNode( (tmpDev.PSO_No_FB_Boot_Check ? "yes" : "no") );
952 deviceElement.appendChild( domText );
953
954 // PSO_Win2K_Hack
955 deviceElement = domDocument.createElement( "Win2K_Hack" );
956 domElement.appendChild( deviceElement );
957 domText = domDocument.createTextNode( (tmpDev.PSO_Win2K_Hack ? "yes" : "no") );
958 deviceElement.appendChild( domText );
959
960 // PSO_Kernel_KQEMU
961 deviceElement = domDocument.createElement( "Kernel_KQEMU" );
962 domElement.appendChild( deviceElement );
963 domText = domDocument.createTextNode( (tmpDev.PSO_Kernel_KQEMU ? "yes" : "no") );
964 deviceElement.appendChild( domText );
965
966 // PSO_No_ACPI
967 deviceElement = domDocument.createElement( "No_ACPI" );
968 domElement.appendChild( deviceElement );
969 domText = domDocument.createTextNode( (tmpDev.PSO_No_ACPI ? "yes" : "no") );
970 deviceElement.appendChild( domText );
971
972 // PSO_KVM
973 deviceElement = domDocument.createElement( "KVM" );
974 domElement.appendChild( deviceElement );
975 domText = domDocument.createTextNode( (tmpDev.PSO_KVM ? "yes" : "no") );
976 deviceElement.appendChild( domText );
977
978 // PSO_RTC_TD_Hack
979 deviceElement = domDocument.createElement( "RTC_TD_Hack" );
980 domElement.appendChild( deviceElement );
981 domText = domDocument.createTextNode( (tmpDev.PSO_RTC_TD_Hack ? "yes" : "no") );
982 deviceElement.appendChild( domText );
983
984
985 // PSO_MTDBlock
986 deviceElement = domDocument.createElement( "MTDBlock" );
987 domElement.appendChild( deviceElement );
988 domText = domDocument.createTextNode( (tmpDev.PSO_MTDBlock ? "yes" : "no") );
989 deviceElement.appendChild( domText );
990
991 // PSO_SD
992 deviceElement = domDocument.createElement( "SD" );
993 domElement.appendChild( deviceElement );
994 domText = domDocument.createTextNode( (tmpDev.PSO_SD ? "yes" : "no") );
995 deviceElement.appendChild( domText );
996
997 // PSO_PFlash
998 deviceElement = domDocument.createElement( "PFlash" );
999 domElement.appendChild( deviceElement );
1000 domText = domDocument.createTextNode( (tmpDev.PSO_PFlash ? "yes" : "no") );
1001 deviceElement.appendChild( domText );
1002
1003 // PSO_Name
1004 deviceElement = domDocument.createElement( "Name" );
1005 domElement.appendChild( deviceElement );
1006 domText = domDocument.createTextNode( (tmpDev.PSO_Name ? "yes" : "no") );
1007 deviceElement.appendChild( domText );
1008
1009 // PSO_Curses
1010 deviceElement = domDocument.createElement( "Curses" );
1011 domElement.appendChild( deviceElement );
1012 domText = domDocument.createTextNode( (tmpDev.PSO_Curses ? "yes" : "no") );
1013 deviceElement.appendChild( domText );
1014
1015 // PSO_No_Frame
1016 deviceElement = domDocument.createElement( "No_Frame" );
1017 domElement.appendChild( deviceElement );
1018 domText = domDocument.createTextNode( (tmpDev.PSO_No_Frame ? "yes" : "no") );
1019 deviceElement.appendChild( domText );
1020
1021 // PSO_Alt_Grab
1022 deviceElement = domDocument.createElement( "Alt_Grab" );
1023 domElement.appendChild( deviceElement );
1024 domText = domDocument.createTextNode( (tmpDev.PSO_Alt_Grab ? "yes" : "no") );
1025 deviceElement.appendChild( domText );
1026
1027 // PSO_No_Quit
1028 deviceElement = domDocument.createElement( "No_Quit" );
1029 domElement.appendChild( deviceElement );
1030 domText = domDocument.createTextNode( (tmpDev.PSO_No_Quit ? "yes" : "no") );
1031 deviceElement.appendChild( domText );
1032
1033 // PSO_SDL
1034 deviceElement = domDocument.createElement( "SDL" );
1035 domElement.appendChild( deviceElement );
1036 domText = domDocument.createTextNode( (tmpDev.PSO_SDL ? "yes" : "no") );
1037 deviceElement.appendChild( domText );
1038
1039 // PSO_Portrait
1040 deviceElement = domDocument.createElement( "Portrait" );
1041 domElement.appendChild( deviceElement );
1042 domText = domDocument.createTextNode( (tmpDev.PSO_Portrait ? "yes" : "no") );
1043 deviceElement.appendChild( domText );
1044
1045 // PSO_No_Shutdown
1046 deviceElement = domDocument.createElement( "No_Shutdown" );
1047 domElement.appendChild( deviceElement );
1048 domText = domDocument.createTextNode( (tmpDev.PSO_No_Shutdown ? "yes" : "no") );
1049 deviceElement.appendChild( domText );
1050
1051 // PSO_Startdate
1052 deviceElement = domDocument.createElement( "Startdate" );
1053 domElement.appendChild( deviceElement );
1054 domText = domDocument.createTextNode( (tmpDev.PSO_Startdate ? "yes" : "no") );
1055 deviceElement.appendChild( domText );
1056
1057 // PSO_Show_Cursor
1058 deviceElement = domDocument.createElement( "Show_Cursor" );
1059 domElement.appendChild( deviceElement );
1060 domText = domDocument.createTextNode( (tmpDev.PSO_Show_Cursor ? "yes" : "no") );
1061 deviceElement.appendChild( domText );
1062
1063 // PSO_Bootp
1064 deviceElement = domDocument.createElement( "Bootp" );
1065 domElement.appendChild( deviceElement );
1066 domText = domDocument.createTextNode( (tmpDev.PSO_Bootp ? "yes" : "no") );
1067 deviceElement.appendChild( domText );
1068
1069
1070 // PSO_Net_type_vde
1071 deviceElement = domDocument.createElement( "Net_type_vde" );
1072 domElement.appendChild( deviceElement );
1073 domText = domDocument.createTextNode( (tmpDev.PSO_Net_type_vde ? "yes" : "no") );
1074 deviceElement.appendChild( domText );
1075
1076 // PSO_Net_type_dump
1077 deviceElement = domDocument.createElement( "Net_type_dump" );
1078 domElement.appendChild( deviceElement );
1079 domText = domDocument.createTextNode( (tmpDev.PSO_Net_type_dump ? "yes" : "no") );
1080 deviceElement.appendChild( domText );
1081
1082
1083 // PSO_Net_name
1084 deviceElement = domDocument.createElement( "Net_name" );
1085 domElement.appendChild( deviceElement );
1086 domText = domDocument.createTextNode( (tmpDev.PSO_Net_name ? "yes" : "no") );
1087 deviceElement.appendChild( domText );
1088
1089 // PSO_Net_addr
1090 deviceElement = domDocument.createElement( "Net_addr" );
1091 domElement.appendChild( deviceElement );
1092 domText = domDocument.createTextNode( (tmpDev.PSO_Net_addr ? "yes" : "no") );
1093 deviceElement.appendChild( domText );
1094
1095 // PSO_Net_vectors
1096 deviceElement = domDocument.createElement( "Net_vectors" );
1097 domElement.appendChild( deviceElement );
1098 domText = domDocument.createTextNode( (tmpDev.PSO_Net_vectors ? "yes" : "no") );
1099 deviceElement.appendChild( domText );
1100
1101
1102 // PSO_Net_net
1103 deviceElement = domDocument.createElement( "Net_net" );
1104 domElement.appendChild( deviceElement );
1105 domText = domDocument.createTextNode( (tmpDev.PSO_Net_net ? "yes" : "no") );
1106 deviceElement.appendChild( domText );
1107
1108 // PSO_Net_host
1109 deviceElement = domDocument.createElement( "Net_host" );
1110 domElement.appendChild( deviceElement );
1111 domText = domDocument.createTextNode( (tmpDev.PSO_Net_host ? "yes" : "no") );
1112 deviceElement.appendChild( domText );
1113
1114 // PSO_Net_restrict
1115 deviceElement = domDocument.createElement( "Net_restrict" );
1116 domElement.appendChild( deviceElement );
1117 domText = domDocument.createTextNode( (tmpDev.PSO_Net_restrict ? "yes" : "no") );
1118 deviceElement.appendChild( domText );
1119
1120 // PSO_Net_dhcpstart
1121 deviceElement = domDocument.createElement( "Net_dhcpstart" );
1122 domElement.appendChild( deviceElement );
1123 domText = domDocument.createTextNode( (tmpDev.PSO_Net_dhcpstart ? "yes" : "no") );
1124 deviceElement.appendChild( domText );
1125
1126 // PSO_Net_dns
1127 deviceElement = domDocument.createElement( "Net_dns" );
1128 domElement.appendChild( deviceElement );
1129 domText = domDocument.createTextNode( (tmpDev.PSO_Net_dns ? "yes" : "no") );
1130 deviceElement.appendChild( domText );
1131
1132 // PSO_Net_tftp
1133 deviceElement = domDocument.createElement( "Net_tftp" );
1134 domElement.appendChild( deviceElement );
1135 domText = domDocument.createTextNode( (tmpDev.PSO_Net_tftp ? "yes" : "no") );
1136 deviceElement.appendChild( domText );
1137
1138 // PSO_Net_bootfile
1139 deviceElement = domDocument.createElement( "Net_bootfile" );
1140 domElement.appendChild( deviceElement );
1141 domText = domDocument.createTextNode( (tmpDev.PSO_Net_bootfile ? "yes" : "no") );
1142 deviceElement.appendChild( domText );
1143
1144 // PSO_Net_smb
1145 deviceElement = domDocument.createElement( "Net_smb" );
1146 domElement.appendChild( deviceElement );
1147 domText = domDocument.createTextNode( (tmpDev.PSO_Net_smb ? "yes" : "no") );
1148 deviceElement.appendChild( domText );
1149
1150 // PSO_Net_hostfwd
1151 deviceElement = domDocument.createElement( "Net_hostfwd" );
1152 domElement.appendChild( deviceElement );
1153 domText = domDocument.createTextNode( (tmpDev.PSO_Net_hostfwd ? "yes" : "no") );
1154 deviceElement.appendChild( domText );
1155
1156 // PSO_Net_guestfwd
1157 deviceElement = domDocument.createElement( "Net_guestfwd" );
1158 domElement.appendChild( deviceElement );
1159 domText = domDocument.createTextNode( (tmpDev.PSO_Net_guestfwd ? "yes" : "no") );
1160 deviceElement.appendChild( domText );
1161
1162
1163 // PSO_Net_ifname
1164 deviceElement = domDocument.createElement( "Net_ifname" );
1165 domElement.appendChild( deviceElement );
1166 domText = domDocument.createTextNode( (tmpDev.PSO_Net_ifname ? "yes" : "no") );
1167 deviceElement.appendChild( domText );
1168
1169 // PSO_Net_script
1170 deviceElement = domDocument.createElement( "Net_script" );
1171 domElement.appendChild( deviceElement );
1172 domText = domDocument.createTextNode( (tmpDev.PSO_Net_script ? "yes" : "no") );
1173 deviceElement.appendChild( domText );
1174
1175 // PSO_Net_downscript
1176 deviceElement = domDocument.createElement( "Net_downscript" );
1177 domElement.appendChild( deviceElement );
1178 domText = domDocument.createTextNode( (tmpDev.PSO_Net_downscript ? "yes" : "no") );
1179 deviceElement.appendChild( domText );
1180
1181 // PSO_Net_sndbuf
1182 deviceElement = domDocument.createElement( "Net_sndbuf" );
1183 domElement.appendChild( deviceElement );
1184 domText = domDocument.createTextNode( (tmpDev.PSO_Net_sndbuf ? "yes" : "no") );
1185 deviceElement.appendChild( domText );
1186
1187 // PSO_Net_vnet_hdr
1188 deviceElement = domDocument.createElement( "Net_vnet_hdr" );
1189 domElement.appendChild( deviceElement );
1190 domText = domDocument.createTextNode( (tmpDev.PSO_Net_vnet_hdr ? "yes" : "no") );
1191 deviceElement.appendChild( domText );
1192
1193 // PSO_Net_vhost
1194 deviceElement = domDocument.createElement( "Net_vhost" );
1195 domElement.appendChild( deviceElement );
1196 domText = domDocument.createTextNode( (tmpDev.PSO_Net_vhost ? "yes" : "no") );
1197 deviceElement.appendChild( domText );
1198
1199 // PSO_Net_Net_vhostfd
1200 deviceElement = domDocument.createElement( "Net_vhostfd" );
1201 domElement.appendChild( deviceElement );
1202 domText = domDocument.createTextNode( (tmpDev.PSO_Net_vhostfd ? "yes" : "no") );
1203 deviceElement.appendChild( domText );
1204
1205 // PSO_Net_listen
1206 deviceElement = domDocument.createElement( "Net_listen" );
1207 domElement.appendChild( deviceElement );
1208 domText = domDocument.createTextNode( (tmpDev.PSO_Net_listen ? "yes" : "no") );
1209 deviceElement.appendChild( domText );
1210
1211 // PSO_Net_connect
1212 deviceElement = domDocument.createElement( "Net_connect" );
1213 domElement.appendChild( deviceElement );
1214 domText = domDocument.createTextNode( (tmpDev.PSO_Net_connect ? "yes" : "no") );
1215 deviceElement.appendChild( domText );
1216
1217
1218 // PSO_Net_mcast
1219 deviceElement = domDocument.createElement( "Net_mcast" );
1220 domElement.appendChild( deviceElement );
1221 domText = domDocument.createTextNode( (tmpDev.PSO_Net_mcast ? "yes" : "no") );
1222 deviceElement.appendChild( domText );
1223
1224
1225 // PSO_Net_sock
1226 deviceElement = domDocument.createElement( "Net_sock" );
1227 domElement.appendChild( deviceElement );
1228 domText = domDocument.createTextNode( (tmpDev.PSO_Net_sock ? "yes" : "no") );
1229 deviceElement.appendChild( domText );
1230
1231 // PSO_Net_port
1232 deviceElement = domDocument.createElement( "Net_port" );
1233 domElement.appendChild( deviceElement );
1234 domText = domDocument.createTextNode( (tmpDev.PSO_Net_port ? "yes" : "no") );
1235 deviceElement.appendChild( domText );
1236
1237 // PSO_Net_group
1238 deviceElement = domDocument.createElement( "Net_group" );
1239 domElement.appendChild( deviceElement );
1240 domText = domDocument.createTextNode( (tmpDev.PSO_Net_group ? "yes" : "no") );
1241 deviceElement.appendChild( domText );
1242
1243 // PSO_Net_mode
1244 deviceElement = domDocument.createElement( "Net_mode" );
1245 domElement.appendChild( deviceElement );
1246 domText = domDocument.createTextNode( (tmpDev.PSO_Net_mode ? "yes" : "no") );
1247 deviceElement.appendChild( domText );
1248
1249
1250 // PSO_Net_file
1251 deviceElement = domDocument.createElement( "Net_file" );
1252 domElement.appendChild( deviceElement );
1253 domText = domDocument.createTextNode( (tmpDev.PSO_Net_file ? "yes" : "no") );
1254 deviceElement.appendChild( domText );
1255
1256 // PSO_Net_len
1257 deviceElement = domDocument.createElement( "Net_len" );
1258 domElement.appendChild( deviceElement );
1259 domText = domDocument.createTextNode( (tmpDev.PSO_Net_len ? "yes" : "no") );
1260 deviceElement.appendChild( domText );
1261
1262
1263 // PSO_Enable_KVM
1264 deviceElement = domDocument.createElement( "Enable_KVM" );
1265 domElement.appendChild( deviceElement );
1266 domText = domDocument.createTextNode( (tmpDev.PSO_Enable_KVM ? "yes" : "no") );
1267 deviceElement.appendChild( domText );
1268
1269 // PSO_No_KVM
1270 deviceElement = domDocument.createElement( "No_KVM" );
1271 domElement.appendChild( deviceElement );
1272 domText = domDocument.createTextNode( (tmpDev.PSO_No_KVM ? "yes" : "no") );
1273 deviceElement.appendChild( domText );
1274
1275 // PSO_No_KVM_IRQChip
1276 deviceElement = domDocument.createElement( "No_KVM_IRQChip" );
1277 domElement.appendChild( deviceElement );
1278 domText = domDocument.createTextNode( (tmpDev.PSO_No_KVM_IRQChip ? "yes" : "no") );
1279 deviceElement.appendChild( domText );
1280
1281 // PSO_No_KVM_Pit
1282 deviceElement = domDocument.createElement( "No_KVM_Pit" );
1283 domElement.appendChild( deviceElement );
1284 domText = domDocument.createTextNode( (tmpDev.PSO_No_KVM_Pit ? "yes" : "no") );
1285 deviceElement.appendChild( domText );
1286
1287 // PSO_No_KVM_Pit_Reinjection
1288 deviceElement = domDocument.createElement( "No_KVM_Pit_Reinjection" );
1289 domElement.appendChild( deviceElement );
1290 domText = domDocument.createTextNode( (tmpDev.PSO_No_KVM_Pit_Reinjection ? "yes" : "no") );
1291 deviceElement.appendChild( domText );
1292
1293 // PSO_Enable_Nesting
1294 deviceElement = domDocument.createElement( "Enable_Nesting" );
1295 domElement.appendChild( deviceElement );
1296 domText = domDocument.createTextNode( (tmpDev.PSO_Enable_Nesting ? "yes" : "no") );
1297 deviceElement.appendChild( domText );
1298
1299 // PSO_KVM_Shadow_Memory
1300 deviceElement = domDocument.createElement( "KVM_Shadow_Memory" );
1301 domElement.appendChild( deviceElement );
1302 domText = domDocument.createTextNode( (tmpDev.PSO_KVM_Shadow_Memory ? "yes" : "no") );
1303 deviceElement.appendChild( domText );
1304
1305 // PSO_SPICE
1306 deviceElement = domDocument.createElement( "SPICE" );
1307 domElement.appendChild( deviceElement );
1308 domText = domDocument.createTextNode( (tmpDev.PSO_SPICE ? "yes" : "no") );
1309 deviceElement.appendChild( domText );
1310
1311 // PSO_QXL
1312 deviceElement = domDocument.createElement( "QXL" );
1313 domElement.appendChild( deviceElement );
1314 domText = domDocument.createTextNode( (tmpDev.PSO_QXL ? "yes" : "no") );
1315 deviceElement.appendChild( domText );
1316
1317 // PSO_TFTP
1318 deviceElement = domDocument.createElement( "TFTP" );
1319 domElement.appendChild( deviceElement );
1320 domText = domDocument.createTextNode( (tmpDev.PSO_TFTP ? "yes" : "no") );
1321 deviceElement.appendChild( domText );
1322
1323 // PSO_SMB
1324 deviceElement = domDocument.createElement( "SMB" );
1325 domElement.appendChild( deviceElement );
1326 domText = domDocument.createTextNode( (tmpDev.PSO_SMB ? "yes" : "no") );
1327 deviceElement.appendChild( domText );
1328
1329 // PSO_Std_VGA
1330 deviceElement = domDocument.createElement( "Std_VGA" );
1331 domElement.appendChild( deviceElement );
1332 domText = domDocument.createTextNode( (tmpDev.PSO_Std_VGA ? "yes" : "no") );
1333 deviceElement.appendChild( domText );
1334
1335
1336 emulatorElement.appendChild( domElement );
1337
1338 // Next
1339 ++devicesIter;
1340 }
1341
1342 // Save to file
1343 QFile outFile( path );
1344
1345 if( ! outFile.open(QFile::WriteOnly | QFile::Truncate) )
1346 {
1347 AQError( "bool Emulator::Save() const",
1348 QString("Cannot create emulator file \"%1\"").arg(path) );
1349 return false;
1350 }
1351
1352 QTextStream outStream( &outFile );
1353 domDocument.save( outStream, 4 );
1354
1355 return true;
1356 }
1357
Get_Emulator_File_Path() const1358 QString Emulator::Get_Emulator_File_Path() const
1359 {
1360 if( Name.isEmpty() )
1361 {
1362 AQError( "QString Emulator::Get_Emulator_File_Path() const",
1363 "Name is empty" );
1364 return "";
1365 }
1366
1367 QSettings settigs;
1368 QFileInfo info( settigs.fileName() );
1369 QString aqemuSettingsFolder = info.absoluteDir().absolutePath();
1370
1371 if( ! QFile::exists(aqemuSettingsFolder) )
1372 {
1373 AQError( "QString Emulator::Get_Emulator_File_Path() const",
1374 QString("Cannot get path for save emulator! Folder \"%1\" not exists!").arg(aqemuSettingsFolder) );
1375 return "";
1376 }
1377
1378 // All ok. Return result
1379 return QDir::toNativeSeparators( aqemuSettingsFolder +
1380 (aqemuSettingsFolder.endsWith("/") || aqemuSettingsFolder.endsWith("\\") ? "" : "/") +
1381 Name + ".emulator" );
1382 }
1383
1384 /*
1385 void Emulator::Set_Type( VM::Emulator_Type type )
1386 {
1387 Type = type;
1388 // FIXME
1389 if( Type != type )
1390 {
1391 // bin names
1392 QStringList QEMU_Binary_Names;
1393 QEMU_Binary_Names << "qemu";
1394 QEMU_Binary_Names << "qemu-system-x86_64";
1395 QEMU_Binary_Names << "qemu-system-arm";
1396 QEMU_Binary_Names << "qemu-system-cris";
1397 QEMU_Binary_Names << "qemu-system-m68k";
1398 QEMU_Binary_Names << "qemu-system-mips";
1399 QEMU_Binary_Names << "qemu-system-mipsel";
1400 QEMU_Binary_Names << "qemu-system-mips64";
1401 QEMU_Binary_Names << "qemu-system-mips64el";
1402 QEMU_Binary_Names << "qemu-system-ppc";
1403 QEMU_Binary_Names << "qemu-system-ppc64";
1404 QEMU_Binary_Names << "qemu-system-ppcemb";
1405 QEMU_Binary_Names << "qemu-system-sh4";
1406 QEMU_Binary_Names << "qemu-system-sh4eb";
1407 QEMU_Binary_Names << "qemu-system-sparc";
1408
1409 QStringList KVM_Binary_Names;
1410 KVM_Binary_Names << "kvm";
1411
1412 if( type == VM::QEMU )
1413 {
1414 Binary_Files.clear();
1415 for( int ix = 0; ix < QEMU_Binary_Names.count(); ++ix ) Binary_Files[ QEMU_Binary_Names[ix] ] = "";
1416 }
1417 else if( type == VM::KVM )
1418 {
1419 Binary_Files.clear();
1420 for( int ix = 0; ix < KVM_Binary_Names.count(); ++ix ) Binary_Files[ KVM_Binary_Names[ix] ] = "";
1421 }
1422 else
1423 {
1424 AQError( "void Emulator::Set_Type( const QString &type )",
1425 "Type Incorrect! Use Default: QEMU" );
1426
1427 Binary_Files.clear();
1428 for( int ix = 0; ix < QEMU_Binary_Names.count(); ++ix ) Binary_Files[ QEMU_Binary_Names[ix] ] = "";
1429 }
1430
1431 Type = type;
1432 }
1433 }*/
1434
Get_Name() const1435 const QString &Emulator::Get_Name() const
1436 {
1437 return Name;
1438 }
1439
Set_Name(const QString & name)1440 void Emulator::Set_Name( const QString &name )
1441 {
1442 Name = name;
1443 }
1444
Get_Default() const1445 bool Emulator::Get_Default() const
1446 {
1447 return Default;
1448 }
1449
Set_Default(bool on)1450 void Emulator::Set_Default( bool on )
1451 {
1452 Default = on;
1453 }
1454
Get_Path() const1455 const QString &Emulator::Get_Path() const
1456 {
1457 return Path;
1458 }
1459
Set_Path(const QString & path)1460 void Emulator::Set_Path( const QString &path )
1461 {
1462 Path = path;
1463 }
1464
Get_Check_Version() const1465 bool Emulator::Get_Check_Version() const
1466 {
1467 return Check_Version;
1468 }
1469
Set_Check_Version(bool check)1470 void Emulator::Set_Check_Version( bool check )
1471 {
1472 Check_Version = check;
1473 }
1474
Get_Check_Available_Options() const1475 bool Emulator::Get_Check_Available_Options() const
1476 {
1477 return Check_Available_Options;
1478 }
1479
Set_Check_Available_Options(bool check)1480 void Emulator::Set_Check_Available_Options( bool check )
1481 {
1482 Check_Available_Options = check;
1483 }
1484
Get_Force_Version() const1485 bool Emulator::Get_Force_Version() const
1486 {
1487 return Force_Version;
1488 }
1489
Set_Force_Version(bool on)1490 void Emulator::Set_Force_Version( bool on )
1491 {
1492 Force_Version = on;
1493 }
1494
Get_Version() const1495 VM::Emulator_Version Emulator::Get_Version() const
1496 {
1497 return Version;
1498 }
1499
Set_Version(VM::Emulator_Version ver)1500 void Emulator::Set_Version( VM::Emulator_Version ver )
1501 {
1502 Version = ver;
1503 }
1504
Get_Binary_Files() const1505 const QMap<QString, QString> &Emulator::Get_Binary_Files() const
1506 {
1507 return Binary_Files;
1508 }
1509
Set_Binary_Files(const QMap<QString,QString> & files)1510 void Emulator::Set_Binary_Files( const QMap<QString, QString> &files )
1511 {
1512 Binary_Files = files;
1513 }
1514
Get_Devices() const1515 const QMap<QString, Available_Devices> &Emulator::Get_Devices() const
1516 {
1517 if( Force_Version || Check_Version )
1518 {
1519 switch( Version )
1520 {
1521
1522 case VM::QEMU_2_0:
1523 return System_Info::Emulator_QEMU_2_0;
1524
1525 /*case VM::KVM_2_0:
1526 return System_Info::Emulator_KVM_2_0; */ //tobgle //FIXME?
1527
1528 default:
1529 AQError( "const QMap<QString, Available_Devices> &Emulator::Get_Devices() const",
1530 "Emulator Version Incorrect!" );
1531 static QMap<QString, Available_Devices> emptyMap;
1532 return emptyMap;
1533 }
1534 }
1535 else // Check Options or Save Options
1536 {
1537 return Devices;
1538 }
1539 }
1540
Set_Devices(const QMap<QString,Available_Devices> & devices)1541 void Emulator::Set_Devices( const QMap<QString, Available_Devices> &devices )
1542 {
1543 Devices = devices;
1544 }
1545
1546 //---------------------------------------------------------------------------
1547
1548 // VM_Nativ_Storage_Device --------------------------------------------------
1549
VM_Nativ_Storage_Device()1550 VM_Nativ_Storage_Device::VM_Nativ_Storage_Device()
1551 {
1552 UFile_Path = false;
1553 File_Path = "";
1554 UInterface = false;
1555 Interface = VM::DI_IDE;
1556 UBus_Unit = false;
1557 Bus = 0;
1558 Unit = 0;
1559 UIndex = false;
1560 Index = 0;
1561 UMedia = false;
1562 Media = VM::DM_Disk;
1563 Uhdachs = false;
1564 Cyls = 0;
1565 Heads = 0;
1566 Secs = 0;
1567 Trans = 0;
1568 USnapshot = false;
1569 Snapshot = false;
1570 UCache = false;
1571 Cache = "none";
1572 UAIO = false;
1573 AIO = "threads";
1574 UBoot = false;
1575 Boot = false;
1576 }
1577
VM_Nativ_Storage_Device(const VM_Nativ_Storage_Device & sd)1578 VM_Nativ_Storage_Device::VM_Nativ_Storage_Device( const VM_Nativ_Storage_Device &sd )
1579 {
1580 UFile_Path = sd.Use_File_Path();
1581 File_Path = sd.Get_File_Path();
1582 UInterface = sd.Use_Interface();
1583 Interface = sd.Get_Interface();
1584 UBus_Unit = sd.Use_Bus_Unit();
1585 Bus = sd.Get_Bus();
1586 Unit = sd.Get_Unit();
1587 UIndex = sd.Use_Index();
1588 Index = sd.Get_Index();
1589 UMedia = sd.Use_Media();
1590 Media = sd.Get_Media();
1591 Uhdachs = sd.Use_hdachs();
1592 Cyls = sd.Get_Cyls();
1593 Heads = sd.Get_Heads();
1594 Secs = sd.Get_Secs();
1595 Trans = sd.Get_Trans();
1596 USnapshot = sd.Use_Snapshot();
1597 Snapshot = sd.Get_Snapshot();
1598 UCache = sd.Use_Cache();
1599 Cache = sd.Get_Cache();
1600 UAIO = sd.Use_AIO();
1601 AIO = sd.Get_AIO();
1602 UBoot = sd.Use_Boot();
1603 Boot = sd.Get_Boot();
1604 }
1605
Get_Nativ_Mode() const1606 bool VM_Nativ_Storage_Device::Get_Nativ_Mode() const
1607 {
1608 if( UAIO ) return true;
1609 if( UBoot ) return true;
1610 if( UBus_Unit ) return true;
1611 if( UCache ) return true;
1612 if( UFile_Path ) return true;
1613 if( Uhdachs ) return true;
1614 if( UIndex ) return true;
1615 if( UInterface ) return true;
1616 if( UMedia ) return true;
1617 if( USnapshot ) return true;
1618
1619 // Nativ device options not used
1620 return false;
1621 }
1622
Get_QEMU_Device_Name() const1623 QString VM_Nativ_Storage_Device::Get_QEMU_Device_Name() const
1624 {
1625 // FIXME Get_QEMU_Device_Name()
1626 return "ide0-hd1";
1627 }
1628
operator ==(const VM_Nativ_Storage_Device & sd) const1629 bool VM_Nativ_Storage_Device::operator==( const VM_Nativ_Storage_Device &sd ) const
1630 {
1631 if( UFile_Path == sd.Use_File_Path() &&
1632 File_Path == sd.Get_File_Path() &&
1633 UInterface == sd.Use_Interface() &&
1634 Interface == sd.Get_Interface() &&
1635 UBus_Unit == sd.Use_Bus_Unit() &&
1636 Bus == sd.Get_Bus() &&
1637 Unit == sd.Get_Unit() &&
1638 UIndex == sd.Use_Index() &&
1639 Index == sd.Get_Index() &&
1640 UMedia == sd.Use_Media() &&
1641 Media == sd.Get_Media() &&
1642 Uhdachs == sd.Use_hdachs() &&
1643 Cyls == sd.Get_Cyls() &&
1644 Heads == sd.Get_Heads() &&
1645 Secs == sd.Get_Secs() &&
1646 Trans == sd.Get_Trans() &&
1647 USnapshot == sd.Use_Snapshot() &&
1648 Snapshot == sd.Get_Snapshot() &&
1649 UCache == sd.Use_Cache() &&
1650 Cache == sd.Get_Cache() &&
1651 UAIO == sd.Use_AIO() &&
1652 AIO == sd.Get_AIO() &&
1653 UBoot == sd.Use_Boot() &&
1654 Boot == sd.Get_Boot() )
1655 {
1656 return true;
1657 }
1658 else
1659 {
1660 return false;
1661 }
1662 }
1663
operator !=(const VM_Nativ_Storage_Device & sd) const1664 bool VM_Nativ_Storage_Device::operator!=( const VM_Nativ_Storage_Device &sd ) const
1665 {
1666 return ! ( operator==(sd) );
1667 }
1668
Use_File_Path() const1669 bool VM_Nativ_Storage_Device::Use_File_Path() const
1670 {
1671 return UFile_Path;
1672 }
1673
Use_File_Path(bool use)1674 void VM_Nativ_Storage_Device::Use_File_Path( bool use )
1675 {
1676 UFile_Path = use;
1677 }
1678
Get_File_Path() const1679 const QString &VM_Nativ_Storage_Device::Get_File_Path() const
1680 {
1681 return File_Path;
1682 }
1683
Set_File_Path(const QString & path)1684 void VM_Nativ_Storage_Device::Set_File_Path( const QString &path )
1685 {
1686 File_Path = path;
1687 }
1688
Use_Interface() const1689 bool VM_Nativ_Storage_Device::Use_Interface() const
1690 {
1691 return UInterface;
1692 }
1693
Use_Interface(bool use)1694 void VM_Nativ_Storage_Device::Use_Interface( bool use )
1695 {
1696 UInterface = use;
1697 }
1698
Get_Interface() const1699 VM::Device_Interface VM_Nativ_Storage_Device::Get_Interface() const
1700 {
1701 return Interface;
1702 }
1703
Set_Interface(VM::Device_Interface di)1704 void VM_Nativ_Storage_Device::Set_Interface( VM::Device_Interface di )
1705 {
1706 Interface = di;
1707 }
1708
Use_Bus_Unit() const1709 bool VM_Nativ_Storage_Device::Use_Bus_Unit() const
1710 {
1711 return UBus_Unit;
1712 }
1713
Use_Bus_Unit(bool use)1714 void VM_Nativ_Storage_Device::Use_Bus_Unit( bool use )
1715 {
1716 UBus_Unit = use;
1717 }
1718
Get_Bus() const1719 int VM_Nativ_Storage_Device::Get_Bus() const
1720 {
1721 return Bus;
1722 }
1723
Set_Bus(int bus)1724 void VM_Nativ_Storage_Device::Set_Bus( int bus )
1725 {
1726 Bus = bus;
1727 }
1728
Get_Unit() const1729 int VM_Nativ_Storage_Device::Get_Unit() const
1730 {
1731 return Unit;
1732 }
1733
Set_Unit(int unit)1734 void VM_Nativ_Storage_Device::Set_Unit( int unit )
1735 {
1736 Unit = unit;
1737 }
1738
Use_Index() const1739 bool VM_Nativ_Storage_Device::Use_Index() const
1740 {
1741 return UIndex;
1742 }
1743
Use_Index(bool use)1744 void VM_Nativ_Storage_Device::Use_Index( bool use )
1745 {
1746 UIndex = use;
1747 }
1748
Get_Index() const1749 int VM_Nativ_Storage_Device::Get_Index() const
1750 {
1751 return Index;
1752 }
1753
Set_Index(int index)1754 void VM_Nativ_Storage_Device::Set_Index( int index )
1755 {
1756 Index = index;
1757 }
1758
Use_Media() const1759 bool VM_Nativ_Storage_Device::Use_Media() const
1760 {
1761 return UMedia;
1762 }
1763
Use_Media(bool use)1764 void VM_Nativ_Storage_Device::Use_Media( bool use )
1765 {
1766 UMedia = use;
1767 }
1768
Get_Media() const1769 VM::Device_Media VM_Nativ_Storage_Device::Get_Media() const
1770 {
1771 return Media;
1772 }
1773
Set_Media(VM::Device_Media media)1774 void VM_Nativ_Storage_Device::Set_Media( VM::Device_Media media )
1775 {
1776 Media = media;
1777 }
1778
Use_hdachs() const1779 bool VM_Nativ_Storage_Device::Use_hdachs() const
1780 {
1781 return Uhdachs;
1782 }
1783
Use_hdachs(bool use)1784 void VM_Nativ_Storage_Device::Use_hdachs( bool use )
1785 {
1786 Uhdachs = use;
1787 }
1788
Get_Cyls() const1789 unsigned long VM_Nativ_Storage_Device::Get_Cyls() const
1790 {
1791 return Cyls;
1792 }
1793
Set_Cyls(unsigned long cyls)1794 void VM_Nativ_Storage_Device::Set_Cyls( unsigned long cyls )
1795 {
1796 Cyls = cyls;
1797 }
1798
Get_Heads() const1799 unsigned long VM_Nativ_Storage_Device::Get_Heads() const
1800 {
1801 return Heads;
1802 }
1803
Set_Heads(unsigned long heads)1804 void VM_Nativ_Storage_Device::Set_Heads( unsigned long heads )
1805 {
1806 Heads = heads;
1807 }
1808
Get_Secs() const1809 unsigned long VM_Nativ_Storage_Device::Get_Secs() const
1810 {
1811 return Secs;
1812 }
1813
Set_Secs(unsigned long secs)1814 void VM_Nativ_Storage_Device::Set_Secs( unsigned long secs )
1815 {
1816 Secs = secs;
1817 }
1818
Get_Trans() const1819 unsigned long VM_Nativ_Storage_Device::Get_Trans() const
1820 {
1821 return Trans;
1822 }
1823
Set_Trans(unsigned long trans)1824 void VM_Nativ_Storage_Device::Set_Trans( unsigned long trans )
1825 {
1826 Trans = trans;
1827 }
1828
Use_Snapshot() const1829 bool VM_Nativ_Storage_Device::Use_Snapshot() const
1830 {
1831 return USnapshot;
1832 }
1833
Use_Snapshot(bool use)1834 void VM_Nativ_Storage_Device::Use_Snapshot( bool use )
1835 {
1836 USnapshot = use;
1837 }
1838
Get_Snapshot() const1839 bool VM_Nativ_Storage_Device::Get_Snapshot() const
1840 {
1841 return Snapshot;
1842 }
1843
Set_Snapshot(bool snapshot)1844 void VM_Nativ_Storage_Device::Set_Snapshot( bool snapshot )
1845 {
1846 Snapshot = snapshot;
1847 }
1848
Use_Cache() const1849 bool VM_Nativ_Storage_Device::Use_Cache() const
1850 {
1851 return UCache;
1852 }
1853
Use_Cache(bool use)1854 void VM_Nativ_Storage_Device::Use_Cache( bool use )
1855 {
1856 UCache = use;
1857 }
1858
Get_Cache() const1859 const QString &VM_Nativ_Storage_Device::Get_Cache() const
1860 {
1861 return Cache;
1862 }
1863
Set_Cache(const QString & cache)1864 void VM_Nativ_Storage_Device::Set_Cache( const QString &cache )
1865 {
1866 Cache = cache;
1867 }
1868
Use_AIO() const1869 bool VM_Nativ_Storage_Device::Use_AIO() const
1870 {
1871 return UAIO;
1872 }
1873
Use_AIO(bool use)1874 void VM_Nativ_Storage_Device::Use_AIO( bool use )
1875 {
1876 UAIO = use;
1877 }
1878
Get_AIO() const1879 const QString &VM_Nativ_Storage_Device::Get_AIO() const
1880 {
1881 return AIO;
1882 }
1883
Set_AIO(const QString & aio)1884 void VM_Nativ_Storage_Device::Set_AIO( const QString &aio )
1885 {
1886 AIO = aio;
1887 }
1888
Use_Boot() const1889 bool VM_Nativ_Storage_Device::Use_Boot() const
1890 {
1891 return UBoot;
1892 }
1893
Use_Boot(bool use)1894 void VM_Nativ_Storage_Device::Use_Boot( bool use )
1895 {
1896 UBoot = use;
1897 }
1898
Get_Boot() const1899 bool VM_Nativ_Storage_Device::Get_Boot() const
1900 {
1901 return Boot;
1902 }
1903
Set_Boot(bool boot)1904 void VM_Nativ_Storage_Device::Set_Boot( bool boot )
1905 {
1906 Boot = boot;
1907 }
1908
1909 //===========================================================================
1910
1911 // VM_Storage_Device Class --------------------------------------------------
1912
VM_Storage_Device()1913 VM_Storage_Device::VM_Storage_Device()
1914 {
1915 Enabled = false;
1916 File_Name = "";
1917 Nativ_Device = VM_Nativ_Storage_Device();
1918 }
1919
VM_Storage_Device(const VM_Storage_Device & device)1920 VM_Storage_Device::VM_Storage_Device( const VM_Storage_Device &device )
1921 {
1922 Enabled = device.Get_Enabled();
1923 File_Name = device.Get_File_Name();
1924 Nativ_Device = device.Get_Nativ_Device();
1925 }
1926
VM_Storage_Device(bool enabled,const QString & file_name)1927 VM_Storage_Device::VM_Storage_Device( bool enabled, const QString &file_name )
1928 {
1929 Enabled = enabled;
1930 File_Name = file_name;
1931 Nativ_Device = VM_Nativ_Storage_Device();
1932 Nativ_Device.Set_File_Path( file_name );
1933 }
1934
VM_Storage_Device(bool enabled,const QString & file_name,bool nativ_mode,const VM_Nativ_Storage_Device & device)1935 VM_Storage_Device::VM_Storage_Device( bool enabled, const QString &file_name, bool nativ_mode, const VM_Nativ_Storage_Device &device )
1936 {
1937 Enabled = enabled;
1938 File_Name = file_name;
1939 Nativ_Device = VM_Nativ_Storage_Device( device );
1940 Nativ_Device.Set_File_Path( file_name );
1941 }
1942
operator ==(const VM_Storage_Device & device) const1943 bool VM_Storage_Device::operator==( const VM_Storage_Device &device ) const
1944 {
1945 if( Enabled == device.Get_Enabled() &&
1946 File_Name == device.Get_File_Name() &&
1947 Nativ_Device == device.Get_Nativ_Device() )
1948 {
1949 return true;
1950 }
1951 else return false;
1952 }
1953
operator !=(const VM_Storage_Device & device) const1954 bool VM_Storage_Device::operator!=( const VM_Storage_Device &device ) const
1955 {
1956 return ! operator==( device );
1957 }
1958
Get_Enabled() const1959 bool VM_Storage_Device::Get_Enabled() const
1960 {
1961 return Enabled;
1962 }
1963
Set_Enabled(bool enabled)1964 void VM_Storage_Device::Set_Enabled( bool enabled )
1965 {
1966 Enabled = enabled;
1967 }
1968
Get_File_Name() const1969 const QString &VM_Storage_Device::Get_File_Name() const
1970 {
1971 return File_Name;
1972 }
1973
Set_File_Name(const QString & file_name)1974 void VM_Storage_Device::Set_File_Name( const QString &file_name )
1975 {
1976 File_Name = file_name;
1977 Nativ_Device.Set_File_Path( file_name );
1978 }
1979
Get_Nativ_Mode() const1980 bool VM_Storage_Device::Get_Nativ_Mode() const
1981 {
1982 return Nativ_Device.Get_Nativ_Mode();
1983 }
1984
Get_Nativ_Device() const1985 const VM_Nativ_Storage_Device &VM_Storage_Device::Get_Nativ_Device() const
1986 {
1987 return Nativ_Device;
1988 }
1989
Set_Nativ_Device(const VM_Nativ_Storage_Device & device)1990 void VM_Storage_Device::Set_Nativ_Device( const VM_Nativ_Storage_Device &device )
1991 {
1992 Nativ_Device = device;
1993 }
1994
1995 //===========================================================================
1996
1997
1998 // VM_Shared_Folder Class --------------------------------------------------
1999
VM_Shared_Folder()2000 VM_Shared_Folder::VM_Shared_Folder()
2001 {
2002 Enabled = false;
2003 Folder = "";
2004 }
2005
VM_Shared_Folder(const VM_Shared_Folder & device)2006 VM_Shared_Folder::VM_Shared_Folder( const VM_Shared_Folder &device )
2007 {
2008 Enabled = device.Get_Enabled();
2009 Folder = device.Get_Folder();
2010 }
2011
VM_Shared_Folder(bool enabled,const QString & folder)2012 VM_Shared_Folder::VM_Shared_Folder( bool enabled, const QString &folder )
2013 {
2014 Enabled = enabled;
2015 Folder = folder;
2016 }
2017
operator ==(const VM_Shared_Folder & folder) const2018 bool VM_Shared_Folder::operator==( const VM_Shared_Folder &folder ) const
2019 {
2020 if( Enabled == folder.Get_Enabled() &&
2021 Folder == folder.Get_Folder() )
2022 {
2023 return true;
2024 }
2025 else return false;
2026 }
2027
operator !=(const VM_Shared_Folder & folder) const2028 bool VM_Shared_Folder::operator!=( const VM_Shared_Folder &folder ) const
2029 {
2030 return ! operator==( folder );
2031 }
2032
Get_Enabled() const2033 bool VM_Shared_Folder::Get_Enabled() const
2034 {
2035 return Enabled;
2036 }
2037
Set_Enabled(bool enabled)2038 void VM_Shared_Folder::Set_Enabled( bool enabled )
2039 {
2040 Enabled = enabled;
2041 }
2042
Get_Folder() const2043 const QString &VM_Shared_Folder::Get_Folder() const
2044 {
2045 return Folder;
2046 }
2047
Set_Folder(const QString & folder)2048 void VM_Shared_Folder::Set_Folder( const QString &folder )
2049 {
2050 Folder = folder;
2051 }
2052
2053 //===========================================================================
2054
2055
2056 // VM_HDD Class -------------------------------------------------------------
2057
VM_HDD()2058 VM_HDD::VM_HDD() : VM_Storage_Device()
2059 {
2060 Reset_Info();
2061 }
2062
VM_HDD(const VM_HDD & hd)2063 VM_HDD::VM_HDD( const VM_HDD &hd ) : VM_Storage_Device( hd )
2064 {
2065 if( File_Name.isEmpty() ) Reset_Info();
2066 }
2067
VM_HDD(bool enabled,const QString & im_pach)2068 VM_HDD::VM_HDD( bool enabled, const QString &im_pach )
2069 {
2070 Set_Enabled( enabled );
2071 Set_File_Name( im_pach );
2072
2073 if( im_pach.isEmpty() ) Reset_Info();
2074 }
2075
operator ==(const VM_HDD & v) const2076 bool VM_HDD::operator==( const VM_HDD &v ) const
2077 {
2078 return VM_Storage_Device::operator==( v );
2079 }
2080
operator !=(const VM_HDD & v) const2081 bool VM_HDD::operator!=( const VM_HDD &v ) const
2082 {
2083 return ! ( operator==(v) );
2084 }
2085
Set_File_Name(const QString & file_name)2086 void VM_HDD::Set_File_Name( const QString &file_name )
2087 {
2088 if( file_name.isEmpty() ) Reset_Info();
2089
2090 VM_Storage_Device::Set_File_Name( file_name );
2091 }
2092
Set_Disk_Info(VM::Disk_Info info)2093 void VM_HDD::Set_Disk_Info( VM::Disk_Info info )
2094 {
2095 Disk_Format = info.Disk_Format;
2096 Virtual_Size = info.Virtual_Size;
2097 Disk_Size = info.Disk_Size;
2098 Cluster_Size = info.Cluster_Size;
2099 }
2100
Get_Image_Format() const2101 const QString &VM_HDD::Get_Image_Format() const
2102 {
2103 return Disk_Format;
2104 }
2105
Get_Virtual_Size() const2106 const VM::Device_Size &VM_HDD::Get_Virtual_Size() const
2107 {
2108 return Virtual_Size;
2109 }
2110
Get_Disk_Size() const2111 const VM::Device_Size &VM_HDD::Get_Disk_Size() const
2112 {
2113 return Disk_Size;
2114 }
2115
Get_Cluster_Size() const2116 int VM_HDD::Get_Cluster_Size() const
2117 {
2118 return Cluster_Size;
2119 }
2120
Get_Virtual_Size_in_GB() const2121 double VM_HDD::Get_Virtual_Size_in_GB() const
2122 {
2123 if( Virtual_Size.Size < 1 ) return 0.0;
2124
2125 int div = 0;
2126
2127 switch( Virtual_Size.Suffix )
2128 {
2129 case VM::Size_Suf_Kb:
2130 div = 1048576;
2131 break;
2132
2133 case VM::Size_Suf_Mb:
2134 div = 1024;
2135 break;
2136
2137 case VM::Size_Suf_Gb:
2138 div = 1;
2139 break;
2140
2141 default:
2142 AQError( "double VM_HDD::Get_Virtual_Size_in_GB() const",
2143 "Default Section!" );
2144 return 0.0;
2145 }
2146
2147 return Virtual_Size.Size / div;
2148 }
2149
Get_Complete_Virtual_Size() const2150 QString VM_HDD::Get_Complete_Virtual_Size() const
2151 {
2152 return QString::number(Virtual_Size.Size) + Size_Suffix_to_String(Virtual_Size.Suffix);
2153 }
2154
Get_Complete_Disk_Size() const2155 QString VM_HDD::Get_Complete_Disk_Size() const
2156 {
2157 return QString::number(Disk_Size.Size) + Size_Suffix_to_String(Disk_Size.Suffix);
2158 }
2159
Set_Virtual_Size(const VM::Device_Size & size)2160 void VM_HDD::Set_Virtual_Size( const VM::Device_Size &size )
2161 {
2162 Virtual_Size = size;
2163 }
2164
Set_Image_Format(const QString & format)2165 void VM_HDD::Set_Image_Format( const QString &format )
2166 {
2167 Disk_Format = format;
2168 }
2169
Size_Suffix_to_String(VM::Size_Suffix suf) const2170 QString VM_HDD::Size_Suffix_to_String( VM::Size_Suffix suf ) const
2171 {
2172 switch( suf )
2173 {
2174 case VM::Size_Suf_Kb:
2175 return "K";
2176
2177 case VM::Size_Suf_Mb:
2178 return "M";
2179
2180 case VM::Size_Suf_Gb:
2181 return "G";
2182
2183 default:
2184 AQError( "QString VM_HDD::Size_Suffix_to_String( VM::Size_Suffix suf ) const",
2185 "Size Suffix Incorrect!" );
2186 return "";
2187 }
2188 }
2189
String_to_Device_Size(const QString & size) const2190 VM::Device_Size VM_HDD::String_to_Device_Size( const QString &size ) const
2191 {
2192 VM::Device_Size zero_size, hd_size;
2193 zero_size.Size = 0.0;
2194 zero_size.Suffix = VM::Size_Suf_Gb;
2195
2196 if( size.isEmpty() )
2197 {
2198 AQDebug( "VM::Device_Size VM_HDD::String_to_Device_Size( const QString &size ) const",
2199 "Size String is Empty..." );
2200 return zero_size;
2201 }
2202
2203 QRegExp RegInfo = QRegExp( "([\\d]+|[\\d]+[.,][\\d]+).*([KMG]+)" );
2204
2205 if( ! RegInfo.exactMatch(size) )
2206 {
2207 AQError( "VM::Device_Size VM_HDD::String_to_Device_Size( const QString &size ) const",
2208 "Cannot Match RegExp!" );
2209 return zero_size;
2210 }
2211
2212 QStringList info_lines = RegInfo.capturedTexts();
2213
2214 bool ok = false;
2215 hd_size.Size = info_lines[1].toDouble( &ok );
2216
2217 if( ! ok )
2218 {
2219 AQError( "VM::Device_Size VM_HDD::String_to_Device_Size( const QString &size ) const",
2220 "Cannot Convert String to Double!" );
2221 return zero_size;
2222 }
2223
2224 if( info_lines[2] == "K" )
2225 hd_size.Suffix = VM::Size_Suf_Kb;
2226 else if( info_lines[2] == "M" )
2227 hd_size.Suffix = VM::Size_Suf_Mb;
2228 else if( info_lines[2] == "G" )
2229 hd_size.Suffix = VM::Size_Suf_Gb;
2230 else
2231 {
2232 AQError( "VM::Device_Size VM_HDD::String_to_Device_Size( const QString &size ) const",
2233 "HDD Size Suffix Not K,M,G!" );
2234 return zero_size;
2235 }
2236
2237 return hd_size;
2238 }
2239
Reset_Info()2240 void VM_HDD::Reset_Info()
2241 {
2242 File_Name = "";
2243 Disk_Format = "";
2244
2245 VM::Device_Size zero_size;
2246 zero_size.Size = 0.0;
2247 zero_size.Suffix = VM::Size_Suf_Gb;
2248
2249 Virtual_Size = zero_size;
2250 Disk_Size = zero_size;
2251
2252 Cluster_Size = 0;
2253 }
2254
2255 //===========================================================================
2256
2257 // VM_Snapshot --------------------------------------------------------------
2258
VM_Snapshot()2259 VM_Snapshot::VM_Snapshot()
2260 {
2261 Tag = "";
2262 ID = "";
2263 Size = "";
2264 Date = "";
2265 VM_Clock = "";
2266 Name = "";
2267 Description = "";
2268 }
2269
VM_Snapshot(const VM_Snapshot & s)2270 VM_Snapshot::VM_Snapshot( const VM_Snapshot &s )
2271 {
2272 Tag = s.Get_Tag();
2273 ID = s.Get_ID();
2274 Size = s.Get_Size();
2275 Date = s.Get_Date();
2276 VM_Clock = s.Get_VM_Clock();
2277 Name = s.Get_Name();
2278 Description = s.Get_Description();
2279 }
2280
operator ==(const VM_Snapshot & s) const2281 bool VM_Snapshot::operator==( const VM_Snapshot &s ) const
2282 {
2283 if( Tag == s.Get_Tag() &&
2284 ID == s.Get_ID() &&
2285 Size == s.Get_Size() &&
2286 Date == s.Get_Date() &&
2287 VM_Clock == s.Get_VM_Clock() &&
2288 Name == s.Get_Name() &&
2289 Description == s.Get_Description() )
2290 {
2291 return true;
2292 }
2293 else
2294 {
2295 return false;
2296 }
2297 }
2298
operator !=(const VM_Snapshot & s) const2299 bool VM_Snapshot::operator!=( const VM_Snapshot &s ) const
2300 {
2301 return ! ( operator==(s) );
2302 }
2303
Get_Tag() const2304 const QString &VM_Snapshot::Get_Tag() const
2305 {
2306 return Tag;
2307 }
2308
Set_Tag(const QString & tag)2309 void VM_Snapshot::Set_Tag( const QString &tag )
2310 {
2311 Tag = tag;
2312 }
2313
Get_ID() const2314 const QString &VM_Snapshot::Get_ID() const
2315 {
2316 return ID;
2317 }
2318
Set_ID(const QString & id)2319 void VM_Snapshot::Set_ID( const QString &id )
2320 {
2321 ID = id;
2322 }
2323
Get_Size() const2324 const QString &VM_Snapshot::Get_Size() const
2325 {
2326 return Size;
2327 }
2328
Set_Size(const QString & size)2329 void VM_Snapshot::Set_Size( const QString &size )
2330 {
2331 Size = size;
2332 }
2333
Get_Date() const2334 const QString &VM_Snapshot::Get_Date() const
2335 {
2336 return Date;
2337 }
2338
Set_Date(const QString & date)2339 void VM_Snapshot::Set_Date( const QString &date )
2340 {
2341 Date = date;
2342 }
2343
Get_VM_Clock() const2344 const QString &VM_Snapshot::Get_VM_Clock() const
2345 {
2346 return VM_Clock;
2347 }
2348
Set_VM_Clock(const QString & vm_clock)2349 void VM_Snapshot::Set_VM_Clock( const QString &vm_clock )
2350 {
2351 VM_Clock = vm_clock;
2352 }
2353
Get_Name() const2354 const QString &VM_Snapshot::Get_Name() const
2355 {
2356 return Name;
2357 }
2358
Set_Name(const QString & name)2359 void VM_Snapshot::Set_Name( const QString &name )
2360 {
2361 Name = name;
2362 }
2363
Get_Description() const2364 const QString &VM_Snapshot::Get_Description() const
2365 {
2366 return Description;
2367 }
2368
Set_Description(const QString & desc)2369 void VM_Snapshot::Set_Description( const QString &desc )
2370 {
2371 Description = desc;
2372 }
2373
2374 //===========================================================================
2375
2376 // VM_Net_Card_Nativ --------------------------------------------------------
2377
VM_Net_Card_Nativ()2378 VM_Net_Card_Nativ::VM_Net_Card_Nativ()
2379 {
2380 Network_Mode = VM::Net_Mode_Nativ_NIC;
2381 Card_Model = "";
2382 MAC = "";
2383 VLAN = 0;
2384 Name = "";
2385 Hostname = "";
2386 PortDev = "";
2387 File_Descriptor = 0;
2388 Interface_Name = "";
2389 TUN_TAP_Script = "";
2390 TUN_TAP_Down_Script = "";
2391 Listen = "";
2392 Connect = "";
2393 MCast = "";
2394 Sock = "";
2395 Port = 0;
2396 Group = "";
2397 Mode = "";
2398 File = "";
2399 Len = 0;
2400 Addr = "";
2401 Vectors = 0;
2402 Net = "";
2403 Host = "";
2404 Restrict = false;
2405 DHCPstart = "";
2406 DNS = "";
2407 Tftp = "";
2408 Bootfile = "";
2409 HostFwd = "";
2410 GuestFwd = "";
2411 SMB = "";
2412 SMBserver = "";
2413 Sndbuf = 0;
2414 VNet_hdr = false;
2415 VHost = false;
2416 VHostFd = false;
2417
2418 _Use_MAC = false;
2419 _Use_VLAN = false;
2420 _Use_Name = false;
2421 _Use_Hostname = false;
2422 _Use_File_Descriptor = false;
2423 _Use_Interface_Name = false;
2424 _Use_TUN_TAP_Script = false;
2425 _Use_TUN_TAP_Down_Script = false;
2426 _Use_Listen = false;
2427 _Use_Connect = false;
2428 _Use_MCast = false;
2429 _Use_Sock = false;
2430 _Use_Port = false;
2431 _Use_Group = false;
2432 _Use_Mode = false;
2433 _Use_File = false;
2434 _Use_Len = false;
2435 _Use_Addr = false;
2436 _Use_Vectors = false;
2437 _Use_Net = false;
2438 _Use_Host = false;
2439 _Use_Restrict = false;
2440 _Use_DHCPstart = false;
2441 _Use_DNS = false;
2442 _Use_Tftp = false;
2443 _Use_Bootfile = false;
2444 _Use_HostFwd = false;
2445 _Use_GuestFwd = false;
2446 _Use_SMB = false;
2447 _Use_SMBserver = false;
2448 _Use_Sndbuf = false;
2449 _Use_VNet_hdr = false;
2450 _Use_VHost = false;
2451 _Use_VHostFd = false;
2452 }
2453
VM_Net_Card_Nativ(const VM_Net_Card_Nativ & nc)2454 VM_Net_Card_Nativ::VM_Net_Card_Nativ( const VM_Net_Card_Nativ &nc )
2455 {
2456 Network_Mode = nc.Get_Network_Type();
2457 Card_Model = nc.Get_Card_Model();
2458 MAC = nc.Get_MAC_Address();
2459 VLAN = nc.Get_VLAN();
2460 Name = nc.Get_Name();
2461 Hostname = nc.Get_Hostname();
2462 PortDev = nc.Get_PortDev();
2463 File_Descriptor = nc.Get_File_Descriptor();
2464 Interface_Name = nc.Get_Interface_Name();
2465 TUN_TAP_Script = nc.Get_TUN_TAP_Script();
2466 TUN_TAP_Down_Script = nc.Get_TUN_TAP_Down_Script();
2467 Listen = nc.Get_Listen();
2468 Connect = nc.Get_Connect();
2469 MCast = nc.Get_MCast();
2470 Sock = nc.Get_Sock();
2471 Port = nc.Get_Port();
2472 Group = nc.Get_Group();
2473 Mode = nc.Get_Mode();
2474 File = nc.Get_File();
2475 Len = nc.Get_Len();
2476 Addr = nc.Get_Addr();
2477 Vectors = nc.Get_Vectors();
2478 Net = nc.Get_Net();
2479 Host = nc.Get_Host();
2480 Restrict = nc.Get_Restrict();
2481 DHCPstart = nc.Get_DHCPstart();
2482 DNS = nc.Get_DNS();
2483 Tftp = nc.Get_Tftp();
2484 Bootfile = nc.Get_Bootfile();
2485 HostFwd = nc.Get_HostFwd();
2486 GuestFwd = nc.Get_GuestFwd();
2487 SMB = nc.Get_SMB();
2488 SMBserver = nc.Get_SMBserver();
2489 Sndbuf = nc.Get_Sndbuf();
2490 VNet_hdr = nc.Get_VNet_hdr();
2491 VHost = nc.Get_VHost();
2492 VHostFd = nc.Get_VHostFd();
2493
2494 _Use_MAC = nc.Use_MAC_Address();
2495 _Use_VLAN = nc.Use_VLAN();
2496 _Use_Name = nc.Use_Name();
2497 _Use_Hostname = nc.Use_Hostname();
2498 _Use_File_Descriptor = nc.Use_File_Descriptor();
2499 _Use_Interface_Name = nc.Use_Interface_Name();
2500 _Use_TUN_TAP_Script = nc.Use_TUN_TAP_Script();
2501 _Use_TUN_TAP_Down_Script = nc.Use_TUN_TAP_Down_Script();
2502 _Use_Listen = nc.Use_Listen();
2503 _Use_Connect = nc.Use_Connect();
2504 _Use_MCast = nc.Use_MCast();
2505 _Use_Sock = nc.Use_Sock();
2506 _Use_Port = nc.Use_Port();
2507 _Use_Group = nc.Use_Group();
2508 _Use_Mode = nc.Use_Mode();
2509 _Use_File = nc.Use_File();
2510 _Use_Len = nc.Use_Len();
2511 _Use_Addr = nc.Use_Addr();
2512 _Use_Vectors = nc.Use_Vectors();
2513 _Use_Net = nc.Use_Net();
2514 _Use_Host = nc.Use_Host();
2515 _Use_Restrict = nc.Use_Restrict();
2516 _Use_DHCPstart = nc.Use_DHCPstart();
2517 _Use_DNS = nc.Use_DNS();
2518 _Use_Tftp = nc.Use_Tftp();
2519 _Use_Bootfile = nc.Use_Bootfile();
2520 _Use_HostFwd = nc.Use_HostFwd();
2521 _Use_GuestFwd = nc.Use_GuestFwd();
2522 _Use_SMB = nc.Use_SMB();
2523 _Use_SMBserver = nc.Use_SMBserver();
2524 _Use_Sndbuf = nc.Use_Sndbuf();
2525 _Use_VNet_hdr = nc.Use_VNet_hdr();
2526 _Use_VHost = nc.Use_VHost();
2527 _Use_VHostFd = nc.Use_VHostFd();
2528 }
2529
operator ==(const VM_Net_Card_Nativ & nc) const2530 bool VM_Net_Card_Nativ::operator==( const VM_Net_Card_Nativ &nc ) const
2531 {
2532 if( Network_Mode == nc.Get_Network_Type() &&
2533 Card_Model == nc.Get_Card_Model() &&
2534 MAC == nc.Get_MAC_Address() &&
2535 VLAN == nc.Get_VLAN() &&
2536 Name == nc.Get_Name() &&
2537 Hostname == nc.Get_Hostname() &&
2538 PortDev == nc.Get_PortDev() &&
2539 File_Descriptor == nc.Get_File_Descriptor() &&
2540 Interface_Name == nc.Get_Interface_Name() &&
2541 TUN_TAP_Script == nc.Get_TUN_TAP_Script() &&
2542 TUN_TAP_Down_Script == nc.Get_TUN_TAP_Down_Script() &&
2543 Listen == nc.Get_Listen() &&
2544 Connect == nc.Get_Connect() &&
2545 MCast == nc.Get_MCast() &&
2546 Sock == nc.Get_Sock() &&
2547 Port == nc.Get_Port() &&
2548 Group == nc.Get_Group() &&
2549 Mode == nc.Get_Mode() &&
2550 File == nc.Get_File() &&
2551 Len == nc.Get_Len() &&
2552 Addr == nc.Get_Addr() &&
2553 Vectors == nc.Get_Vectors() &&
2554 Net == nc.Get_Net() &&
2555 Host == nc.Get_Host() &&
2556 Restrict == nc.Get_Restrict() &&
2557 DHCPstart == nc.Get_DHCPstart() &&
2558 DNS == nc.Get_DNS() &&
2559 Tftp == nc.Get_Tftp() &&
2560 Bootfile == nc.Get_Bootfile() &&
2561 HostFwd == nc.Get_HostFwd() &&
2562 GuestFwd == nc.Get_GuestFwd() &&
2563 SMB == nc.Get_SMB() &&
2564 SMBserver == nc.Get_SMBserver() &&
2565 Sndbuf == nc.Get_Sndbuf() &&
2566 VNet_hdr == nc.Get_VNet_hdr() &&
2567 VHost == nc.Get_VHost() &&
2568 VHostFd == nc.Get_VHostFd() &&
2569 _Use_MAC == nc.Use_MAC_Address() &&
2570 _Use_VLAN == nc.Use_VLAN() &&
2571 _Use_Name == nc.Use_Name() &&
2572 _Use_Hostname == nc.Use_Hostname() &&
2573 _Use_File_Descriptor == nc.Use_File_Descriptor() &&
2574 _Use_Interface_Name == nc.Use_Interface_Name() &&
2575 _Use_TUN_TAP_Script == nc.Use_TUN_TAP_Script() &&
2576 _Use_TUN_TAP_Down_Script == nc.Use_TUN_TAP_Down_Script() &&
2577 _Use_Listen == nc.Use_Listen() &&
2578 _Use_Connect == nc.Use_Connect() &&
2579 _Use_MCast == nc.Use_MCast() &&
2580 _Use_Sock == nc.Use_Sock() &&
2581 _Use_Port == nc.Use_Port() &&
2582 _Use_Group == nc.Use_Group() &&
2583 _Use_Mode == nc.Use_Mode() &&
2584 _Use_File == nc.Use_File() &&
2585 _Use_Len == nc.Use_Len() &&
2586 _Use_Addr == nc.Use_Addr() &&
2587 _Use_Vectors == nc.Use_Vectors() &&
2588 _Use_Net == nc.Use_Net() &&
2589 _Use_Host == nc.Use_Host() &&
2590 _Use_Restrict == nc.Use_Restrict() &&
2591 _Use_DHCPstart == nc.Use_DHCPstart() &&
2592 _Use_DNS == nc.Use_DNS() &&
2593 _Use_Tftp == nc.Use_Tftp() &&
2594 _Use_Bootfile == nc.Use_Bootfile() &&
2595 _Use_HostFwd == nc.Use_HostFwd() &&
2596 _Use_GuestFwd == nc.Use_GuestFwd() &&
2597 _Use_SMB == nc.Use_SMB() &&
2598 _Use_SMBserver == nc.Use_SMBserver() &&
2599 _Use_Sndbuf == nc.Use_Sndbuf() &&
2600 _Use_VNet_hdr == nc.Use_VNet_hdr() &&
2601 _Use_VHost == nc.Use_VHost() &&
2602 _Use_VHostFd == nc.Use_VHostFd() )
2603 {
2604 return true;
2605 }
2606 else
2607 {
2608 return false;
2609 }
2610 }
2611
operator !=(const VM_Net_Card_Nativ & nc) const2612 bool VM_Net_Card_Nativ::operator!=( const VM_Net_Card_Nativ &nc ) const
2613 {
2614 return ! operator ==( nc );
2615 }
2616
Generate_MAC() const2617 QString VM_Net_Card_Nativ::Generate_MAC() const
2618 {
2619 VM_Net_Card tmp_card;
2620 tmp_card.Set_Card_Model( Card_Model );
2621 return tmp_card.Generate_MAC();
2622 }
2623
Get_Network_Type() const2624 VM::Network_Mode_Nativ VM_Net_Card_Nativ::Get_Network_Type() const
2625 {
2626 return Network_Mode;
2627 }
2628
Set_Network_Type(VM::Network_Mode_Nativ mode)2629 void VM_Net_Card_Nativ::Set_Network_Type( VM::Network_Mode_Nativ mode )
2630 {
2631 Network_Mode = mode;
2632 }
2633
Get_Card_Model() const2634 const QString &VM_Net_Card_Nativ::Get_Card_Model() const
2635 {
2636 return Card_Model;
2637 }
2638
Set_Card_Model(const QString & m)2639 void VM_Net_Card_Nativ::Set_Card_Model( const QString &m )
2640 {
2641 Card_Model = m;
2642 }
2643
Use_MAC_Address() const2644 bool VM_Net_Card_Nativ::Use_MAC_Address() const
2645 {
2646 return _Use_MAC;
2647 }
2648
Use_MAC_Address(bool use)2649 void VM_Net_Card_Nativ::Use_MAC_Address( bool use )
2650 {
2651 _Use_MAC = use;
2652 }
2653
Get_MAC_Address() const2654 const QString &VM_Net_Card_Nativ::Get_MAC_Address() const
2655 {
2656 return MAC;
2657 }
2658
Set_MAC_Address(const QString & ma)2659 void VM_Net_Card_Nativ::Set_MAC_Address( const QString &ma )
2660 {
2661 MAC = ma;
2662 }
2663
Use_VLAN() const2664 bool VM_Net_Card_Nativ::Use_VLAN() const
2665 {
2666 return _Use_VLAN;
2667 }
2668
Use_VLAN(bool use)2669 void VM_Net_Card_Nativ::Use_VLAN( bool use )
2670 {
2671 _Use_VLAN = use;
2672 }
2673
Get_VLAN() const2674 int VM_Net_Card_Nativ::Get_VLAN() const
2675 {
2676 return VLAN;
2677 }
2678
Set_VLAN(int vl)2679 void VM_Net_Card_Nativ::Set_VLAN( int vl )
2680 {
2681 VLAN = vl;
2682 }
2683
Use_Name() const2684 bool VM_Net_Card_Nativ::Use_Name() const
2685 {
2686 return _Use_Name;
2687 }
2688
Use_Name(bool use)2689 void VM_Net_Card_Nativ::Use_Name( bool use )
2690 {
2691 _Use_Name = use;
2692 }
2693
Get_Name() const2694 const QString &VM_Net_Card_Nativ::Get_Name() const
2695 {
2696 return Name;
2697 }
2698
Set_Name(const QString & name)2699 void VM_Net_Card_Nativ::Set_Name( const QString &name )
2700 {
2701 Name = name;
2702 }
2703
Use_Hostname() const2704 bool VM_Net_Card_Nativ::Use_Hostname() const
2705 {
2706 return _Use_Hostname;
2707 }
2708
Use_Hostname(bool use)2709 void VM_Net_Card_Nativ::Use_Hostname( bool use )
2710 {
2711 _Use_Hostname = use;
2712 }
2713
Get_Hostname() const2714 const QString &VM_Net_Card_Nativ::Get_Hostname() const
2715 {
2716 return Hostname;
2717 }
2718
Set_Hostname(const QString & hostname)2719 void VM_Net_Card_Nativ::Set_Hostname( const QString &hostname )
2720 {
2721 Hostname = hostname;
2722 }
2723
Get_PortDev() const2724 const QString &VM_Net_Card_Nativ::Get_PortDev() const
2725 {
2726 return PortDev;
2727 }
2728
Set_PortDev(const QString & portDev)2729 void VM_Net_Card_Nativ::Set_PortDev( const QString &portDev )
2730 {
2731 PortDev = portDev;
2732 }
2733
Use_File_Descriptor() const2734 bool VM_Net_Card_Nativ::Use_File_Descriptor() const
2735 {
2736 return _Use_File_Descriptor;
2737 }
2738
Use_File_Descriptor(bool use)2739 void VM_Net_Card_Nativ::Use_File_Descriptor( bool use )
2740 {
2741 _Use_File_Descriptor = use;
2742 }
2743
Get_File_Descriptor() const2744 int VM_Net_Card_Nativ::Get_File_Descriptor() const
2745 {
2746 return File_Descriptor;
2747 }
2748
Set_File_Descriptor(int f)2749 void VM_Net_Card_Nativ::Set_File_Descriptor( int f )
2750 {
2751 File_Descriptor = f;
2752 }
2753
Use_Interface_Name() const2754 bool VM_Net_Card_Nativ::Use_Interface_Name() const
2755 {
2756 return _Use_Interface_Name;
2757 }
2758
Use_Interface_Name(bool use)2759 void VM_Net_Card_Nativ::Use_Interface_Name( bool use )
2760 {
2761 _Use_Interface_Name = use;
2762 }
2763
Get_Interface_Name() const2764 const QString &VM_Net_Card_Nativ::Get_Interface_Name() const
2765 {
2766 return Interface_Name;
2767 }
2768
Set_Interface_Name(const QString & n)2769 void VM_Net_Card_Nativ::Set_Interface_Name( const QString &n )
2770 {
2771 Interface_Name = n;
2772 }
2773
Use_TUN_TAP_Script() const2774 bool VM_Net_Card_Nativ::Use_TUN_TAP_Script() const
2775 {
2776 return _Use_TUN_TAP_Script;
2777 }
2778
Use_TUN_TAP_Script(bool use)2779 void VM_Net_Card_Nativ::Use_TUN_TAP_Script( bool use )
2780 {
2781 _Use_TUN_TAP_Script = use;
2782 }
2783
Get_TUN_TAP_Script() const2784 const QString &VM_Net_Card_Nativ::Get_TUN_TAP_Script() const
2785 {
2786 return TUN_TAP_Script;
2787 }
2788
Set_TUN_TAP_Script(const QString & s)2789 void VM_Net_Card_Nativ::Set_TUN_TAP_Script( const QString &s )
2790 {
2791 TUN_TAP_Script = s;
2792 }
2793
Use_TUN_TAP_Down_Script() const2794 bool VM_Net_Card_Nativ::Use_TUN_TAP_Down_Script() const
2795 {
2796 return _Use_TUN_TAP_Down_Script;
2797 }
2798
Use_TUN_TAP_Down_Script(bool use)2799 void VM_Net_Card_Nativ::Use_TUN_TAP_Down_Script( bool use )
2800 {
2801 _Use_TUN_TAP_Down_Script = use;
2802 }
2803
Get_TUN_TAP_Down_Script() const2804 const QString &VM_Net_Card_Nativ::Get_TUN_TAP_Down_Script() const
2805 {
2806 return TUN_TAP_Down_Script;
2807 }
2808
Set_TUN_TAP_Down_Script(const QString & s)2809 void VM_Net_Card_Nativ::Set_TUN_TAP_Down_Script( const QString &s )
2810 {
2811 TUN_TAP_Down_Script = s;
2812 }
2813
Use_Listen() const2814 bool VM_Net_Card_Nativ::Use_Listen() const
2815 {
2816 return _Use_Listen;
2817 }
2818
Use_Listen(bool use)2819 void VM_Net_Card_Nativ::Use_Listen( bool use )
2820 {
2821 _Use_Listen = use;
2822 }
2823
Get_Listen() const2824 const QString &VM_Net_Card_Nativ::Get_Listen() const
2825 {
2826 return Listen;
2827 }
2828
Set_Listen(const QString & listen)2829 void VM_Net_Card_Nativ::Set_Listen( const QString &listen )
2830 {
2831 Listen = listen;
2832 }
2833
Use_Connect() const2834 bool VM_Net_Card_Nativ::Use_Connect() const
2835 {
2836 return _Use_Connect;
2837 }
2838
Use_Connect(bool use)2839 void VM_Net_Card_Nativ::Use_Connect( bool use )
2840 {
2841 _Use_Connect = use;
2842 }
2843
Get_Connect() const2844 const QString &VM_Net_Card_Nativ::Get_Connect() const
2845 {
2846 return Connect;
2847 }
2848
Set_Connect(const QString & con)2849 void VM_Net_Card_Nativ::Set_Connect( const QString &con )
2850 {
2851 Connect = con;
2852 }
2853
Use_MCast() const2854 bool VM_Net_Card_Nativ::Use_MCast() const
2855 {
2856 return _Use_MCast;
2857 }
2858
Use_MCast(bool use)2859 void VM_Net_Card_Nativ::Use_MCast( bool use )
2860 {
2861 _Use_MCast = use;
2862 }
2863
Get_MCast() const2864 const QString &VM_Net_Card_Nativ::Get_MCast() const
2865 {
2866 return MCast;
2867 }
2868
Set_MCast(const QString & mcast)2869 void VM_Net_Card_Nativ::Set_MCast( const QString &mcast )
2870 {
2871 MCast = mcast;
2872 }
2873
Use_Sock() const2874 bool VM_Net_Card_Nativ::Use_Sock() const
2875 {
2876 return _Use_Sock;
2877 }
2878
Use_Sock(bool use)2879 void VM_Net_Card_Nativ::Use_Sock( bool use )
2880 {
2881 _Use_Sock = use;
2882 }
2883
Get_Sock() const2884 const QString &VM_Net_Card_Nativ::Get_Sock() const
2885 {
2886 return Sock;
2887 }
2888
Set_Sock(const QString & sock)2889 void VM_Net_Card_Nativ::Set_Sock( const QString &sock )
2890 {
2891 Sock = sock;
2892 }
2893
Use_Port() const2894 bool VM_Net_Card_Nativ::Use_Port() const
2895 {
2896 return _Use_Port;
2897 }
2898
Use_Port(bool use)2899 void VM_Net_Card_Nativ::Use_Port( bool use )
2900 {
2901 _Use_Port = use;
2902 }
2903
Get_Port() const2904 int VM_Net_Card_Nativ::Get_Port() const
2905 {
2906 return Port;
2907 }
2908
Set_Port(int p)2909 void VM_Net_Card_Nativ::Set_Port( int p )
2910 {
2911 Port = p;
2912 }
2913
Use_Group() const2914 bool VM_Net_Card_Nativ::Use_Group() const
2915 {
2916 return _Use_Group;
2917 }
2918
Use_Group(bool use)2919 void VM_Net_Card_Nativ::Use_Group( bool use )
2920 {
2921 _Use_Group = use;
2922 }
2923
Get_Group() const2924 const QString &VM_Net_Card_Nativ::Get_Group() const
2925 {
2926 return Group;
2927 }
2928
Set_Group(const QString & group)2929 void VM_Net_Card_Nativ::Set_Group( const QString &group )
2930 {
2931 Group = group;
2932 }
2933
Use_Mode() const2934 bool VM_Net_Card_Nativ::Use_Mode() const
2935 {
2936 return _Use_Mode;
2937 }
2938
Use_Mode(bool use)2939 void VM_Net_Card_Nativ::Use_Mode( bool use )
2940 {
2941 _Use_Mode = use;
2942 }
2943
Get_Mode() const2944 const QString &VM_Net_Card_Nativ::Get_Mode() const
2945 {
2946 return Mode;
2947 }
2948
Set_Mode(const QString & mode)2949 void VM_Net_Card_Nativ::Set_Mode( const QString &mode )
2950 {
2951 Mode = mode;
2952 }
2953
Use_File() const2954 bool VM_Net_Card_Nativ::Use_File() const
2955 {
2956 return _Use_File;
2957 }
2958
Use_File(bool use)2959 void VM_Net_Card_Nativ::Use_File( bool use )
2960 {
2961 _Use_File = use;
2962 }
2963
Get_File() const2964 const QString &VM_Net_Card_Nativ::Get_File() const
2965 {
2966 return File;
2967 }
2968
Set_File(const QString & file)2969 void VM_Net_Card_Nativ::Set_File( const QString &file )
2970 {
2971 File = file;
2972 }
2973
Use_Len() const2974 bool VM_Net_Card_Nativ::Use_Len() const
2975 {
2976 return _Use_Len;
2977 }
2978
Use_Len(bool use)2979 void VM_Net_Card_Nativ::Use_Len( bool use )
2980 {
2981 _Use_Len = use;
2982 }
2983
Get_Len() const2984 int VM_Net_Card_Nativ::Get_Len() const
2985 {
2986 return Len;
2987 }
2988
Set_Len(int kb)2989 void VM_Net_Card_Nativ::Set_Len( int kb )
2990 {
2991 Len = kb;
2992 }
2993
Use_Addr() const2994 bool VM_Net_Card_Nativ::Use_Addr() const
2995 {
2996 return _Use_Addr;
2997 }
2998
Use_Addr(bool use)2999 void VM_Net_Card_Nativ::Use_Addr( bool use )
3000 {
3001 _Use_Addr = use;
3002 }
3003
Get_Addr() const3004 const QString &VM_Net_Card_Nativ::Get_Addr() const
3005 {
3006 return Addr;
3007 }
3008
Set_Addr(const QString & addr)3009 void VM_Net_Card_Nativ::Set_Addr( const QString &addr )
3010 {
3011 Addr = addr;
3012 }
3013
3014
Use_Vectors() const3015 bool VM_Net_Card_Nativ::Use_Vectors() const
3016 {
3017 return _Use_Vectors;
3018 }
3019
Use_Vectors(bool use)3020 void VM_Net_Card_Nativ::Use_Vectors( bool use )
3021 {
3022 _Use_Vectors = use;
3023 }
3024
Get_Vectors() const3025 int VM_Net_Card_Nativ::Get_Vectors() const
3026 {
3027 return Vectors;
3028 }
3029
Set_Vectors(int vectors)3030 void VM_Net_Card_Nativ::Set_Vectors( int vectors )
3031 {
3032 Vectors = vectors;
3033 }
3034
Use_Net() const3035 bool VM_Net_Card_Nativ::Use_Net() const
3036 {
3037 return _Use_Net;
3038 }
3039
Use_Net(bool use)3040 void VM_Net_Card_Nativ::Use_Net( bool use )
3041 {
3042 _Use_Net = use;
3043 }
3044
Get_Net() const3045 const QString &VM_Net_Card_Nativ::Get_Net() const
3046 {
3047 return Net;
3048 }
3049
Set_Net(const QString & net)3050 void VM_Net_Card_Nativ::Set_Net( const QString &net )
3051 {
3052 Net = net;
3053 }
3054
Use_Host() const3055 bool VM_Net_Card_Nativ::Use_Host() const
3056 {
3057 return _Use_Host;
3058 }
3059
Use_Host(bool use)3060 void VM_Net_Card_Nativ::Use_Host( bool use )
3061 {
3062 _Use_Host = use;
3063 }
3064
Get_Host() const3065 const QString &VM_Net_Card_Nativ::Get_Host() const
3066 {
3067 return Host;
3068 }
3069
Set_Host(const QString & host)3070 void VM_Net_Card_Nativ::Set_Host( const QString &host )
3071 {
3072 Host = host;
3073 }
3074
Use_Restrict() const3075 bool VM_Net_Card_Nativ::Use_Restrict() const
3076 {
3077 return _Use_Restrict;
3078 }
3079
Use_Restrict(bool use)3080 void VM_Net_Card_Nativ::Use_Restrict( bool use )
3081 {
3082 _Use_Restrict = use;
3083 }
3084
Get_Restrict() const3085 bool VM_Net_Card_Nativ::Get_Restrict() const
3086 {
3087 return Restrict;
3088 }
3089
Set_Restrict(bool use)3090 void VM_Net_Card_Nativ::Set_Restrict( bool use )
3091 {
3092 Restrict = use;
3093 }
3094
Use_DHCPstart() const3095 bool VM_Net_Card_Nativ::Use_DHCPstart() const
3096 {
3097 return _Use_DHCPstart;
3098 }
3099
Use_DHCPstart(bool use)3100 void VM_Net_Card_Nativ::Use_DHCPstart( bool use )
3101 {
3102 _Use_DHCPstart = use;
3103 }
3104
Get_DHCPstart() const3105 const QString &VM_Net_Card_Nativ::Get_DHCPstart() const
3106 {
3107 return DHCPstart;
3108 }
3109
Set_DHCPstart(const QString & addr)3110 void VM_Net_Card_Nativ::Set_DHCPstart( const QString &addr )
3111 {
3112 DHCPstart = addr;
3113 }
3114
Use_DNS() const3115 bool VM_Net_Card_Nativ::Use_DNS() const
3116 {
3117 return _Use_DNS;
3118 }
3119
Use_DNS(bool use)3120 void VM_Net_Card_Nativ::Use_DNS( bool use )
3121 {
3122 _Use_DNS = use;
3123 }
3124
Get_DNS() const3125 const QString &VM_Net_Card_Nativ::Get_DNS() const
3126 {
3127 return DNS;
3128 }
3129
Set_DNS(const QString & addr)3130 void VM_Net_Card_Nativ::Set_DNS( const QString &addr )
3131 {
3132 DNS = addr;
3133 }
3134
Use_Tftp() const3135 bool VM_Net_Card_Nativ::Use_Tftp() const
3136 {
3137 return _Use_Tftp;
3138 }
3139
Use_Tftp(bool use)3140 void VM_Net_Card_Nativ::Use_Tftp( bool use )
3141 {
3142 _Use_Tftp = use;
3143 }
3144
Get_Tftp() const3145 const QString &VM_Net_Card_Nativ::Get_Tftp() const
3146 {
3147 return Tftp;
3148 }
3149
Set_Tftp(const QString & dir)3150 void VM_Net_Card_Nativ::Set_Tftp( const QString &dir )
3151 {
3152 Tftp = dir;
3153 }
3154
Use_Bootfile() const3155 bool VM_Net_Card_Nativ::Use_Bootfile() const
3156 {
3157 return _Use_Bootfile;
3158 }
3159
Use_Bootfile(bool use)3160 void VM_Net_Card_Nativ::Use_Bootfile( bool use )
3161 {
3162 _Use_Bootfile = use;
3163 }
3164
Get_Bootfile() const3165 const QString &VM_Net_Card_Nativ::Get_Bootfile() const
3166 {
3167 return Bootfile;
3168 }
3169
Set_Bootfile(const QString & file)3170 void VM_Net_Card_Nativ::Set_Bootfile( const QString &file )
3171 {
3172 Bootfile = file;
3173 }
3174
Use_HostFwd() const3175 bool VM_Net_Card_Nativ::Use_HostFwd() const
3176 {
3177 return _Use_HostFwd;
3178 }
3179
Use_HostFwd(bool use)3180 void VM_Net_Card_Nativ::Use_HostFwd( bool use )
3181 {
3182 _Use_HostFwd = use;
3183 }
3184
Get_HostFwd() const3185 const QString &VM_Net_Card_Nativ::Get_HostFwd() const
3186 {
3187 return HostFwd;
3188 }
3189
Set_HostFwd(const QString & rule)3190 void VM_Net_Card_Nativ::Set_HostFwd( const QString &rule )
3191 {
3192 HostFwd = rule;
3193 }
3194
Use_GuestFwd() const3195 bool VM_Net_Card_Nativ::Use_GuestFwd() const
3196 {
3197 return _Use_GuestFwd;
3198 }
3199
Use_GuestFwd(bool use)3200 void VM_Net_Card_Nativ::Use_GuestFwd( bool use )
3201 {
3202 _Use_GuestFwd = use;
3203 }
3204
Get_GuestFwd() const3205 const QString &VM_Net_Card_Nativ::Get_GuestFwd() const
3206 {
3207 return GuestFwd;
3208 }
3209
Set_GuestFwd(const QString & rule)3210 void VM_Net_Card_Nativ::Set_GuestFwd( const QString &rule )
3211 {
3212 GuestFwd = rule;
3213 }
3214
Use_SMB() const3215 bool VM_Net_Card_Nativ::Use_SMB() const
3216 {
3217 return _Use_SMB;
3218 }
3219
Use_SMB(bool use)3220 void VM_Net_Card_Nativ::Use_SMB( bool use )
3221 {
3222 _Use_SMB = use;
3223 }
3224
Get_SMB() const3225 const QString &VM_Net_Card_Nativ::Get_SMB() const
3226 {
3227 return SMB;
3228 }
3229
Set_SMB(const QString & dir)3230 void VM_Net_Card_Nativ::Set_SMB( const QString &dir )
3231 {
3232 SMB = dir;
3233 }
3234
Use_SMBserver() const3235 bool VM_Net_Card_Nativ::Use_SMBserver() const
3236 {
3237 return _Use_SMBserver;
3238 }
3239
Use_SMBserver(bool use)3240 void VM_Net_Card_Nativ::Use_SMBserver( bool use )
3241 {
3242 _Use_SMBserver = use;
3243 }
3244
Get_SMBserver() const3245 const QString &VM_Net_Card_Nativ::Get_SMBserver() const
3246 {
3247 return SMBserver;
3248 }
3249
Set_SMBserver(const QString & addr)3250 void VM_Net_Card_Nativ::Set_SMBserver( const QString &addr )
3251 {
3252 SMBserver = addr;
3253 }
3254
Use_Sndbuf() const3255 bool VM_Net_Card_Nativ::Use_Sndbuf() const
3256 {
3257 return _Use_Sndbuf;
3258 }
3259
Use_Sndbuf(bool use)3260 void VM_Net_Card_Nativ::Use_Sndbuf( bool use )
3261 {
3262 _Use_Sndbuf = use;
3263 }
3264
Get_Sndbuf() const3265 int VM_Net_Card_Nativ::Get_Sndbuf() const
3266 {
3267 return Sndbuf;
3268 }
3269
Set_Sndbuf(int bytes)3270 void VM_Net_Card_Nativ::Set_Sndbuf( int bytes )
3271 {
3272 Sndbuf = bytes;
3273 }
3274
Use_VNet_hdr() const3275 bool VM_Net_Card_Nativ::Use_VNet_hdr() const
3276 {
3277 return _Use_VNet_hdr;
3278 }
3279
Use_VNet_hdr(bool use)3280 void VM_Net_Card_Nativ::Use_VNet_hdr( bool use )
3281 {
3282 _Use_VNet_hdr = use;
3283 }
3284
Get_VNet_hdr() const3285 bool VM_Net_Card_Nativ::Get_VNet_hdr() const
3286 {
3287 return VNet_hdr;
3288 }
3289
Set_VNet_hdr(bool use)3290 void VM_Net_Card_Nativ::Set_VNet_hdr( bool use )
3291 {
3292 VNet_hdr = use;
3293 }
3294
Use_VHost() const3295 bool VM_Net_Card_Nativ::Use_VHost() const
3296 {
3297 return _Use_VHost;
3298 }
3299
Use_VHost(bool use)3300 void VM_Net_Card_Nativ::Use_VHost( bool use )
3301 {
3302 _Use_VHost = use;
3303 }
3304
Get_VHost() const3305 bool VM_Net_Card_Nativ::Get_VHost() const
3306 {
3307 return VHost;
3308 }
3309
Set_VHost(bool use)3310 void VM_Net_Card_Nativ::Set_VHost( bool use )
3311 {
3312 VHost = use;
3313 }
3314
Use_VHostFd() const3315 bool VM_Net_Card_Nativ::Use_VHostFd() const
3316 {
3317 return _Use_VHostFd;
3318 }
3319
Use_VHostFd(bool use)3320 void VM_Net_Card_Nativ::Use_VHostFd( bool use )
3321 {
3322 _Use_VHostFd = use;
3323 }
3324
Get_VHostFd() const3325 int VM_Net_Card_Nativ::Get_VHostFd() const
3326 {
3327 return VHostFd;
3328 }
3329
Set_VHostFd(int port)3330 void VM_Net_Card_Nativ::Set_VHostFd( int port )
3331 {
3332 VHostFd = port;
3333 }
3334
3335
3336 //===========================================================================
3337
3338 // VM_Net_Card --------------------------------------------------------------
3339
VM_Net_Card()3340 VM_Net_Card::VM_Net_Card()
3341 {
3342 Card_Model = "";
3343 Net_Mode = VM::Net_Mode_None;
3344 IP = "";
3345 MAC = "";
3346 Hostname = "";
3347 Port = 0;
3348 VLAN = 0;
3349 Use_TUN_TAP_Script = true;
3350 TUN_TAP_Script = "";
3351 Interface_Name = "";
3352 File_Descriptor = 0;
3353 }
3354
VM_Net_Card(const VM_Net_Card & nc)3355 VM_Net_Card::VM_Net_Card( const VM_Net_Card &nc )
3356 {
3357 Card_Model = nc.Get_Card_Model();
3358 Net_Mode = nc.Get_Net_Mode();
3359 Hostname = nc.Get_Hostname();
3360 IP = nc.Get_IP_Address();
3361 MAC = nc.Get_MAC_Address();
3362 Port = nc.Get_Port();
3363 VLAN = nc.Get_VLAN();
3364 Use_TUN_TAP_Script = nc.Get_Use_TUN_TAP_Script();
3365 TUN_TAP_Script = nc.Get_TUN_TAP_Script();
3366 Interface_Name = nc.Get_Interface_Name();
3367 File_Descriptor = nc.Get_File_Descriptor();
3368 }
3369
operator ==(const VM_Net_Card & nc) const3370 bool VM_Net_Card::operator==( const VM_Net_Card &nc ) const
3371 {
3372 if( Card_Model == nc.Get_Card_Model() &&
3373 Net_Mode == nc.Get_Net_Mode() &&
3374 Hostname == nc.Get_Hostname() &&
3375 IP == nc.Get_IP_Address() &&
3376 MAC == nc.Get_MAC_Address() &&
3377 Port == nc.Get_Port() &&
3378 VLAN == nc.Get_VLAN() &&
3379 Use_TUN_TAP_Script == nc.Get_Use_TUN_TAP_Script() &&
3380 TUN_TAP_Script == nc.Get_TUN_TAP_Script() &&
3381 Interface_Name == nc.Get_Interface_Name() &&
3382 File_Descriptor == nc.Get_File_Descriptor() )
3383 {
3384 return true;
3385 }
3386 else
3387 {
3388 return false;
3389 }
3390 }
3391
operator !=(const VM_Net_Card & nc) const3392 bool VM_Net_Card::operator!=( const VM_Net_Card &nc ) const
3393 {
3394 return ! ( operator==(nc) );
3395 }
3396
Generate_MAC() const3397 QString VM_Net_Card::Generate_MAC() const
3398 {
3399 QSettings settings;
3400 QString mode = settings.value( "MAC_Generation_Mode", "" ).toString();
3401
3402 QString nmac = QUuid::createUuid().toString(); // Random HEX for MAC
3403
3404 if( mode == "Random" )
3405 {
3406 nmac = nmac.mid( 25, 10 );
3407 nmac.prepend( "00" ); // Two Zero First, For Valid MAC
3408 }
3409 else if( mode == "QEMU_Segment" )
3410 {
3411 nmac = nmac.mid( 25, 6 );
3412 nmac.prepend( "525400" ); // QEMU Segment
3413 }
3414 else // Default. Valid Card MAC
3415 {
3416 nmac = nmac.mid( 25, 6 );
3417
3418 // MAC Data Base
3419 QStringList novell_mac;
3420 novell_mac << "00001B"
3421 << "0000D8";
3422
3423 QStringList sun_mac;
3424 sun_mac << "00015D"
3425 << "0003BA"
3426 << "000782"
3427 << "00104F"
3428 << "0010E0";
3429
3430 QStringList amd_mac;
3431 amd_mac << "00001A"
3432 << "000C87";
3433
3434 QStringList smc_mac;
3435 smc_mac << "0004E2"
3436 << "000BC5"
3437 << "0013F7"
3438 << "00222D"
3439 << "0023C6";
3440
3441 QStringList motorola_mac;
3442 motorola_mac << "00080E"
3443 << "000A28"
3444 << "000B06"
3445 << "000CE5"
3446 << "000E5C";
3447
3448 QStringList intel_mac;
3449 intel_mac << "001111"
3450 << "0012F0"
3451 << "0013CE"
3452 << "0013E8"
3453 << "001676";
3454
3455 QString model = Get_Card_Model();
3456
3457 if( model == "ne2k_pci" || model == "ne2k_isa" )
3458 {
3459 int rm = Get_Random( 0,1 );
3460 if( rm >= 0 && rm < novell_mac.count() ) nmac.prepend( novell_mac[rm] );
3461 }
3462 else if( model == "i82551" || model == "i82557b" || model == "i82559er" || model == "e1000" )
3463 {
3464 int rm = Get_Random( 0,4 );
3465 if( rm >= 0 && rm < intel_mac.count() ) nmac.prepend( intel_mac[rm] );
3466 }
3467 else if( model == "pcnet" )
3468 {
3469 int rm = Get_Random( 0,1 );
3470 if( rm >= 0 ) nmac.prepend( amd_mac[rm] );
3471 }
3472 else if( model == "rtl8139" )
3473 {
3474 nmac.prepend( "00E04C" );
3475 }
3476 else if( model == "smc91c111" )
3477 {
3478 int rm = Get_Random( 0,4 );
3479 if( rm >= 0 ) nmac.prepend( smc_mac[rm] );
3480 }
3481 else if( model == "mcf_fec" )
3482 {
3483 int rm = Get_Random( 0,4 );
3484 if( rm >= 0 ) nmac.prepend( motorola_mac[rm] );
3485 }
3486 else if( model == "lance" )
3487 {
3488 int rm = Get_Random( 0,4 );
3489 if( rm >= 0 ) nmac.prepend( sun_mac[rm] );
3490 }
3491 else if( model == "fseth" )
3492 {
3493 // FIXME qemu-system-cris
3494 nmac = QUuid::createUuid().toString(); // Random HEX for MAC
3495 nmac = nmac.mid( 25, 10 );
3496 nmac.prepend( "00" ); // Two Zero First, For Valid MAC
3497 }
3498 else if( model == "xilinx-ethlite" )
3499 {
3500 // FIXME qemu-system-microblaze
3501 nmac = QUuid::createUuid().toString(); // Random HEX for MAC
3502 nmac = nmac.mid( 25, 10 );
3503 nmac.prepend( "00" ); // Two Zero First, For Valid MAC
3504 }
3505 else if( model == "" ) // Default 00 + Random
3506 {
3507 nmac = QUuid::createUuid().toString(); // Random HEX for MAC
3508 nmac = nmac.mid( 25, 10 );
3509 nmac.prepend( "00" ); // Two Zero First, For Valid MAC
3510 }
3511 else
3512 {
3513 AQWarning( "QString VM_Net_Card::Generate_MAC() const",
3514 "Net Card Model Invalid!" );
3515 }
3516
3517 // MAC Found?
3518 if( nmac.count() != 12 )
3519 {
3520 AQError( "QString VM_Net_Card::Generate_MAC() const",
3521 "Cannot Get MAC for This Card!" );
3522
3523 nmac = QUuid::createUuid().toString(); // Random HEX for MAC
3524 nmac = nmac.mid( 25, 6 );
3525 nmac.prepend( "525400" ); // QEMU Segment
3526 }
3527 }
3528
3529 // Adding separators :
3530 for( int nx = 2; nx < nmac.count(); nx+=3 )
3531 {
3532 nmac = nmac.insert( nx, ":" );
3533 }
3534
3535 nmac = nmac.toLower();
3536 return nmac;
3537 }
3538
Get_Card_Model() const3539 const QString &VM_Net_Card::Get_Card_Model() const
3540 {
3541 return Card_Model;
3542 }
3543
Set_Card_Model(const QString & m)3544 void VM_Net_Card::Set_Card_Model( const QString &m )
3545 {
3546 Card_Model = m;
3547 }
3548
Get_Net_Mode() const3549 VM::Network_Mode VM_Net_Card::Get_Net_Mode() const
3550 {
3551 return Net_Mode;
3552 }
3553
Set_Net_Mode(VM::Network_Mode mode)3554 void VM_Net_Card::Set_Net_Mode( VM::Network_Mode mode )
3555 {
3556 Net_Mode = mode;
3557 }
3558
Get_Hostname() const3559 const QString &VM_Net_Card::Get_Hostname() const
3560 {
3561 return Hostname;
3562 }
3563
Set_Hostname(const QString & hn)3564 void VM_Net_Card::Set_Hostname( const QString &hn )
3565 {
3566 Hostname = hn;
3567 }
3568
Get_IP_Address() const3569 const QString &VM_Net_Card::Get_IP_Address() const
3570 {
3571 return IP;
3572 }
3573
Set_IP_Address(const QString & ia)3574 void VM_Net_Card::Set_IP_Address( const QString &ia )
3575 {
3576 IP = ia;
3577 }
3578
Get_MAC_Address() const3579 const QString &VM_Net_Card::Get_MAC_Address() const
3580 {
3581 return MAC;
3582 }
3583
Set_MAC_Address(const QString & ma)3584 void VM_Net_Card::Set_MAC_Address( const QString &ma )
3585 {
3586 MAC = ma;
3587 }
3588
Get_Port() const3589 int VM_Net_Card::Get_Port() const
3590 {
3591 return Port;
3592 }
3593
Set_Port(int p)3594 void VM_Net_Card::Set_Port( int p )
3595 {
3596 Port = p;
3597 }
3598
Get_VLAN() const3599 int VM_Net_Card::Get_VLAN() const
3600 {
3601 return VLAN;
3602 }
3603
Set_VLAN(int vl)3604 void VM_Net_Card::Set_VLAN( int vl )
3605 {
3606 VLAN = vl;
3607 }
3608
Get_Use_TUN_TAP_Script() const3609 bool VM_Net_Card::Get_Use_TUN_TAP_Script() const
3610 {
3611 return Use_TUN_TAP_Script;
3612 }
3613
Set_Use_TUN_TAP_Script(bool use)3614 void VM_Net_Card::Set_Use_TUN_TAP_Script( bool use )
3615 {
3616 Use_TUN_TAP_Script = use;
3617 }
3618
Get_TUN_TAP_Script() const3619 const QString &VM_Net_Card::Get_TUN_TAP_Script() const
3620 {
3621 return TUN_TAP_Script;
3622 }
3623
Set_TUN_TAP_Script(const QString & s)3624 void VM_Net_Card::Set_TUN_TAP_Script( const QString &s )
3625 {
3626 TUN_TAP_Script = s;
3627 }
3628
Get_Interface_Name() const3629 const QString &VM_Net_Card::Get_Interface_Name() const
3630 {
3631 return Interface_Name;
3632 }
3633
Set_Interface_Name(const QString & n)3634 void VM_Net_Card::Set_Interface_Name( const QString &n )
3635 {
3636 Interface_Name = n;
3637 }
3638
Get_File_Descriptor() const3639 int VM_Net_Card::Get_File_Descriptor() const
3640 {
3641 return File_Descriptor;
3642 }
3643
Set_File_Descriptor(int f)3644 void VM_Net_Card::Set_File_Descriptor( int f )
3645 {
3646 File_Descriptor = f;
3647 }
3648
3649 //===========================================================================
3650
3651 // VM_Redirections Class ----------------------------------------------------
3652
VM_Redirection()3653 VM_Redirection::VM_Redirection()
3654 {
3655 Protocol = "NOT";
3656 Host_Port = 1;
3657 Guest_IP = "0.0.0.0";
3658 Guest_Port = 1;
3659 }
3660
VM_Redirection(const VM_Redirection & r)3661 VM_Redirection::VM_Redirection( const VM_Redirection &r )
3662 {
3663 Protocol = r.Get_Protocol();
3664 Host_Port = r.Get_Host_Port();
3665 Guest_IP = r.Get_Guest_IP();
3666 Guest_Port = r.Get_Guest_Port();
3667 }
3668
operator ==(const VM_Redirection & r) const3669 bool VM_Redirection::operator==( const VM_Redirection &r ) const
3670 {
3671 if( Protocol == r.Get_Protocol() &&
3672 Host_Port == r.Get_Host_Port() &&
3673 Guest_IP == r.Get_Guest_IP() &&
3674 Guest_Port == r.Get_Guest_Port() )
3675 {
3676 return true;
3677 }
3678 else
3679 {
3680 return false;
3681 }
3682 }
3683
operator !=(const VM_Redirection & r) const3684 bool VM_Redirection::operator!=( const VM_Redirection &r ) const
3685 {
3686 return ! ( operator==(r) );
3687 }
3688
Get_Protocol() const3689 const QString &VM_Redirection::Get_Protocol() const
3690 {
3691 return Protocol;
3692 }
3693
Set_Protocol(const QString & p)3694 void VM_Redirection::Set_Protocol( const QString &p )
3695 {
3696 Protocol = p;
3697 }
3698
Get_Host_Port() const3699 int VM_Redirection::Get_Host_Port() const
3700 {
3701 return Host_Port;
3702 }
3703
Set_Host_Port(int hp)3704 void VM_Redirection::Set_Host_Port( int hp )
3705 {
3706 Host_Port = hp;
3707 }
3708
Get_Guest_IP() const3709 const QString &VM_Redirection::Get_Guest_IP() const
3710 {
3711 return Guest_IP;
3712 }
3713
Set_Guest_IP(const QString & ip)3714 void VM_Redirection::Set_Guest_IP( const QString &ip )
3715 {
3716 Guest_IP = ip;
3717 }
3718
Get_Guest_Port() const3719 int VM_Redirection::Get_Guest_Port() const
3720 {
3721 return Guest_Port;
3722 }
3723
Set_Guest_Port(int p)3724 void VM_Redirection::Set_Guest_Port( int p )
3725 {
3726 Guest_Port = p;
3727 }
3728
3729 //===========================================================================
3730
3731 // VM_Port ------------------------------------------------------------------
3732
VM_Port()3733 VM_Port::VM_Port()
3734 {
3735 Port_Redir = VM::PR_Default;
3736 Param_Line = "";
3737 }
3738
VM_Port(const VM_Port & p)3739 VM_Port::VM_Port( const VM_Port &p )
3740 {
3741 Port_Redir = p.Get_Port_Redirection();
3742 Param_Line = p.Get_Parametrs_Line();
3743 }
3744
operator ==(const VM_Port & p) const3745 bool VM_Port::operator==( const VM_Port &p ) const
3746 {
3747 if( Port_Redir == p.Get_Port_Redirection() &&
3748 Param_Line == p.Get_Parametrs_Line() )
3749 {
3750 return true;
3751 }
3752 else
3753 {
3754 return false;
3755 }
3756 }
3757
operator !=(const VM_Port & p) const3758 bool VM_Port::operator!=( const VM_Port &p ) const
3759 {
3760 return ! ( operator==(p) );
3761 }
3762
Get_Port_Redirection() const3763 VM::Port_Redirection VM_Port::Get_Port_Redirection() const
3764 {
3765 return Port_Redir;
3766 }
3767
Set_Port_Redirection(VM::Port_Redirection pr)3768 void VM_Port::Set_Port_Redirection( VM::Port_Redirection pr )
3769 {
3770 Port_Redir = pr;
3771 }
3772
Get_Parametrs_Line() const3773 const QString &VM_Port::Get_Parametrs_Line() const
3774 {
3775 return Param_Line;
3776 }
3777
Set_Parametrs_Line(const QString & pl)3778 void VM_Port::Set_Parametrs_Line( const QString &pl )
3779 {
3780 Param_Line = pl;
3781 }
3782
3783 //===========================================================================
3784
3785 // VM_USB Class -------------------------------------------------------------
3786
VM_USB()3787 VM_USB::VM_USB()
3788 {
3789 Use_Host_Device = true;
3790 Manufacturer_Name = "";
3791 Product_Name = "";
3792 Vendor_ID = "";
3793 Product_ID = "";
3794 Bus = "";
3795 Addr = "";
3796 DevPath = "";
3797 Speed = "0";
3798 Serial_Number = "";
3799 USB_Keyboard = USB_Tablet = USB_WacomTablet = USB_Braille = false;
3800 USB_Mouse = true;
3801 }
3802
VM_USB(const VM_USB & u)3803 VM_USB::VM_USB( const VM_USB &u )
3804 {
3805 Use_Host_Device = u.Get_Use_Host_Device();
3806 Manufacturer_Name = u.Get_Manufacturer_Name();
3807 Product_Name = u.Get_Product_Name();
3808 Vendor_ID = u.Get_Vendor_ID();
3809 Product_ID = u.Get_Product_ID();
3810 Bus = u.Get_Bus();
3811 Addr = u.Get_Addr();
3812 DevPath = u.Get_DevPath();
3813 Serial_Number = u.Get_Serial_Number();
3814 Speed = u.Get_Speed();
3815 u.Get_USB_QEMU_Devices( USB_Keyboard, USB_Mouse, USB_Tablet, USB_WacomTablet, USB_Braille );
3816 }
3817
operator ==(const VM_USB & u) const3818 bool VM_USB::operator==( const VM_USB &u ) const
3819 {
3820 bool k, m, t, wt, b;
3821 k = m = t = wt = b = false;
3822
3823 u.Get_USB_QEMU_Devices( k, m, t, wt, b );
3824
3825 if( Use_Host_Device == u.Get_Use_Host_Device() &&
3826 Vendor_ID == u.Get_Vendor_ID() &&
3827 Product_ID == u.Get_Product_ID() &&
3828 Serial_Number == u.Get_Serial_Number() &&
3829 USB_Keyboard == k &&
3830 USB_Mouse == m &&
3831 USB_Tablet == t &&
3832 USB_WacomTablet == wt &&
3833 USB_Braille == b )
3834 {
3835 return true;
3836 }
3837 else return false;
3838 }
3839
operator !=(const VM_USB & u) const3840 bool VM_USB::operator!=( const VM_USB &u ) const
3841 {
3842 return ! ( operator==(u) );
3843 }
3844
Get_Use_Host_Device() const3845 bool VM_USB::Get_Use_Host_Device() const
3846 {
3847 return Use_Host_Device;
3848 }
3849
Set_Use_Host_Device(bool use)3850 void VM_USB::Set_Use_Host_Device( bool use )
3851 {
3852 Use_Host_Device = use;
3853 }
3854
Get_Manufacturer_Name() const3855 const QString &VM_USB::Get_Manufacturer_Name() const
3856 {
3857 return Manufacturer_Name;
3858 }
3859
Set_Manufacturer_Name(const QString & name)3860 void VM_USB::Set_Manufacturer_Name( const QString &name )
3861 {
3862 Manufacturer_Name = name;
3863 }
3864
Get_Product_Name() const3865 const QString &VM_USB::Get_Product_Name() const
3866 {
3867 return Product_Name;
3868 }
3869
Set_Product_Name(const QString & name)3870 void VM_USB::Set_Product_Name( const QString &name )
3871 {
3872 Product_Name = name;
3873 }
3874
Get_Vendor_ID() const3875 const QString &VM_USB::Get_Vendor_ID() const
3876 {
3877 return Vendor_ID;
3878 }
3879
Set_Vendor_ID(const QString & dev)3880 void VM_USB::Set_Vendor_ID( const QString &dev )
3881 {
3882 Vendor_ID = dev;
3883 }
3884
Get_Product_ID() const3885 const QString &VM_USB::Get_Product_ID() const
3886 {
3887 return Product_ID;
3888 }
3889
Set_Product_ID(const QString & dev)3890 void VM_USB::Set_Product_ID( const QString &dev )
3891 {
3892 Product_ID = dev;
3893 }
3894
Get_ID_Line() const3895 QString VM_USB::Get_ID_Line() const
3896 {
3897 return Vendor_ID + ":" + Product_ID;
3898 }
3899
Set_ID_Line(const QString & line)3900 void VM_USB::Set_ID_Line( const QString &line )
3901 {
3902 QRegExp id_line = QRegExp( "([\\dabcdef]{4})[:]{1}([\\dabcdef]{4})" );
3903
3904 if( ! id_line.exactMatch(line) )
3905 {
3906 AQError( "void VM_USB::Set_ID_Line( const QString &line )",
3907 "Cannot Match QRegExp!" );
3908 return;
3909 }
3910
3911 QStringList id_str = id_line.capturedTexts();
3912
3913 Vendor_ID = id_str[1];
3914 Product_ID = id_str[2];
3915 }
3916
Get_Bus() const3917 QString VM_USB::Get_Bus() const
3918 {
3919 return Bus;
3920 }
3921
Set_Bus(const QString & bus)3922 void VM_USB::Set_Bus( const QString &bus )
3923 {
3924 Bus = bus;
3925 }
3926
Get_Addr() const3927 QString VM_USB::Get_Addr() const
3928 {
3929 return Addr;
3930 }
3931
Set_Addr(const QString & addr)3932 void VM_USB::Set_Addr( const QString &addr )
3933 {
3934 Addr = addr;
3935 }
3936
Get_DevPath() const3937 QString VM_USB::Get_DevPath() const
3938 {
3939 return DevPath;
3940 }
3941
Set_DevPath(const QString & devPath)3942 void VM_USB::Set_DevPath( const QString &devPath )
3943 {
3944 DevPath = devPath;
3945 }
3946
Get_Serial_Number() const3947 QString VM_USB::Get_Serial_Number() const
3948 {
3949 return Serial_Number;
3950 }
3951
Set_Serial_Number(const QString & serial)3952 void VM_USB::Set_Serial_Number( const QString &serial )
3953 {
3954 Serial_Number = serial;
3955 }
3956
Get_Speed() const3957 QString VM_USB::Get_Speed() const
3958 {
3959 return Speed;
3960 }
3961
Set_Speed(const QString & speed)3962 void VM_USB::Set_Speed( const QString &speed )
3963 {
3964 Speed = speed;
3965 }
3966
Get_USB_QEMU_Devices(bool & keyboard,bool & mouse,bool & tablet,bool & wacomTablet,bool & braille) const3967 void VM_USB::Get_USB_QEMU_Devices( bool &keyboard, bool &mouse, bool &tablet, bool &wacomTablet, bool &braille ) const
3968 {
3969 keyboard = USB_Keyboard;
3970 mouse = USB_Mouse;
3971 tablet = USB_Tablet;
3972 wacomTablet = USB_WacomTablet;
3973 braille = USB_Braille;
3974 }
3975
Set_USB_QEMU_Devices(bool keyboard,bool mouse,bool tablet,bool wacomTablet,bool braille)3976 void VM_USB::Set_USB_QEMU_Devices( bool keyboard, bool mouse, bool tablet, bool wacomTablet, bool braille )
3977 {
3978 USB_Keyboard = keyboard;
3979 USB_Mouse = mouse;
3980 USB_Tablet = tablet;
3981 USB_WacomTablet = wacomTablet;
3982 USB_Braille = braille;
3983 }
3984
3985 //===========================================================================
3986
3987 // VM_Init_Graphic_Mode -----------------------------------------------------
3988
VM_Init_Graphic_Mode()3989 VM_Init_Graphic_Mode::VM_Init_Graphic_Mode()
3990 {
3991 Enabled = false;
3992 Width = 800;
3993 Height = 600;
3994 Depth = 16;
3995 }
3996
VM_Init_Graphic_Mode(const VM_Init_Graphic_Mode & mode)3997 VM_Init_Graphic_Mode::VM_Init_Graphic_Mode( const VM_Init_Graphic_Mode &mode )
3998 {
3999 Enabled = mode.Get_Enabled();
4000 Width = mode.Get_Width();
4001 Height = mode.Get_Height();
4002 Depth = mode.Get_Depth();
4003 }
4004
operator ==(const VM_Init_Graphic_Mode & mode) const4005 bool VM_Init_Graphic_Mode::operator==( const VM_Init_Graphic_Mode &mode ) const
4006 {
4007 if( Enabled == mode.Get_Enabled() &&
4008 Width == mode.Get_Width() &&
4009 Height == mode.Get_Height() &&
4010 Depth == mode.Get_Depth() )
4011 {
4012 return true;
4013 }
4014 else
4015 {
4016 return false;
4017 }
4018 }
4019
operator !=(const VM_Init_Graphic_Mode & mode) const4020 bool VM_Init_Graphic_Mode::operator!=( const VM_Init_Graphic_Mode &mode ) const
4021 {
4022 return ! ( operator==(mode) );
4023 }
4024
Get_Enabled() const4025 bool VM_Init_Graphic_Mode::Get_Enabled() const
4026 {
4027 return Enabled;
4028 }
4029
Set_Enabled(bool use)4030 void VM_Init_Graphic_Mode::Set_Enabled( bool use )
4031 {
4032 Enabled = use;
4033 }
4034
Get_Width() const4035 int VM_Init_Graphic_Mode::Get_Width() const
4036 {
4037 return Width;
4038 }
4039
Set_Width(int w)4040 void VM_Init_Graphic_Mode::Set_Width( int w )
4041 {
4042 Width = w;
4043 }
4044
Get_Height() const4045 int VM_Init_Graphic_Mode::Get_Height() const
4046 {
4047 return Height;
4048 }
4049
Set_Height(int h)4050 void VM_Init_Graphic_Mode::Set_Height( int h )
4051 {
4052 Height = h;
4053 }
4054
Get_Depth() const4055 int VM_Init_Graphic_Mode::Get_Depth() const
4056 {
4057 return Depth;
4058 }
4059
Set_Depth(int d)4060 void VM_Init_Graphic_Mode::Set_Depth( int d )
4061 {
4062 Depth = d;
4063 }
4064
4065 //===========================================================================
4066
4067 // VM_SPICE -----------------------------------------------------------------
4068
VM_SPICE()4069 VM_SPICE::VM_SPICE()
4070 {
4071 Enable_SPICE = false;
4072 GXL_Devices_Count = 1;
4073 RAM_Size = 64;
4074
4075 Port = 5930;
4076 _Use_SPort = false;
4077 SPort = 1;
4078 _Use_Hostname = false;
4079 Hostname = "";
4080
4081 _Use_Image_Compression = false;
4082 Image_Compression = VM::SPICE_IC_Type_on;
4083 _Use_Video_Stream_Compression = true;
4084 _Use_Renderer = false;
4085 Renderer_List << VM::SPICE_Renderer_cairo
4086 << VM::SPICE_Renderer_oglpbuf
4087 << VM::SPICE_Renderer_oglpixmap;
4088 _Use_Playback_Compression = true;
4089
4090 _Use_Password = false;
4091 Password = "";
4092 }
4093
VM_SPICE(const VM_SPICE & vm_spice)4094 VM_SPICE::VM_SPICE( const VM_SPICE &vm_spice )
4095 {
4096 Enable_SPICE = vm_spice.Use_SPICE();
4097 GXL_Devices_Count = vm_spice.Get_GXL_Devices_Count();
4098 RAM_Size = vm_spice.Get_RAM_Size();
4099 Port = vm_spice.Get_Port();
4100 _Use_SPort = vm_spice.Use_SPort();
4101 SPort = vm_spice.Get_SPort();
4102 _Use_Hostname = vm_spice.Use_Hostname();
4103 Hostname = vm_spice.Get_Hostname();
4104 _Use_Image_Compression = vm_spice.Use_Image_Compression();
4105 Image_Compression = vm_spice.Get_Image_Compression();
4106 _Use_Video_Stream_Compression = vm_spice.Use_Video_Stream_Compression();
4107 _Use_Renderer = vm_spice.Use_Renderer();
4108 Renderer_List = vm_spice.Get_Renderer_List();
4109 _Use_Playback_Compression = vm_spice.Use_Playback_Compression();
4110 _Use_Password = vm_spice.Use_Password();
4111 Password = vm_spice.Get_Password();
4112 }
4113
operator ==(const VM_SPICE & vm_spice) const4114 bool VM_SPICE::operator==( const VM_SPICE &vm_spice ) const
4115 {
4116 if( Enable_SPICE == vm_spice.Use_SPICE() &&
4117 GXL_Devices_Count == vm_spice.Get_GXL_Devices_Count() &&
4118 RAM_Size == vm_spice.Get_RAM_Size() &&
4119 Port == vm_spice.Get_Port() &&
4120 _Use_SPort == vm_spice.Use_SPort() &&
4121 SPort == vm_spice.Get_SPort() &&
4122 _Use_Hostname == vm_spice.Use_Hostname() &&
4123 Hostname == vm_spice.Get_Hostname() &&
4124 _Use_Image_Compression == vm_spice.Use_Image_Compression() &&
4125 Image_Compression == vm_spice.Get_Image_Compression() &&
4126 _Use_Video_Stream_Compression == vm_spice.Use_Video_Stream_Compression() &&
4127 _Use_Renderer == vm_spice.Use_Renderer() &&
4128 Renderer_List == vm_spice.Get_Renderer_List() &&
4129 _Use_Playback_Compression == vm_spice.Use_Playback_Compression() &&
4130 _Use_Password == vm_spice.Use_Password() &&
4131 Password == vm_spice.Get_Password() )
4132 {
4133 return true;
4134 }
4135 else
4136 {
4137 return false;
4138 }
4139 }
4140
Use_SPICE() const4141 bool VM_SPICE::Use_SPICE() const
4142 {
4143 return Enable_SPICE;
4144 }
4145
Use_SPICE(bool use)4146 void VM_SPICE::Use_SPICE( bool use )
4147 {
4148 Enable_SPICE = use;
4149 }
4150
operator !=(const VM_SPICE & vm_spice) const4151 bool VM_SPICE::operator!=( const VM_SPICE &vm_spice ) const
4152 {
4153 return ! ( operator==(vm_spice) );
4154 }
4155
Get_GXL_Devices_Count() const4156 unsigned int VM_SPICE::Get_GXL_Devices_Count() const
4157 {
4158 return GXL_Devices_Count;
4159 }
4160
Set_GXL_Devices_Count(unsigned int count)4161 void VM_SPICE::Set_GXL_Devices_Count( unsigned int count )
4162 {
4163 GXL_Devices_Count = count;
4164 }
4165
Get_RAM_Size() const4166 int VM_SPICE::Get_RAM_Size() const
4167 {
4168 return RAM_Size;
4169 }
4170
Set_RAM_Size(int size)4171 void VM_SPICE::Set_RAM_Size( int size )
4172 {
4173 RAM_Size = size;
4174 }
4175
Get_Port() const4176 unsigned int VM_SPICE::Get_Port() const
4177 {
4178 return Port;
4179 }
4180
Set_Port(unsigned int port)4181 void VM_SPICE::Set_Port( unsigned int port )
4182 {
4183 Port = port;
4184 }
4185
Use_SPort() const4186 bool VM_SPICE::Use_SPort() const
4187 {
4188 return _Use_SPort;
4189 }
4190
Use_SPort(bool use)4191 void VM_SPICE::Use_SPort( bool use )
4192 {
4193 _Use_SPort = use;
4194 }
4195
Get_SPort() const4196 unsigned int VM_SPICE::Get_SPort() const
4197 {
4198 return SPort;
4199 }
4200
Set_SPort(unsigned int sport)4201 void VM_SPICE::Set_SPort( unsigned int sport )
4202 {
4203 SPort = sport;
4204 }
4205
Use_Hostname() const4206 bool VM_SPICE::Use_Hostname() const
4207 {
4208 return _Use_Hostname;
4209 }
4210
Use_Hostname(bool use)4211 void VM_SPICE::Use_Hostname( bool use )
4212 {
4213 _Use_Hostname = use;
4214 }
4215
Get_Hostname() const4216 QString VM_SPICE::Get_Hostname() const
4217 {
4218 return Hostname;
4219 }
4220
Set_Hostname(QString hostname)4221 void VM_SPICE::Set_Hostname( QString hostname )
4222 {
4223 Hostname = hostname;
4224 }
4225
Use_Image_Compression() const4226 bool VM_SPICE::Use_Image_Compression() const
4227 {
4228 return _Use_Image_Compression;
4229 }
4230
Use_Image_Compression(bool use)4231 void VM_SPICE::Use_Image_Compression( bool use )
4232 {
4233 _Use_Image_Compression = use;
4234 }
4235
Get_Image_Compression() const4236 VM::SPICE_Image_Compression_Type VM_SPICE::Get_Image_Compression() const
4237 {
4238 return Image_Compression;
4239 }
4240
Set_Image_Compression(VM::SPICE_Image_Compression_Type type)4241 void VM_SPICE::Set_Image_Compression( VM::SPICE_Image_Compression_Type type )
4242 {
4243 Image_Compression = type;
4244 }
4245
Use_Video_Stream_Compression() const4246 bool VM_SPICE::Use_Video_Stream_Compression() const
4247 {
4248 return _Use_Video_Stream_Compression;
4249 }
4250
Use_Video_Stream_Compression(bool use)4251 void VM_SPICE::Use_Video_Stream_Compression( bool use )
4252 {
4253 _Use_Video_Stream_Compression = use;
4254 }
4255
Use_Renderer() const4256 bool VM_SPICE::Use_Renderer() const
4257 {
4258 return _Use_Renderer;
4259 }
4260
Use_Renderer(bool use)4261 void VM_SPICE::Use_Renderer( bool use )
4262 {
4263 _Use_Renderer = use;
4264 }
4265
Get_Renderer_List() const4266 const QList<VM::SPICE_Renderer> &VM_SPICE::Get_Renderer_List() const
4267 {
4268 return Renderer_List;
4269 }
4270
Set_Renderer_List(const QList<VM::SPICE_Renderer> & list)4271 void VM_SPICE::Set_Renderer_List( const QList<VM::SPICE_Renderer> &list )
4272 {
4273 Renderer_List = list;
4274 }
4275
Use_Playback_Compression() const4276 bool VM_SPICE::Use_Playback_Compression() const
4277 {
4278 return _Use_Playback_Compression;
4279 }
4280
Use_Playback_Compression(bool use)4281 void VM_SPICE::Use_Playback_Compression( bool use )
4282 {
4283 _Use_Playback_Compression = use;
4284 }
4285
Use_Password() const4286 bool VM_SPICE::Use_Password() const
4287 {
4288 return _Use_Password;
4289 }
4290
Use_Password(bool use)4291 void VM_SPICE::Use_Password( bool use )
4292 {
4293 _Use_Password = use;
4294 }
4295
Get_Password() const4296 QString VM_SPICE::Get_Password() const
4297 {
4298 return Password;
4299 }
4300
Set_Password(QString password)4301 void VM_SPICE::Set_Password( QString password )
4302 {
4303 Password = password;
4304 }
4305
4306 //===========================================================================
4307