Difference between revisions of "LlRequestURL"

From Second Life Wiki
Jump to navigation Jump to search
(I agree, not necessary.)
(BUG-3813)
Line 1: Line 1:
{{LSL_Function
{{LSL_Function
|inject-2={{Issues/BUG-3813}}
|func_id=345|func_sleep=0.0|func_energy=10.0|mode
|func_id=345|func_sleep=0.0|func_energy=10.0|mode
|func=llRequestURL|return_type=key
|func=llRequestURL|return_type=key
Line 10: Line 11:
*The number of available URLs is a limited resource, that is to say, a script can only have so many open URLs. See [[LSL http_server#Resource Limitations]] for details.
*The number of available URLs is a limited resource, that is to say, a script can only have so many open URLs. See [[LSL http_server#Resource Limitations]] for details.
*When abandoning a URL, always release it with [[llReleaseURL]], otherwise it will leak.
*When abandoning a URL, always release it with [[llReleaseURL]], otherwise it will leak.
{{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.}}
|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.}}
This script requests a new URL after region restart:
This script requests a new URL after region restart:
<lsl>
<lsl>
Line 171: Line 172:
|also_articles=
|also_articles=
{{LSL DefineRow||[[LSL http server]]}}
{{LSL DefineRow||[[LSL http server]]}}
|notes
|notes=
{{Quote|Another comment on resilient programming: getting a global resource, an HTTP listener in this case, should always be considered an operation that can fail for transitory reasons (as well as permanent ones). In this case, LSL folds retryable and permanent errors into the same error status and there's no opportunity for a script writer to distinguish the two cases. But a reasonable way to handle this is sleeping with limited retries before failing hard in the LSL code.|2=[https://jira.secondlife.com/browse/BUG-3813?focusedCommentId=399955&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-399955 Monty Linden]}}
|deepnotes=
|deepnotes=
|history=
|history=
*{{SVN|1836|rev=112899 |trunk=*|anchor=file22|ver=|ser=}}
*{{SVN|1836|rev=112899 |trunk=*|anchor=file22|ver=|ser=}}
|comments
|cat1=HTTP
|cat1=HTTP
|cat2=HTTP/Server
|cat2=HTTP/Server

Revision as of 20:53, 26 September 2013

Summary

Function: key llRequestURL( );

Requests one HTTP:// url for use by this script. The http_request event is triggered with the result of the request.
Returns a key that is the handle used for identifying the result in the http_request event.

Caveats

  • When a region is (re)started all HTTP server URLs are automatically released and invalidated.
  • The number of available URLs is a limited resource, that is to say, a script can only have so many open URLs. See LSL http_server#Resource Limitations for details.
  • When abandoning a URL, always release it with llReleaseURL, otherwise it will leak.
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.

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   llRequestURL silently failing on simulator restart

Examples

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))
       {
           llReleaseURL(url);
           llResetScript();
       }
if (change & (CHANGED_REGION

Notes

Another comment on resilient programming: getting a global resource, an HTTP listener in this case, should always be considered an operation that can fail for transitory reasons (as well as permanent ones). In this case, LSL folds retryable and permanent errors into the same error status and there's no opportunity for a script writer to distinguish the two cases. But a reasonable way to handle this is sleeping with limited retries before failing hard in the LSL code.
Monty Linden

See Also

Functions

•  llRequestSecureURL
•  llGetFreeURLs
•  llReleaseURL
•  llHTTPResponse
•  llGetHTTPHeader

Articles

•  LSL http server

Deep Notes

History

All Issues

~ Search JIRA for related Issues
   llRequestURL silently failing on simulator restart

Signature

function key llRequestURL();