llsdappservices.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:8k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llsdappservices.cpp
  3.  * @author Phoenix
  4.  * @date 2006-09-12
  5.  *
  6.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2006-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "linden_common.h"
  34. #include "llsdappservices.h"
  35. #include "llapp.h"
  36. #include "llhttpnode.h"
  37. #include "llsdserialize.h"
  38. void LLSDAppServices::useServices()
  39. {
  40. /*
  41. Having this function body here, causes the classes and globals in this
  42. file to be linked into any program that uses the llmessage library.
  43. */
  44. }
  45. class LLHTTPConfigService : public LLHTTPNode
  46. {
  47. public:
  48. virtual void describe(Description& desc) const
  49. {
  50. desc.shortInfo("GET an array of all the options in priority order.");
  51. desc.getAPI();
  52. desc.source(__FILE__, __LINE__);
  53. }
  54.     
  55. virtual LLSD simpleGet() const
  56. {
  57. LLSD result;
  58. LLApp* app = LLApp::instance();
  59. for(int ii = 0; ii < LLApp::PRIORITY_COUNT; ++ii)
  60. {
  61. result.append(app->getOptionData((LLApp::OptionPriority)ii));
  62. }
  63. return result;
  64. }
  65. };
  66. LLHTTPRegistration<LLHTTPConfigService>
  67. gHTTPRegistratiAppConfig("/app/config");
  68. class LLHTTPConfigRuntimeService : public LLHTTPNode
  69. {
  70. public:
  71. virtual void describe(Description& desc) const
  72. {
  73. desc.shortInfo("Manipulate a map of runtime-override options.");
  74. desc.getAPI();
  75. desc.postAPI();
  76. desc.source(__FILE__, __LINE__);
  77. }
  78.     
  79. virtual LLSD simpleGet() const
  80. {
  81. return LLApp::instance()->getOptionData(
  82. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  83. }
  84. virtual void post(
  85. LLHTTPNode::ResponsePtr response,
  86. const LLSD& context,
  87. const LLSD& input) const
  88. {
  89. LLSD result = LLApp::instance()->getOptionData(
  90. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  91. LLSD::map_const_iterator iter = input.beginMap();
  92. LLSD::map_const_iterator end = input.endMap();
  93. for(; iter != end; ++iter)
  94. {
  95. result[(*iter).first] = (*iter).second;
  96. }
  97. LLApp::instance()->setOptionData(
  98. LLApp::PRIORITY_RUNTIME_OVERRIDE,
  99. result);
  100. response->result(result);
  101. }
  102. };
  103. LLHTTPRegistration<LLHTTPConfigRuntimeService>
  104. gHTTPRegistrationRuntimeConfig("/app/config/runtime-override");
  105. class LLHTTPConfigRuntimeSingleService : public LLHTTPNode
  106. {
  107. public:
  108. virtual void describe(Description& desc) const
  109. {
  110. desc.shortInfo("Manipulate a single runtime-override option.");
  111. desc.getAPI();
  112. desc.putAPI();
  113. desc.delAPI();
  114. desc.source(__FILE__, __LINE__);
  115. }
  116.     
  117. virtual bool validate(const std::string& name, LLSD& context) const
  118. {
  119. //llinfos << "validate: " << name << ", "
  120. // << LLSDOStreamer<LLSDNotationFormatter>(context) << llendl;
  121. if((std::string("PUT") == context["request"]["verb"].asString()) && !name.empty())
  122. {
  123. return true;
  124. }
  125. else
  126. {
  127. // This is for GET and DELETE
  128. LLSD options = LLApp::instance()->getOptionData(
  129. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  130. if(options.has(name)) return true;
  131. else return false;
  132. }
  133. }
  134. virtual void get(
  135. LLHTTPNode::ResponsePtr response,
  136. const LLSD& context) const
  137. {
  138. std::string name = context["request"]["wildcard"]["option-name"];
  139. LLSD options = LLApp::instance()->getOptionData(
  140. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  141. response->result(options[name]);
  142. }
  143. virtual void put(
  144. LLHTTPNode::ResponsePtr response,
  145. const LLSD& context,
  146. const LLSD& input) const
  147. {
  148. std::string name = context["request"]["wildcard"]["option-name"];
  149. LLSD options = LLApp::instance()->getOptionData(
  150. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  151. options[name] = input;
  152. LLApp::instance()->setOptionData(
  153. LLApp::PRIORITY_RUNTIME_OVERRIDE,
  154. options);
  155. response->result(input);
  156. }
  157. virtual void del(
  158. LLHTTPNode::ResponsePtr response,
  159. const LLSD& context) const
  160. {
  161. std::string name = context["request"]["wildcard"]["option-name"];
  162. LLSD options = LLApp::instance()->getOptionData(
  163. LLApp::PRIORITY_RUNTIME_OVERRIDE);
  164. options.erase(name);
  165. LLApp::instance()->setOptionData(
  166. LLApp::PRIORITY_RUNTIME_OVERRIDE,
  167. options);
  168. response->result(LLSD());
  169. }
  170. };
  171. LLHTTPRegistration<LLHTTPConfigRuntimeSingleService>
  172. gHTTPRegistrationRuntimeSingleConfig(
  173. "/app/config/runtime-override/<option-name>");
  174. template<int PRIORITY>
  175. class LLHTTPConfigPriorityService : public LLHTTPNode
  176. {
  177. public:
  178. virtual void describe(Description& desc) const
  179. {
  180. desc.shortInfo("Get a map of the options at this priority.");
  181. desc.getAPI();
  182. desc.source(__FILE__, __LINE__);
  183. }
  184. virtual void get(
  185. LLHTTPNode::ResponsePtr response,
  186. const LLSD& context) const
  187. {
  188. response->result(LLApp::instance()->getOptionData(
  189. (LLApp::OptionPriority)PRIORITY));
  190. }
  191. };
  192. LLHTTPRegistration< LLHTTPConfigPriorityService<LLApp::PRIORITY_COMMAND_LINE> >
  193. gHTTPRegistrationCommandLineConfig("/app/config/command-line");
  194. LLHTTPRegistration<
  195. LLHTTPConfigPriorityService<LLApp::PRIORITY_SPECIFIC_CONFIGURATION> >
  196. gHTTPRegistrationSpecificConfig("/app/config/specific");
  197. LLHTTPRegistration<
  198. LLHTTPConfigPriorityService<LLApp::PRIORITY_GENERAL_CONFIGURATION> >
  199. gHTTPRegistrationGeneralConfig("/app/config/general");
  200. LLHTTPRegistration< LLHTTPConfigPriorityService<LLApp::PRIORITY_DEFAULT> >
  201. gHTTPRegistrationDefaultConfig("/app/config/default");
  202. class LLHTTPLiveConfigService : public LLHTTPNode
  203. {
  204. public:
  205. virtual void describe(Description& desc) const
  206. {
  207. desc.shortInfo("Get a map of the currently live options.");
  208. desc.getAPI();
  209. desc.source(__FILE__, __LINE__);
  210. }
  211. virtual void get(
  212. LLHTTPNode::ResponsePtr response,
  213. const LLSD& context) const
  214. {
  215. LLSD result;
  216. LLApp* app = LLApp::instance();
  217. LLSD::map_const_iterator iter;
  218. LLSD::map_const_iterator end;
  219. for(int ii = LLApp::PRIORITY_COUNT - 1; ii >= 0; --ii)
  220. {
  221. LLSD options = app->getOptionData((LLApp::OptionPriority)ii);
  222. iter = options.beginMap();
  223. end = options.endMap();
  224. for(; iter != end; ++iter)
  225. {
  226. result[(*iter).first] = (*iter).second;
  227. }
  228. }
  229. response->result(result);
  230. }
  231. };
  232. LLHTTPRegistration<LLHTTPLiveConfigService>
  233. gHTTPRegistrationLiveConfig("/app/config/live");
  234. class LLHTTPLiveConfigSingleService : public LLHTTPNode
  235. {
  236. public:
  237. virtual void describe(Description& desc) const
  238. {
  239. desc.shortInfo("Get the named live option.");
  240. desc.getAPI();
  241. desc.source(__FILE__, __LINE__);
  242. }
  243. virtual bool validate(const std::string& name, LLSD& context) const
  244. {
  245. llinfos << "LLHTTPLiveConfigSingleService::validate(" << name
  246. << ")" << llendl;
  247. LLSD option = LLApp::instance()->getOption(name);
  248. if(option.isDefined()) return true;
  249. else return false;
  250. }
  251. virtual void get(
  252. LLHTTPNode::ResponsePtr response,
  253. const LLSD& context) const
  254. {
  255. std::string name = context["request"]["wildcard"]["option-name"];
  256. response->result(LLApp::instance()->getOption(name));
  257. }
  258. };
  259. LLHTTPRegistration<LLHTTPLiveConfigSingleService>
  260. gHTTPRegistrationLiveSingleConfig("/app/config/live/<option-name>");