Difference between revisions of "URL REQUEST DENIED"
Jump to navigation
Jump to search
m |
m (<lsl> tag to <source>) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 7: | Line 7: | ||
{{LSL DefineRow||[[URL_REQUEST_GRANTED]]|}} | {{LSL DefineRow||[[URL_REQUEST_GRANTED]]|}} | ||
|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.}} | |||
This script requests a new URL after region restart: | |||
<source lang="lsl2"> | |||
string url; | |||
key urlRequestId; | |||
key selfCheckRequestId; | |||
request_url() | |||
{ | |||
llReleaseURL(url); | |||
url = ""; | |||
urlRequestId = llRequestURL(); | |||
} | |||
throw_exception(string inputString) | |||
{ | |||
key owner = llGetOwner(); | |||
llInstantMessage(owner, 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_INVENTORY)) | |||
{ | |||
llReleaseURL(url); | |||
url = ""; | |||
llResetScript(); | |||
} | |||
if (change & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT)) | |||
request_url(); | |||
} | |||
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; | |||
key owner = llGetOwner(); | |||
llLoadURL(owner, "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], | |||
""); | |||
} | |||
} | |||
</source> | |||
|functions= | |functions= | ||
|events= | |events= | ||
Line 12: | Line 119: | ||
|history= | |history= | ||
*{{SVN|1836|rev=112899 |trunk=*|anchor=file15|ver=|ser=}} | *{{SVN|1836|rev=112899 |trunk=*|anchor=file15|ver=|ser=}} | ||
|cat1=HTTP | |cat1=HTTP/Server | ||
|cat2 | |cat2 | ||
|cat3 | |cat3 | ||
|cat4 | |cat4 | ||
}} | }} |
Latest revision as of 16:26, 23 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Description
Constant: string URL_REQUEST_DENIED = "URL_REQUEST_DENIED";The string constant URL_REQUEST_DENIED has the value "URL_REQUEST_DENIED"
Caveats
Related Articles
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. |
This script requests a new URL after region restart:
string url;
key urlRequestId;
key selfCheckRequestId;
request_url()
{
llReleaseURL(url);
url = "";
urlRequestId = llRequestURL();
}
throw_exception(string inputString)
{
key owner = llGetOwner();
llInstantMessage(owner, 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_INVENTORY))
{
llReleaseURL(url);
url = "";
llResetScript();
}
if (change & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT))
request_url();
}
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;
key owner = llGetOwner();
llLoadURL(owner, "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],
"");
}
}