summaryrefslogtreecommitdiff
path: root/indra/lscript/lscript_execute
diff options
context:
space:
mode:
authorKelly Washington <kelly@lindenlab.com>2009-02-24 19:29:36 +0000
committerKelly Washington <kelly@lindenlab.com>2009-02-24 19:29:36 +0000
commitaa2b978bf59dd74083bec86c61a29fefb4ebb14c (patch)
tree63d0e55a524208eb2bdad1a1a6f0d03af1b39de2 /indra/lscript/lscript_execute
parentf5242719b628efb148f05ba44ce78f9818ec617a (diff)
merge -r 112783:112799 linden/branches/kelly/lsl-http-in-merge to linden/trunk
Diffstat (limited to 'indra/lscript/lscript_execute')
-rw-r--r--indra/lscript/lscript_execute/CMakeLists.txt6
-rw-r--r--indra/lscript/lscript_execute/llscriptresource.cpp86
-rw-r--r--indra/lscript/lscript_execute/llscriptresourceconsumer.cpp101
-rw-r--r--indra/lscript/lscript_execute/llscriptresourcepool.cpp39
-rw-r--r--indra/lscript/lscript_execute/lscript_execute.cpp6
-rw-r--r--indra/lscript/lscript_execute/lscript_readlso.cpp10
6 files changed, 248 insertions, 0 deletions
diff --git a/indra/lscript/lscript_execute/CMakeLists.txt b/indra/lscript/lscript_execute/CMakeLists.txt
index f30915bab0..3a16ffdc01 100644
--- a/indra/lscript/lscript_execute/CMakeLists.txt
+++ b/indra/lscript/lscript_execute/CMakeLists.txt
@@ -12,6 +12,9 @@ include_directories(
)
set(lscript_execute_SOURCE_FILES
+ llscriptresource.cpp
+ llscriptresourceconsumer.cpp
+ llscriptresourcepool.cpp
lscript_execute.cpp
lscript_heapruntime.cpp
lscript_readlso.cpp
@@ -20,6 +23,9 @@ set(lscript_execute_SOURCE_FILES
set(lscript_execute_HEADER_FILES
CMakeLists.txt
+ ../llscriptresource.h
+ ../llscriptresourceconsumer.h
+ ../llscriptresourcepool.h
../lscript_execute.h
../lscript_rt_interface.h
lscript_heapruntime.h
diff --git a/indra/lscript/lscript_execute/llscriptresource.cpp b/indra/lscript/lscript_execute/llscriptresource.cpp
new file mode 100644
index 0000000000..cc802987b9
--- /dev/null
+++ b/indra/lscript/lscript_execute/llscriptresource.cpp
@@ -0,0 +1,86 @@
+/**
+ * @file llscriptresource.cpp
+ * @brief LLScriptResource class implementation for managing limited resources
+ *
+ * $LicenseInfo:firstyear=2008&license=internal$
+ *
+ * Copyright (c) 2008, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llscriptresource.h"
+#include "llerror.h"
+
+LLScriptResource::LLScriptResource()
+: mTotal(0),
+ mUsed(0)
+{
+}
+
+bool LLScriptResource::request(S32 amount /* = 1 */)
+{
+ if (mUsed + amount <= mTotal)
+ {
+ mUsed += amount;
+ return true;
+ }
+
+ return false;
+}
+
+bool LLScriptResource::release(S32 amount /* = 1 */)
+{
+ if (mUsed >= amount)
+ {
+ mUsed -= amount;
+ return true;
+ }
+
+ return false;
+}
+
+S32 LLScriptResource::getAvailable() const
+{
+ if (mUsed > mTotal)
+ {
+ // It is possible after a parcel ownership change for more than total to be used
+ // In this case the user of this class just wants to know
+ // whether or not they can use a resource
+ return 0;
+ }
+ return (mTotal - mUsed);
+}
+
+void LLScriptResource::setTotal(S32 amount)
+{
+ // This may cause this resource to be over spent
+ // such that more are in use than total allowed
+ // Until those resources are released getAvailable will return 0.
+ mTotal = amount;
+}
+
+S32 LLScriptResource::getTotal() const
+{
+ return mTotal;
+}
+
+S32 LLScriptResource::getUsed() const
+{
+ return mUsed;
+}
+
+bool LLScriptResource::isOverLimit() const
+{
+ return (mUsed > mTotal);
+}
diff --git a/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp b/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp
new file mode 100644
index 0000000000..6a5b28e257
--- /dev/null
+++ b/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp
@@ -0,0 +1,101 @@
+/**
+ * @file llscriptresourceconsumer.cpp
+ * @brief An interface for a script resource consumer.
+ *
+ * $LicenseInfo:firstyear=2008&license=internal$
+ *
+ * Copyright (c) 2008, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llscriptresourceconsumer.h"
+
+#include "llscriptresourcepool.h"
+
+LLScriptResourceConsumer::LLScriptResourceConsumer()
+ : mScriptResourcePool(&LLScriptResourcePool::null)
+{ }
+
+// Get the resource pool this consumer is currently using.
+// virtual
+LLScriptResourcePool& LLScriptResourceConsumer::getScriptResourcePool()
+{
+ return *mScriptResourcePool;
+}
+
+// Get the resource pool this consumer is currently using.
+// virtual
+const LLScriptResourcePool& LLScriptResourceConsumer::getScriptResourcePool() const
+{
+ return *mScriptResourcePool;
+}
+
+// virtual
+void LLScriptResourceConsumer::setScriptResourcePool(LLScriptResourcePool& new_pool)
+{
+ mScriptResourcePool = &new_pool;
+}
+
+bool LLScriptResourceConsumer::switchScriptResourcePools(LLScriptResourcePool& new_pool)
+{
+ if (&new_pool == &LLScriptResourcePool::null)
+ {
+ llwarns << "New pool is null" << llendl;
+ }
+
+ if (isInPool(new_pool))
+ {
+ return true;
+ }
+
+ if (!canUseScriptResourcePool(new_pool))
+ {
+ return false;
+ }
+
+ S32 used_urls = getUsedPublicURLs();
+
+ getScriptResourcePool().getPublicURLResource().release( used_urls );
+ setScriptResourcePool(new_pool);
+ getScriptResourcePool().getPublicURLResource().request( used_urls );
+
+ return true;
+}
+
+bool LLScriptResourceConsumer::canUseScriptResourcePool(const LLScriptResourcePool& resource_pool)
+{
+ if (isInPool(resource_pool))
+ {
+ return true;
+ }
+
+ if (resource_pool.getPublicURLResource().getAvailable() < getUsedPublicURLs())
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool LLScriptResourceConsumer::isInPool(const LLScriptResourcePool& resource_pool)
+{
+ const LLScriptResourcePool& current_pool = getScriptResourcePool();
+ if ( &resource_pool == &current_pool )
+ {
+ // This consumer is already in this pool
+ return true;
+ }
+ return false;
+}
+
diff --git a/indra/lscript/lscript_execute/llscriptresourcepool.cpp b/indra/lscript/lscript_execute/llscriptresourcepool.cpp
new file mode 100644
index 0000000000..2ec67c87dd
--- /dev/null
+++ b/indra/lscript/lscript_execute/llscriptresourcepool.cpp
@@ -0,0 +1,39 @@
+/**
+ * @file llscriptresourcepool.cpp
+ * @brief Collection of limited script resources
+ *
+ * $LicenseInfo:firstyear=2002&license=internal$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
+ * this source code is governed by the Linden Lab Source Code Disclosure
+ * Agreement ("Agreement") previously entered between you and Linden
+ * Lab. By accessing, using, copying, modifying or distributing this
+ * software, you acknowledge that you have been informed of your
+ * obligations under the Agreement and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llscriptresourcepool.h"
+
+LLScriptResourcePool LLScriptResourcePool::null;
+
+LLScriptResourcePool::LLScriptResourcePool()
+{
+
+}
+
+LLScriptResource& LLScriptResourcePool::getPublicURLResource()
+{
+ return mLSLPublicURLs;
+}
+
+const LLScriptResource& LLScriptResourcePool::getPublicURLResource() const
+{
+ return mLSLPublicURLs;
+}
diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp
index daa17f371c..b2b54cdd7a 100644
--- a/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -68,6 +68,12 @@ const char* LSCRIPTRunTimeFaultStrings[LSRF_EOF] = /*Flawfinder: ignore*/
void LLScriptExecuteLSL2::startRunning() {}
void LLScriptExecuteLSL2::stopRunning() {}
+const char* URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";
+const char* URL_REQUEST_DENIED = "URL_REQUEST_DENIED";
+
+// HTTP Requests to LSL scripts will time out after 25 seconds.
+const U64 LSL_HTTP_REQUEST_TIMEOUT = 25 * USEC_PER_SEC;
+
LLScriptExecuteLSL2::LLScriptExecuteLSL2(LLFILE *fp)
{
U8 sizearray[4];
diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp
index f45e64e5de..3b10cc67c1 100644
--- a/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -625,6 +625,16 @@ void LLScriptLSOParse::printStates(LLFILE *fp)
bytestream2char(name, mRawData, event_offset, sizeof(name));
fprintf(fp, "\t\tstring %s\n", name);
break;
+ case LSTT_HTTP_REQUEST: // LSTT_HTTP_REQUEST
+ bytestream2char(name, mRawData, event_offset, sizeof(name));
+ fprintf(fp, "%s\n", name);
+ bytestream2char(name, mRawData, event_offset, sizeof(name));
+ fprintf(fp, "\t\tkey %s\n", name);
+ bytestream2char(name, mRawData, event_offset, sizeof(name));
+ fprintf(fp, "\t\tstring %s\n", name);
+ bytestream2char(name, mRawData, event_offset, sizeof(name));
+ fprintf(fp, "\t\tstring %s\n", name);
+ break;
default:
break;
}