| 
									
										
										
										
											2009-07-28 21:32:10 +00:00
										 |  |  | // Copyright (C) 2003 Dolphin Project.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, version 2.0.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU General Public License 2.0 for more details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A copy of the GPL 2.0 should have been included with the program.
 | 
					
						
							|  |  |  | // If not, see http://www.gnu.org/licenses/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Official SVN repository and contact information can be found at
 | 
					
						
							|  |  |  | // http://code.google.com/p/dolphin-emu/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "stdafx.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "VolumeGC.h"
 | 
					
						
							|  |  |  | #include "StringUtil.h"
 | 
					
						
							| 
									
										
										
										
											2009-09-04 11:34:21 +00:00
										 |  |  | #include "FileMonitor.h"
 | 
					
						
							| 
									
										
										
										
											2009-01-03 18:50:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | namespace DiscIO | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | CVolumeGC::CVolumeGC(IBlobReader* _pReader) | 
					
						
							|  |  |  | 	: m_pReader(_pReader) | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CVolumeGC::~CVolumeGC() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete m_pReader; | 
					
						
							| 
									
										
										
										
											2009-01-04 21:53:41 +00:00
										 |  |  | 	m_pReader = NULL; // I don't think this makes any difference, but anyway
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool CVolumeGC::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							|  |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2009-07-03 03:26:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-03 20:00:09 +00:00
										 |  |  | 	FileMon::FindFilename(_Offset); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	return m_pReader->Read(_Offset, _Length, _pBuffer); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 13:59:06 +00:00
										 |  |  | bool CVolumeGC::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | std::string CVolumeGC::GetUniqueID() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	static const std::string NO_UID("NO_UID"); | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							|  |  |  | 		return NO_UID; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-30 17:58:02 +00:00
										 |  |  | 	char ID[7]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!Read(0, sizeof(ID), reinterpret_cast<u8*>(ID))) | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2011-01-13 02:05:58 +00:00
										 |  |  | 		PanicAlertT("Failed to read unique ID from disc image"); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 		return NO_UID; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-30 17:58:02 +00:00
										 |  |  | 	ID[6] = '\0'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ID; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IVolume::ECountry CVolumeGC::GetCountry() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (!m_pReader) | 
					
						
							|  |  |  | 		return COUNTRY_UNKNOWN; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 CountryCode; | 
					
						
							|  |  |  | 	m_pReader->Read(3, 1, &CountryCode); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-03 22:34:51 +00:00
										 |  |  | 	return CountrySwitch(CountryCode); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::string CVolumeGC::GetMakerID() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return std::string(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	char makerID[3]; | 
					
						
							|  |  |  | 	if (!Read(0x4, 0x2, (u8*)&makerID)) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return std::string(); | 
					
						
							|  |  |  | 	makerID[2] = '\0'; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return makerID; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::string CVolumeGC::GetName() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							| 
									
										
										
										
											2010-01-09 22:03:20 +00:00
										 |  |  | 		return ""; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	char name[128]; | 
					
						
							|  |  |  | 	if (!Read(0x20, 0x60, (u8*)&name)) | 
					
						
							| 
									
										
										
										
											2010-01-09 22:03:20 +00:00
										 |  |  | 		return ""; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return name; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | u32 CVolumeGC::GetFSTSize() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	u32 size; | 
					
						
							|  |  |  | 	if (!Read(0x428, 0x4, (u8*)&size)) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return Common::swap32(size); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::string CVolumeGC::GetApploaderDate() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader == NULL) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return std::string(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	char date[16]; | 
					
						
							|  |  |  | 	if (!Read(0x2440, 0x10, (u8*)&date)) | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 		return std::string(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	// Should be 0 already, but just in case
 | 
					
						
							| 
									
										
										
										
											2010-08-13 19:07:59 +00:00
										 |  |  | 	date[10] = '\0'; | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return date; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | u64 CVolumeGC::GetSize() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (m_pReader) | 
					
						
							| 
									
										
										
										
											2010-12-03 12:42:01 +00:00
										 |  |  | 		return m_pReader->GetDataSize(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	else | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace
 |