1 /* 2 * The Sleuth Kit 3 * 4 * Contact: Brian Carrier [carrier <at> sleuthkit [dot] org] 5 * Copyright (c) 2010-2012 Basis Technology Corporation. All Rights 6 * reserved. 7 * 8 * This software is distributed under the Common Public License 1.0 9 */ 10 11 #include <string> 12 13 #include "TskServices.h" 14 #include "tsk/framework/utilities/TskException.h" 15 #include "tsk/framework/services/TskSystemPropertiesImpl.h" 16 17 TskServices *TskServices::m_pInstance = NULL; 18 19 /** 20 * Singleton interface to return the TskServices instance. 21 */ Instance()22TskServices &TskServices::Instance() 23 { 24 if (!m_pInstance) { 25 m_pInstance = new TskServices; 26 m_pInstance->m_log = NULL; 27 m_pInstance->m_scheduler = NULL; 28 m_pInstance->m_imgDB = NULL; 29 m_pInstance->m_blackboard = NULL; 30 m_pInstance->m_systemProperties = NULL; 31 m_pInstance->m_imageFile = NULL; 32 m_pInstance->m_fileManager = NULL; 33 } 34 return *m_pInstance; 35 } 36 37 /** 38 * Return the system log service. If no log was setup, a service will be 39 * created that sends messages to stderr. 40 * @returns log reference. 41 */ getLog()42Log& TskServices::getLog() 43 { 44 // create a default one if it has not been set yet 45 if (!m_log) { 46 m_defaultLog.logInfo(L"TskServices::getLog - Log has not been set, using default implementation."); 47 return m_defaultLog; 48 } 49 return *m_log; 50 } 51 52 /** 53 * Set the log service. 54 * Throws an exception if one has already been set. 55 */ setLog(Log & log)56void TskServices::setLog(Log &log) 57 { 58 if (m_log) { 59 LOGERROR(L"TskServices::setLog - Log has already been initialized."); 60 throw TskException("Log already initialized."); 61 } else { 62 m_log = &log; 63 } 64 } 65 66 /** 67 * Return the system scheduler service. If no service was setup, an exception 68 * is thrown. 69 * @returns scheduler reference. 70 */ getScheduler()71Scheduler& TskServices::getScheduler() 72 { 73 if (m_scheduler == NULL) 74 { 75 LOGERROR(L"TskServices::getScheduler - Scheduler has not been initialized."); 76 throw TskException("Scheduler not initialized."); 77 } 78 79 return *m_scheduler; 80 } 81 82 /** 83 * Set the scheduler service. 84 * Throws an exception if one has already been set. 85 */ setScheduler(Scheduler & scheduler)86void TskServices::setScheduler(Scheduler &scheduler) 87 { 88 if (m_scheduler) { 89 LOGERROR(L"TskServices::setScheduler - Scheduler has already been initialized."); 90 throw TskException("Scheduler already initialized."); 91 } else { 92 m_scheduler = &scheduler; 93 } 94 } 95 96 97 /** 98 * Return the database service. If no service was setup, an exception 99 * is thrown. 100 * @returns database reference. 101 */ getImgDB()102TskImgDB& TskServices::getImgDB() 103 { 104 if (m_imgDB == NULL) 105 { 106 LOGERROR(L"TskServices::getImgDB - ImgDB has not been initialized."); 107 throw TskException("ImgDB not initialized."); 108 } 109 110 return *m_imgDB; 111 } 112 113 /** 114 * Set the database service. 115 * Throws an exception if one has already been set. 116 */ setImgDB(TskImgDB & imgDB)117void TskServices::setImgDB(TskImgDB& imgDB) 118 { 119 if (m_imgDB) { 120 LOGERROR(L"TskServices::setImgDB - ImgDB has already been initialized."); 121 throw TskException("ImgDB already initialized."); 122 } else { 123 m_imgDB = &imgDB; 124 } 125 } 126 127 128 129 /** 130 * Set the image file service. 131 * Throws an exception if one has already been set. 132 */ setImageFile(TskImageFile & imageFile)133void TskServices::setImageFile(TskImageFile& imageFile) 134 { 135 if (m_imageFile) { 136 LOGERROR(L"TskServices::setImageFile - ImageFile has already been initialized."); 137 throw TskException("ImageFile already initialized."); 138 } else { 139 m_imageFile = &imageFile; 140 } 141 } 142 143 /** 144 * Return the image file service. If no service was setup, an exception 145 * is thrown. 146 * @returns image file reference. 147 */ getImageFile()148TskImageFile& TskServices::getImageFile() 149 { 150 if (m_imageFile == NULL) 151 { 152 LOGERROR(L"TskServices::getImageFile - ImageFile has not been initialized."); 153 throw TskException("ImageFile not initialized."); 154 } 155 156 return *m_imageFile; 157 } 158 159 /** 160 * Set the blackboard service. 161 * Throws an exception if one has already been set. 162 */ setBlackboard(TskBlackboard & blackboard)163void TskServices::setBlackboard(TskBlackboard& blackboard) 164 { 165 if (m_blackboard) { 166 LOGERROR(L"TskServices::setBlackboard - Blackboard has already been initialized."); 167 throw TskException("Blackboard already initialized."); 168 } else { 169 m_blackboard = &blackboard; 170 } 171 } 172 173 /** 174 * Return the blackboard service. If no service was setup, an exception 175 * is thrown. 176 * @returns blackboard file reference. 177 */ getBlackboard()178TskBlackboard& TskServices::getBlackboard() 179 { 180 if (m_blackboard == NULL) 181 { 182 LOGERROR(L"TskServices::getBlackboard - Blackboard has not been initialized."); 183 throw TskException("Blackboard not initialized."); 184 } 185 return *m_blackboard; 186 } 187 188 /** 189 * Set the system properties service. 190 * Throws an exception if one has already been set. 191 */ setSystemProperties(TskSystemProperties & systemProperties)192void TskServices::setSystemProperties(TskSystemProperties& systemProperties) 193 { 194 if (m_systemProperties) { 195 LOGERROR(L"TskServices::setSystemProperties - SystemProperties has already been initialized."); 196 throw TskException("SystemProperties already initialized."); 197 } else { 198 m_systemProperties = &systemProperties; 199 } 200 } 201 202 /** 203 * Return the system properties service. If no service was setup, a 204 * default memory-based version is created. 205 * @returns system properties reference. 206 */ getSystemProperties()207TskSystemProperties& TskServices::getSystemProperties() 208 { 209 if (m_systemProperties == NULL) 210 { 211 TskSystemPropertiesImpl *prop = new TskSystemPropertiesImpl(); 212 prop->initialize(); 213 setSystemProperties(*prop); 214 215 LOGINFO(L"TskServices::getSystemProperties - SystemProperties has not been set, using default implementation."); 216 } 217 return *m_systemProperties; 218 } 219 setFileManager(TskFileManager & fileManager)220void TskServices::setFileManager(TskFileManager& fileManager) 221 { 222 if (m_fileManager) { 223 LOGERROR(L"TskServices::setFileManager - File Manager has already been initialized."); 224 throw TskException("FileManager already initialized."); 225 } else { 226 m_fileManager = &fileManager; 227 } 228 } 229 getFileManager()230TskFileManager& TskServices::getFileManager() 231 { 232 if (m_fileManager == NULL) 233 { 234 LOGERROR(L"TskServices::getFileManager - File Manager has not been initialized."); 235 throw TskException("File Manager not initialized."); 236 } 237 return *m_fileManager; 238 } 239