Difference between revisions of "URL REQUEST GRANTED"

From Second Life Wiki
Jump to: navigation, search
m
(added example script)
Line 7: Line 7:
 
{{LSL DefineRow||[[URL_REQUEST_DENIED]]|}}
 
{{LSL DefineRow||[[URL_REQUEST_DENIED]]|}}
 
|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:
 +
<lsl>
 +
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],
 +
                                "");
 +
    }
 +
}
 +
</lsl>
 
|functions=
 
|functions=
 
|events=
 
|events=

Revision as of 10:22, 8 October 2012

Description

Constant: string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";

The string constant URL_REQUEST_GRANTED has the value "URL_REQUEST_GRANTED"

Related Articles

Constants

•  URL_REQUEST_DENIED

Events

•  http_request

Examples

KBcaution.png 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: <lsl> 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

Deep Notes

History

Search JIRA for related Issues

Signature

string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";