Difference between revisions of "LlReleaseURL"
Jump to navigation
Jump to search
Kireji Haiku (talk | contribs) m (added example) |
(Added information about URL auto release in certain circumstances) |
||
(5 intermediate revisions by 4 users not shown) | |||
Line 7: | Line 7: | ||
|return_text | |return_text | ||
|spec | |spec | ||
|caveats | |caveats=*URLs are automatically released and invalidated in certain situations. In the following situations, there is no need to call llReleaseURL. But you will have to request a new one afterwards | ||
**When the region is restarted or goes offline | |||
**When the script holding the URLs is reset, or recompiled | |||
**When the object containing the script is deleted, or taken to inventory | |||
|constants | |constants | ||
|examples= | |examples= | ||
< | {{LSL Tip|Never ever forget to release a URL again which you have requested! URLs are region resources just like prims. If you take them all you can get into big trouble with the sim owner and/or estate managers.}} | ||
<source lang="lsl2"> | |||
string url; | string url; | ||
key urlRequestId; | key urlRequestId; | ||
Line 19: | Line 23: | ||
llReleaseURL(url); | llReleaseURL(url); | ||
url = ""; | url = ""; | ||
llSetTimerEvent(0.0); | |||
urlRequestId = llRequestURL(); | urlRequestId = llRequestURL(); | ||
} | } | ||
Line 25: | Line 29: | ||
throw_exception(string inputString) | throw_exception(string inputString) | ||
{ | { | ||
llInstantMessage(llGetOwner(), inputString); | |||
// yeah, bad way to handle exceptions by restarting. | // yeah, bad way to handle exceptions by restarting. | ||
Line 43: | Line 46: | ||
changed(integer change) | changed(integer change) | ||
{ | { | ||
if (change & | if (change & CHANGED_OWNER | CHANGED_REGION | CHANGED_REGION_START) | ||
llResetScript(); | llResetScript(); | ||
} | } | ||
Line 67: | Line 62: | ||
if (method == URL_REQUEST_DENIED) | if (method == URL_REQUEST_DENIED) | ||
throw_exception("The following error occurred while attempting to get a free URL for this device:\n \n" + body); | throw_exception("The following error occurred while attempting to get a free URL for this device:\n \n" + body); | ||
else if (method == URL_REQUEST_GRANTED) | else if (method == URL_REQUEST_GRANTED) | ||
{ | { | ||
url = body; | |||
llLoadURL( | llLoadURL(llGetOwner(), "Click to visit my URL!", url); | ||
// check every 5 mins for dropped URL | // check every 5 mins for dropped URL | ||
Line 99: | Line 93: | ||
request_url(); | request_url(); | ||
} | } | ||
else if (id == NULL_KEY) | else if (id == NULL_KEY) | ||
throw_exception("Too many HTTP requests too fast!"); | throw_exception("Too many HTTP requests too fast!"); | ||
Line 113: | Line 106: | ||
} | } | ||
} | } | ||
</ | </source> | ||
|helpers | |helpers | ||
|mode= | |mode= |
Latest revision as of 14:14, 9 September 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llReleaseURL( string url );0.0 | Forced Delay |
10.0 | Energy |
Releases the specified URL, it will no longer be usable.
• string | url | – | URL to release |
Caveats
- URLs are automatically released and invalidated in certain situations. In the following situations, there is no need to call llReleaseURL. But you will have to request a new one afterwards
- When the region is restarted or goes offline
- When the script holding the URLs is reset, or recompiled
- When the object containing the script is deleted, or taken to inventory
Examples
Important: Never ever forget to release a URL again which you have requested! URLs are region resources just like prims. If you take them all you can get into big trouble with the sim owner and/or estate managers. |
string url;
key urlRequestId;
key selfCheckRequestId;
request_url()
{
llReleaseURL(url);
url = "";
llSetTimerEvent(0.0);
urlRequestId = llRequestURL();
}
throw_exception(string inputString)
{
llInstantMessage(llGetOwner(), inputString);
// yeah, bad way to handle exceptions by restarting.
// However this is just a demo script...
llResetScript();
}
default
{
on_rez(integer start_param)
{
llResetScript();
}
changed(integer change)
{
if (change & CHANGED_OWNER | CHANGED_REGION | CHANGED_REGION_START)
llResetScript();
}
state_entry()
{
request_url();
}
http_request(key id, string method, string body)
{
integer responseStatus = 400;
string responseBody = "Unsupported method";
if (method == URL_REQUEST_DENIED)
throw_exception("The following error occurred while attempting to get a free URL for this device:\n \n" + body);
else if (method == URL_REQUEST_GRANTED)
{
url = body;
llLoadURL(llGetOwner(), "Click to visit my URL!", url);
// check every 5 mins for dropped URL
llSetTimerEvent(300.0);
}
else if (method == "GET")
{
responseStatus = 200;
responseBody = "Hello world!";
}
// else if (method == "POST") ...;
// else if (method == "PUT") ...;
// else if (method == "DELETE") { responseStatus = 403; responseBody = "forbidden"; }
llHTTPResponse(id, responseStatus, responseBody);
}
http_response(key id, integer status, list metaData, string body)
{
if (id == selfCheckRequestId)
{
// If you're not usually doing this,
// now is a good time to get used to doing it!
selfCheckRequestId = NULL_KEY;
if (status != 200)
request_url();
}
else if (id == NULL_KEY)
throw_exception("Too many HTTP requests too fast!");
}
timer()
{
selfCheckRequestId = llHTTPRequest(url,
[HTTP_METHOD, "GET",
HTTP_VERBOSE_THROTTLE, FALSE,
HTTP_BODY_MAXLENGTH, 16384],
"");
}
}
See Also
Functions
• | llRequestURL | |||
• | llRequestSecureURL | |||
• | llGetFreeURLs | |||
• | llHTTPResponse | |||
• | llGetHTTPHeader |
Articles
• | LSL http server |