Changeset d5356c1 in nscp for service/NSClient++.cpp
- Timestamp:
- 11/04/09 06:52:49 (4 years ago)
- Branches:
- master, 0.4.0, 0.4.1, 0.4.2
- Children:
- 3b4097d
- Parents:
- 2305b35
- File:
-
- 1 edited
-
service/NSClient++.cpp (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
service/NSClient++.cpp
rf0eb62d rd5356c1 19 19 #include <charEx.h> 20 20 #include <Socket.h> 21 #include <b64/b64.h>22 21 #include <config.h> 23 22 #include <msvc_wrappers.h> … … 28 27 #include <crtdbg.h> 29 28 //#endif 30 #include <settings/settings_ini.hpp>31 #include <settings/settings_registry.hpp>32 #include <settings/settings_old.hpp>33 29 #include <Userenv.h> 34 30 #include <remote_processes.hpp> 35 31 #include <Lmcons.h> 32 #include "core_api.h" 33 #include "settings_manager_impl.h" 34 #include <settings/macros.h> 36 35 37 36 NSClient mainClient(SZSERVICENAME); // Global core instance. 38 37 bool g_bConsoleLog = false; 39 38 39 #define SETTINGS_GET_BOOL_CORE(key) \ 40 settings_manager::get_settings()->get_bool(setting_keys::key ## _PATH, setting_keys::key, setting_keys::key ## _DEFAULT) 41 42 #define SETTINGS_GET_STRING_CORE(key) \ 43 settings_manager::get_settings()->get_string(setting_keys::key ## _PATH, setting_keys::key, setting_keys::key ## _DEFAULT) 44 /* 45 #define SETTINGS_SET_STRING_CORE(key, value) \ 46 Settings::get_settings()->set_string(setting_keys::key ## _PATH, setting_keys::key, value); 47 */ 40 48 /** 41 49 * START OF Tray starter MERGE HELPER … … 71 79 72 80 static bool start(DWORD dwSessionId) { 73 std::wstring program = mainClient.getBasePath() + _T("\\") + SETTINGS_GET_STRING(nsclient::SYSTRAY_EXE); 81 std::wstring program = mainClient.getBasePath() + _T("\\") + 82 SETTINGS_GET_STRING_CORE(settings_def::SYSTRAY_EXE); 74 83 std::wstring cmdln = _T("\"") + program + _T("\" -channel __") + strEx::itos(dwSessionId) + _T("__"); 75 84 return tray_starter::startTrayHelper(dwSessionId, program, cmdln); … … 186 195 } 187 196 188 class NSC_logger : public Settings::LoggerInterface {189 public:190 //////////////////////////////////////////////////////////////////////////191 /// Log an ERROR message.192 ///193 /// @param file the file where the event happened194 /// @param line the line where the event happened195 /// @param message the message to log196 ///197 /// @author mickem198 void err(std::wstring file, int line, std::wstring message) {199 NSAPIMessage(NSCAPI::error, file.c_str(), line, message.c_str());200 }201 //////////////////////////////////////////////////////////////////////////202 /// Log an WARNING message.203 ///204 /// @param file the file where the event happened205 /// @param line the line where the event happened206 /// @param message the message to log207 ///208 /// @author mickem209 void warn(std::wstring file, int line, std::wstring message) {210 NSAPIMessage(NSCAPI::warning, file.c_str(), line, message.c_str());211 }212 //////////////////////////////////////////////////////////////////////////213 /// Log an INFO message.214 ///215 /// @param file the file where the event happened216 /// @param line the line where the event happened217 /// @param message the message to log218 ///219 /// @author mickem220 void info(std::wstring file, int line, std::wstring message) {221 NSAPIMessage(NSCAPI::log, file.c_str(), line, message.c_str());222 }223 //////////////////////////////////////////////////////////////////////////224 /// Log an DEBUG message.225 ///226 /// @param file the file where the event happened227 /// @param line the line where the event happened228 /// @param message the message to log229 ///230 /// @author mickem231 void debug(std::wstring file, int line, std::wstring message) {232 NSAPIMessage(NSCAPI::debug, file.c_str(), line, message.c_str());233 }234 };235 236 #define SETTINGS_GET_BOOL(key) \237 settings_manager::get_settings()->get_bool(settings::key ## _PATH, settings::key, settings::key ## _DEFAULT)238 239 namespace settings_manager {240 class NSCSettingsImpl : public Settings::SettingsHandlerImpl {241 private:242 std::wstring boot_;243 bool old_;244 public:245 NSCSettingsImpl() : old_(false) {}246 //////////////////////////////////////////////////////////////////////////247 /// Get a string form the boot file.248 ///249 /// @param section section to read a value from.250 /// @param key the key to read.251 /// @param def a default value.252 /// @return the value of the key or the default value.253 ///254 /// @author mickem255 std::wstring get_boot_string(std::wstring section, std::wstring key, std::wstring def) {256 TCHAR* buffer = new TCHAR[1024];257 GetPrivateProfileString(section.c_str(), key.c_str(), def.c_str(), buffer, 1023, boot_.c_str());258 std::wstring ret = buffer;259 delete [] buffer;260 return ret;261 }262 //////////////////////////////////////////////////////////////////////////263 /// Boot the settings subsystem from the given file (boot.ini).264 ///265 /// @param file the file to use when booting.266 ///267 /// @author mickem268 void boot(std::wstring file = _T("boot.ini")) {269 boot_ = get_base() + _T("\\") + file;270 std::wstring subsystem = get_boot_string(_T("settings"), _T("type"), _T("old"));271 get_logger()->debug(__FILEW__, __LINE__, _T("Trying to boot: ") + subsystem);272 settings_type type = string_to_type(subsystem);273 std::wstring context = get_boot_string(_T("settings"), _T("context"), subsystem);274 Settings::SettingsInterface *impl = create_instance(type, context);275 if (impl == NULL)276 throw Settings::SettingsException(_T("Could not create settings instance: ") + subsystem);277 add_type_impl(type, create_instance(type, context));278 set_type(type);279 if (old_)280 get()->set_bool(settings::settings_def::COMPATIBLITY_PATH, settings::settings_def::COMPATIBLITY, true);281 }282 //////////////////////////////////////////////////////////////////////////283 /// Create an instance of a given type.284 /// Used internally to create instances of various settings types.285 ///286 /// @param type the type to create287 /// @param context the context to use288 /// @return a new instance of given type.289 ///290 /// @author mickem291 Settings::SettingsInterface* create_instance(settings_type type, std::wstring context) {292 get_logger()->debug(__FILEW__, __LINE__, _T("Trying to create: ") + SettingsCore::type_to_string(type) + _T(": ") + context);293 if (type == SettingsCore::old_ini_file) {294 old_ = true;295 return new Settings::OLDSettings(this, context);296 }297 if (type == SettingsCore::ini_file)298 return new Settings::INISettings(this, context);299 if (type == SettingsCore::registry)300 return new Settings::REGSettings(this, context);301 throw SettingsException(_T("Undefined settings type: ") + SettingsCore::type_to_string(type));302 }303 304 };305 306 typedef Singleton<NSCSettingsImpl> SettingsHandler;307 308 // Alias to make handling "compatible" with old syntax309 Settings::SettingsInterface* get_settings() {310 return SettingsHandler::getInstance()->get();311 }312 Settings::SettingsCore* get_core() {313 return SettingsHandler::getInstance();314 }315 void destroy_settings() {316 SettingsHandler::destroyInstance();317 }318 319 320 bool init_settings() {321 try {322 get_core()->set_logger(new NSC_logger());323 get_core()->set_base(mainClient.getBasePath());324 get_core()->boot(_T("boot.ini"));325 get_core()->register_key(SETTINGS_REG_KEY_I_GEN(settings_def::PAYLOAD_LEN, Settings::SettingsCore::key_integer));326 get_core()->register_key(SETTINGS_REG_KEY_S_GEN(protocol_def::ALLOWED_HOSTS, Settings::SettingsCore::key_string));327 get_core()->register_key(SETTINGS_REG_KEY_B_GEN(protocol_def::CACHE_ALLOWED, Settings::SettingsCore::key_bool));328 get_core()->register_key(SETTINGS_REG_KEY_S_GEN(protocol_def::MASTER_KEY, Settings::SettingsCore::key_string));329 get_core()->register_key(SETTINGS_REG_KEY_S_GEN(protocol_def::PWD, Settings::SettingsCore::key_string));330 get_core()->register_key(SETTINGS_REG_KEY_S_GEN(protocol_def::OBFUSCATED_PWD, Settings::SettingsCore::key_string));331 332 } catch (SettingsException e) {333 LOG_CRITICAL_STD(_T("Failed to initialize settings: ") + e.getError());334 return false;335 } catch (...) {336 LOG_CRITICAL(_T("FATAL ERROR IN SETTINGS SUBSYTEM"));337 return false;338 }339 return true;340 }341 342 }343 344 #define SETTINGS_GET_STRING(key) \345 Settings::get_settings()->get_string(key ## _PATH, key, key ## _DEFAULT)346 #define SETTINGS_SET_STRING(key, value) \347 Settings::get_settings()->set_string(key ## _PATH, key, value);348 197 349 198 /** … … 442 291 g_bConsoleLog = true; 443 292 std::wstring password; 444 if (!settings_manager::init_settings( )) {293 if (!settings_manager::init_settings(mainClient.getBasePath())) { 445 294 std::wcout << _T("Could not find settings") << std::endl;; 446 295 return 1; … … 888 737 bool NSClientT::initCore(bool boot) { 889 738 LOG_MESSAGE(_T("Attempting to start NSCLient++ - " SZVERSION)); 890 if (!settings_manager::init_settings( )) {739 if (!settings_manager::init_settings(getBasePath())) { 891 740 return false; 892 741 } … … 895 744 settings_manager::get_settings()->set_int(_T("log"), _T("debug"), 1); 896 745 settings_manager::get_settings()->set_int(_T("Settings"), _T("shared_Session"), 1); 897 enable_shared_session_ = SETTINGS_GET_BOOL (settings_def::SHARED_SESSION);746 enable_shared_session_ = SETTINGS_GET_BOOL_CORE(settings_def::SHARED_SESSION); 898 747 } catch (SettingsException e) { 899 748 LOG_ERROR_STD(_T("Could not find settings: ") + e.getMessage()); … … 963 812 Settings::string_list list = settings_manager::get_settings()->get_keys(MAIN_MODULES_SECTION); 964 813 for (Settings::string_list::const_iterator cit = list.begin(); cit != list.end(); ++cit) { 814 LOG_DEBUG_STD(_T("Processing plugin: " + *cit)); 965 815 try { 966 816 if (settings_manager::get_settings()->get_string(MAIN_MODULES_SECTION, *cit) == _T("disabled")) { … … 1395 1245 } catch (SettingsException &e) { 1396 1246 LOG_DEBUG_STD(_T("Failed to get length: ") + e.getMessage()); 1397 return setting s::settings_def::PAYLOAD_LEN_DEFAULT;1247 return setting_keys::settings_def::PAYLOAD_LEN_DEFAULT; 1398 1248 } catch (...) { 1399 1249 LOG_ERROR(_T("Failed to get length: :(")); 1400 return setting s::settings_def::PAYLOAD_LEN_DEFAULT;1250 return setting_keys::settings_def::PAYLOAD_LEN_DEFAULT; 1401 1251 } 1402 1252 } … … 1528 1378 bool NSClientT::logDebug() { 1529 1379 if (debug_ == log_unknown) { 1380 debug_ = log_looking; 1530 1381 try { 1531 1382 if (settings_manager::get_settings()->get_int(_T("log"), _T("debug"), 0) == 1) … … 1536 1387 return true; 1537 1388 } 1538 } 1389 } else if (debug_ == log_looking) 1390 return true; 1539 1391 return (debug_ == log_debug); 1540 1392 } … … 1553 1405 */ 1554 1406 void NSClientT::reportMessage(int msgType, const TCHAR* file, const int line, std::wstring message) { 1407 strEx::replace(message, _T("\n"), _T(" ")); 1408 strEx::replace(message, _T("\r"), _T(" ")); 1555 1409 if ((msgType == NSCAPI::debug)&&(!logDebug())) { 1556 1410 return; … … 1659 1513 1660 1514 1661 NSCAPI::errorReturn NSAPIGetSettingsString(const TCHAR* section, const TCHAR* key, const TCHAR* defaultValue, TCHAR* buffer, unsigned int bufLen) {1662 try {1663 return NSCHelper::wrapReturnString(buffer, bufLen, settings_manager::get_settings()->get_string(section, key, defaultValue), NSCAPI::isSuccess);1664 } catch (...) {1665 LOG_ERROR_STD(_T("Failed to getString: ") + key);1666 return NSCAPI::hasFailed;1667 }1668 }1669 int NSAPIGetSettingsInt(const TCHAR* section, const TCHAR* key, int defaultValue) {1670 try {1671 return settings_manager::get_settings()->get_int(section, key, defaultValue);1672 } catch (SettingsException e) {1673 LOG_ERROR_STD(_T("Failed to set settings file") + e.getMessage());1674 return defaultValue;1675 }1676 }1677 NSCAPI::errorReturn NSAPIGetBasePath(TCHAR*buffer, unsigned int bufLen) {1678 return NSCHelper::wrapReturnString(buffer, bufLen, mainClient.getBasePath(), NSCAPI::isSuccess);1679 }1680 NSCAPI::errorReturn NSAPIGetApplicationName(TCHAR*buffer, unsigned int bufLen) {1681 return NSCHelper::wrapReturnString(buffer, bufLen, SZAPPNAME, NSCAPI::isSuccess);1682 }1683 NSCAPI::errorReturn NSAPIGetApplicationVersionStr(TCHAR*buffer, unsigned int bufLen) {1684 return NSCHelper::wrapReturnString(buffer, bufLen, SZVERSION, NSCAPI::isSuccess);1685 }1686 void NSAPIMessage(int msgType, const TCHAR* file, const int line, const TCHAR* message) {1687 mainClient.reportMessage(msgType, file, line, message);1688 }1689 void NSAPIStopServer(void) {1690 serviceControll::StopNoWait(SZSERVICENAME);1691 }1692 NSCAPI::nagiosReturn NSAPIInject(const TCHAR* command, const unsigned int argLen, TCHAR **argument, TCHAR *returnMessageBuffer, unsigned int returnMessageBufferLen, TCHAR *returnPerfBuffer, unsigned int returnPerfBufferLen) {1693 return mainClient.injectRAW(command, argLen, argument, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen);1694 }1695 NSCAPI::errorReturn NSAPIGetSettingsSection(const TCHAR* section, TCHAR*** aBuffer, unsigned int * bufLen) {1696 try {1697 unsigned int len = 0;1698 *aBuffer = arrayBuffer::list2arrayBuffer(settings_manager::get_settings()->get_keys(section), len);1699 *bufLen = len;1700 return NSCAPI::isSuccess;1701 } catch (SettingsException e) {1702 LOG_ERROR_STD(_T("Failed to get section: ") + e.getMessage());1703 } catch (...) {1704 LOG_ERROR_STD(_T("Failed to getSection: ") + section);1705 }1706 return NSCAPI::hasFailed;1707 }1708 NSCAPI::errorReturn NSAPIReleaseSettingsSectionBuffer(TCHAR*** aBuffer, unsigned int * bufLen) {1709 arrayBuffer::destroyArrayBuffer(*aBuffer, *bufLen);1710 *bufLen = 0;1711 *aBuffer = NULL;1712 return NSCAPI::isSuccess;1713 }1714 1715 NSCAPI::boolReturn NSAPICheckLogMessages(int messageType) {1716 if (mainClient.logDebug())1717 return NSCAPI::istrue;1718 return NSCAPI::isfalse;1719 }1720 1721 1515 std::wstring Encrypt(std::wstring str, unsigned int algorithm) { 1722 1516 unsigned int len = 0; … … 1746 1540 } 1747 1541 1748 NSCAPI::errorReturn NSAPIEncrypt(unsigned int algorithm, const TCHAR* inBuffer, unsigned int inBufLen, TCHAR* outBuf, unsigned int *outBufLen) { 1749 if (algorithm != NSCAPI::xor) { 1750 LOG_ERROR(_T("Unknown algortihm requested.")); 1751 return NSCAPI::hasFailed; 1752 } 1753 std::wstring key = settings_manager::get_settings()->get_string(SETTINGS_KEY(protocol_def::MASTER_KEY)); 1754 int tcharInBufLen = 0; 1755 char *c = charEx::tchar_to_char(inBuffer, inBufLen, tcharInBufLen); 1756 std::wstring::size_type j=0; 1757 for (int i=0;i<tcharInBufLen;i++,j++) { 1758 if (j > key.size()) 1759 j = 0; 1760 c[i] ^= key[j]; 1761 } 1762 size_t cOutBufLen = b64::b64_encode(reinterpret_cast<void*>(c), tcharInBufLen, NULL, NULL); 1763 if (!outBuf) { 1764 *outBufLen = static_cast<unsigned int>(cOutBufLen*2); // TODO: Guessing wildly here but no proper way to tell without a lot of extra work 1765 return NSCAPI::isSuccess; 1766 } 1767 char *cOutBuf = new char[cOutBufLen+1]; 1768 size_t len = b64::b64_encode(reinterpret_cast<void*>(c), tcharInBufLen, cOutBuf, cOutBufLen); 1769 delete [] c; 1770 if (len == 0) { 1771 LOG_ERROR(_T("Invalid out buffer length.")); 1772 return NSCAPI::isInvalidBufferLen; 1773 } 1774 int realOutLen; 1775 TCHAR *realOut = charEx::char_to_tchar(cOutBuf, cOutBufLen, realOutLen); 1776 if (static_cast<unsigned int>(realOutLen) >= *outBufLen) { 1777 LOG_ERROR_STD(_T("Invalid out buffer length: ") + strEx::itos(realOutLen) + _T(" was needed but only ") + strEx::itos(*outBufLen) + _T(" was allocated.")); 1778 return NSCAPI::isInvalidBufferLen; 1779 } 1780 wcsncpy_s(outBuf, *outBufLen, realOut, realOutLen); 1781 delete [] realOut; 1782 outBuf[realOutLen] = 0; 1783 *outBufLen = static_cast<unsigned int>(realOutLen); 1784 return NSCAPI::isSuccess; 1785 } 1786 1787 NSCAPI::errorReturn NSAPIDecrypt(unsigned int algorithm, const TCHAR* inBuffer, unsigned int inBufLen, TCHAR* outBuf, unsigned int *outBufLen) { 1788 if (algorithm != NSCAPI::xor) { 1789 LOG_ERROR(_T("Unknown algortihm requested.")); 1790 return NSCAPI::hasFailed; 1791 } 1792 int inBufLenC = 0; 1793 char *inBufferC = charEx::tchar_to_char(inBuffer, inBufLen, inBufLenC); 1794 size_t cOutLen = b64::b64_decode(inBufferC, inBufLenC, NULL, NULL); 1795 if (!outBuf) { 1796 *outBufLen = static_cast<unsigned int>(cOutLen*2); // TODO: Guessing wildly here but no proper way to tell without a lot of extra work 1797 return NSCAPI::isSuccess; 1798 } 1799 char *cOutBuf = new char[cOutLen+1]; 1800 size_t len = b64::b64_decode(inBufferC, inBufLenC, reinterpret_cast<void*>(cOutBuf), cOutLen); 1801 delete [] inBufferC; 1802 if (len == 0) { 1803 LOG_ERROR(_T("Invalid out buffer length.")); 1804 return NSCAPI::isInvalidBufferLen; 1805 } 1806 int realOutLen; 1807 1808 std::wstring key = settings_manager::get_settings()->get_string(SETTINGS_KEY(protocol_def::MASTER_KEY)); 1809 std::wstring::size_type j=0; 1810 for (int i=0;i<cOutLen;i++,j++) { 1811 if (j > key.size()) 1812 j = 0; 1813 cOutBuf[i] ^= key[j]; 1814 } 1815 1816 TCHAR *realOut = charEx::char_to_tchar(cOutBuf, cOutLen, realOutLen); 1817 if (static_cast<unsigned int>(realOutLen) >= *outBufLen) { 1818 LOG_ERROR_STD(_T("Invalid out buffer length: ") + strEx::itos(realOutLen) + _T(" was needed but only ") + strEx::itos(*outBufLen) + _T(" was allocated.")); 1819 return NSCAPI::isInvalidBufferLen; 1820 } 1821 wcsncpy_s(outBuf, *outBufLen, realOut, realOutLen); 1822 delete [] realOut; 1823 outBuf[realOutLen] = 0; 1824 *outBufLen = static_cast<unsigned int>(realOutLen); 1825 return NSCAPI::isSuccess; 1826 } 1827 1828 NSCAPI::errorReturn NSAPISetSettingsString(const TCHAR* section, const TCHAR* key, const TCHAR* value) { 1829 try { 1830 settings_manager::get_settings()->set_string(section, key, value); 1831 } catch (...) { 1832 LOG_ERROR_STD(_T("Failed to setString: ") + key); 1833 return NSCAPI::hasFailed; 1834 } 1835 return NSCAPI::isSuccess; 1836 } 1837 NSCAPI::errorReturn NSAPISetSettingsInt(const TCHAR* section, const TCHAR* key, int value) { 1838 try { 1839 settings_manager::get_settings()->set_int(section, key, value); 1840 } catch (...) { 1841 LOG_ERROR_STD(_T("Failed to setInt: ") + key); 1842 return NSCAPI::hasFailed; 1843 } 1844 return NSCAPI::isSuccess; 1845 } 1846 NSCAPI::errorReturn NSAPIWriteSettings(int type) { 1847 try { 1848 if (type == NSCAPI::settings_registry) 1849 settings_manager::get_core()->migrate_to(Settings::SettingsCore::registry); 1850 else if (type == NSCAPI::settings_inifile) 1851 settings_manager::get_core()->migrate_to(Settings::SettingsCore::ini_file); 1852 else 1853 settings_manager::get_settings()->save(); 1854 } catch (SettingsException e) { 1855 LOG_ERROR_STD(_T("Failed to write settings: ") + e.getMessage()); 1856 return NSCAPI::hasFailed; 1857 } catch (...) { 1858 LOG_ERROR_STD(_T("Failed to write settings")); 1859 return NSCAPI::hasFailed; 1860 } 1861 return NSCAPI::isSuccess; 1862 } 1863 NSCAPI::errorReturn NSAPIReadSettings(int type) { 1864 try { 1865 if (type == NSCAPI::settings_registry) 1866 settings_manager::get_core()->migrate_from(Settings::SettingsCore::registry); 1867 else if (type == NSCAPI::settings_inifile) 1868 settings_manager::get_core()->migrate_from(Settings::SettingsCore::ini_file); 1869 else 1870 settings_manager::get_settings()->reload(); 1871 } catch (SettingsException e) { 1872 LOG_ERROR_STD(_T("Failed to read settings: ") + e.getMessage()); 1873 return NSCAPI::hasFailed; 1874 } catch (...) { 1875 LOG_ERROR_STD(_T("Failed to read settings")); 1876 return NSCAPI::hasFailed; 1877 } 1878 return NSCAPI::isSuccess; 1879 } 1880 NSCAPI::errorReturn NSAPIRehash(int flag) { 1881 return NSCAPI::hasFailed; 1882 } 1883 NSCAPI::errorReturn NSAPIDescribeCommand(const TCHAR* command, TCHAR* buffer, unsigned int bufLen) { 1884 return NSCHelper::wrapReturnString(buffer, bufLen, mainClient.describeCommand(command), NSCAPI::isSuccess); 1885 } 1886 NSCAPI::errorReturn NSAPIGetAllCommandNames(arrayBuffer::arrayBuffer* aBuffer, unsigned int *bufLen) { 1887 unsigned int len = 0; 1888 *aBuffer = arrayBuffer::list2arrayBuffer(mainClient.getAllCommandNames(), len); 1889 *bufLen = len; 1890 return NSCAPI::isSuccess; 1891 } 1892 NSCAPI::errorReturn NSAPIReleaseAllCommandNamessBuffer(TCHAR*** aBuffer, unsigned int * bufLen) { 1893 arrayBuffer::destroyArrayBuffer(*aBuffer, *bufLen); 1894 *bufLen = 0; 1895 *aBuffer = NULL; 1896 return NSCAPI::isSuccess; 1897 } 1898 NSCAPI::errorReturn NSAPIRegisterCommand(const TCHAR* cmd,const TCHAR* desc) { 1899 mainClient.registerCommand(cmd, desc); 1900 return NSCAPI::isSuccess; 1901 } 1902 NSCAPI::errorReturn NSAPISettingsRegKey(const TCHAR* path, const TCHAR* key, int type, const TCHAR* title, const TCHAR* description, const TCHAR* defVal, int advanced) { 1903 try { 1904 if (type == NSCAPI::key_string) 1905 settings_manager::get_core()->register_key(path, key, Settings::SettingsCore::key_string, title, description, defVal, advanced); 1906 if (type == NSCAPI::key_bool) 1907 settings_manager::get_core()->register_key(path, key, Settings::SettingsCore::key_bool, title, description, defVal, advanced); 1908 if (type == NSCAPI::key_integer) 1909 settings_manager::get_core()->register_key(path, key, Settings::SettingsCore::key_integer, title, description, defVal, advanced); 1910 return NSCAPI::hasFailed; 1911 } catch (SettingsException e) { 1912 LOG_ERROR_STD(_T("Failed register key: ") + e.getMessage()); 1913 return NSCAPI::hasFailed; 1914 } catch (...) { 1915 LOG_ERROR_STD(_T("Failed register key")); 1916 return NSCAPI::hasFailed; 1917 } 1918 return NSCAPI::isSuccess; 1919 } 1920 1921 1922 NSCAPI::errorReturn NSAPISettingsRegPath(const TCHAR* path, const TCHAR* title, const TCHAR* description, int advanced) { 1923 try { 1924 settings_manager::get_core()->register_path(path, title, description, advanced); 1925 } catch (SettingsException e) { 1926 LOG_ERROR_STD(_T("Failed register path: ") + e.getMessage()); 1927 return NSCAPI::hasFailed; 1928 } catch (...) { 1929 LOG_ERROR_STD(_T("Failed register path")); 1930 return NSCAPI::hasFailed; 1931 } 1932 return NSCAPI::isSuccess; 1933 } 1934 1935 //int wmain(int argc, TCHAR* argv[], TCHAR* envp[]) 1936 TCHAR* copyString(const std::wstring &str) { 1937 int sz = str.size(); 1938 TCHAR *tc = new TCHAR[sz+2]; 1939 wcsncpy_s(tc, sz+1, str.c_str(), sz); 1940 return tc; 1941 } 1942 NSCAPI::errorReturn NSAPIGetPluginList(int *len, NSCAPI::plugin_info *list[]) { 1943 NSClientT::plugin_info_list plugList= mainClient.get_all_plugins(); 1944 *len = plugList.size(); 1945 1946 *list = new NSCAPI::plugin_info[*len+1]; 1947 int i=0; 1948 for(NSClientT::plugin_info_list::const_iterator cit = plugList.begin(); cit != plugList.end(); ++cit,i++) { 1949 (*list)[i].dll = copyString((*cit).dll); 1950 (*list)[i].name = copyString((*cit).name); 1951 (*list)[i].version = copyString((*cit).version); 1952 (*list)[i].description = copyString((*cit).description); 1953 } 1954 return NSCAPI::isSuccess; 1955 } 1956 NSCAPI::errorReturn NSAPIReleasePluginList(int len, NSCAPI::plugin_info *list[]) { 1957 for (int i=0;i<len;i++) { 1958 delete [] (*list)[i].dll; 1959 delete [] (*list)[i].name; 1960 delete [] (*list)[i].version; 1961 delete [] (*list)[i].description; 1962 } 1963 delete [] *list; 1964 return NSCAPI::isSuccess; 1965 } 1966 1967 1968 NSCAPI::errorReturn NSAPISettingsSave(void) { 1969 try { 1970 settings_manager::get_settings()->save(); 1971 } catch (SettingsException e) { 1972 LOG_ERROR_STD(_T("Failed to save: ") + e.getMessage()); 1973 return NSCAPI::hasFailed; 1974 } catch (...) { 1975 LOG_ERROR_STD(_T("Failed to save")); 1976 return NSCAPI::hasFailed; 1977 } 1978 return NSCAPI::isSuccess; 1979 } 1980 1981 1982 1983 LPVOID NSAPILoader(TCHAR*buffer) { 1984 if (_wcsicmp(buffer, _T("NSAPIGetApplicationName")) == 0) 1985 return &NSAPIGetApplicationName; 1986 if (_wcsicmp(buffer, _T("NSAPIGetApplicationVersionStr")) == 0) 1987 return &NSAPIGetApplicationVersionStr; 1988 if (_wcsicmp(buffer, _T("NSAPIGetSettingsString")) == 0) 1989 return &NSAPIGetSettingsString; 1990 if (_wcsicmp(buffer, _T("NSAPIGetSettingsSection")) == 0) 1991 return &NSAPIGetSettingsSection; 1992 if (_wcsicmp(buffer, _T("NSAPIReleaseSettingsSectionBuffer")) == 0) 1993 return &NSAPIReleaseSettingsSectionBuffer; 1994 if (_wcsicmp(buffer, _T("NSAPIGetSettingsInt")) == 0) 1995 return &NSAPIGetSettingsInt; 1996 if (_wcsicmp(buffer, _T("NSAPIMessage")) == 0) 1997 return &NSAPIMessage; 1998 if (_wcsicmp(buffer, _T("NSAPIStopServer")) == 0) 1999 return &NSAPIStopServer; 2000 if (_wcsicmp(buffer, _T("NSAPIInject")) == 0) 2001 return &NSAPIInject; 2002 if (_wcsicmp(buffer, _T("NSAPIGetBasePath")) == 0) 2003 return &NSAPIGetBasePath; 2004 if (_wcsicmp(buffer, _T("NSAPICheckLogMessages")) == 0) 2005 return &NSAPICheckLogMessages; 2006 if (_wcsicmp(buffer, _T("NSAPIEncrypt")) == 0) 2007 return &NSAPIEncrypt; 2008 if (_wcsicmp(buffer, _T("NSAPIDecrypt")) == 0) 2009 return &NSAPIDecrypt; 2010 if (_wcsicmp(buffer, _T("NSAPISetSettingsString")) == 0) 2011 return &NSAPISetSettingsString; 2012 if (_wcsicmp(buffer, _T("NSAPISetSettingsInt")) == 0) 2013 return &NSAPISetSettingsInt; 2014 if (_wcsicmp(buffer, _T("NSAPIWriteSettings")) == 0) 2015 return &NSAPIWriteSettings; 2016 if (_wcsicmp(buffer, _T("NSAPIReadSettings")) == 0) 2017 return &NSAPIReadSettings; 2018 if (_wcsicmp(buffer, _T("NSAPIRehash")) == 0) 2019 return &NSAPIRehash; 2020 if (_wcsicmp(buffer, _T("NSAPIDescribeCommand")) == 0) 2021 return &NSAPIDescribeCommand; 2022 if (_wcsicmp(buffer, _T("NSAPIGetAllCommandNames")) == 0) 2023 return &NSAPIGetAllCommandNames; 2024 if (_wcsicmp(buffer, _T("NSAPIReleaseAllCommandNamessBuffer")) == 0) 2025 return &NSAPIReleaseAllCommandNamessBuffer; 2026 if (_wcsicmp(buffer, _T("NSAPIRegisterCommand")) == 0) 2027 return &NSAPIRegisterCommand; 2028 if (_wcsicmp(buffer, _T("NSAPISettingsRegKey")) == 0) 2029 return &NSAPISettingsRegKey; 2030 if (_wcsicmp(buffer, _T("NSAPISettingsRegPath")) == 0) 2031 return &NSAPISettingsRegPath; 2032 if (_wcsicmp(buffer, _T("NSAPIGetPluginList")) == 0) 2033 return &NSAPIGetPluginList; 2034 if (_wcsicmp(buffer, _T("NSAPIReleasePluginList")) == 0) 2035 return &NSAPIReleasePluginList; 2036 if (_wcsicmp(buffer, _T("NSAPISettingsSave")) == 0) 2037 return &NSAPISettingsSave; 2038 2039 LOG_ERROR_STD(_T("Function not found: ") + buffer); 2040 return NULL; 2041 } 2042 2043 1542
Note: See TracChangeset
for help on using the changeset viewer.








