Difference between revisions of "LlReleaseURL"

From Second Life Wiki
Jump to navigation Jump to search
(I've changed the script as suggested on the talk page, the reason for rebooting the script is to avoid race conditions that might arise if the change event happens in quick succession.)
(Added information about URL auto release in certain circumstances)
 
(2 intermediate revisions by 2 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.}}
{{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.}}
<lsl>
<source lang="lsl2">
string url;
string url;
key urlRequestId;
key urlRequestId;
Line 103: Line 106:
     }
     }
}
}
</lsl>
</source>
|helpers
|helpers
|mode=
|mode=

Latest revision as of 14:14, 9 September 2015

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

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.
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

Deep Notes

History

Signature

function void llReleaseURL( string url );