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