
| Key: |
SVC-3348
|
| Type: |
Bug
|
| Status: |
Closed
|
| Resolution: |
Cannot Reproduce
|
| Priority: |
Major
|
| Assignee: |
Unassigned
|
| Reporter: |
Darien Caldwell
|
| Votes: |
1
|
| Watchers: |
1
|
|
If you were logged in you would be able to see more operations.
|
|
|
In the design documents here ( http://wiki.secondlife.com/wiki/LSL_http_server ), it states that "Size of the body of the requests will be limited to 2k bytes"
However I'm finding that the body is in fact limited to 1k byes due to the use of the LSL string type. LSL strings can not hold more than 1024 bytes.
Reproduction:
////////////////////////////////////////////////////////////////////////////////////////////////
Server
//////////////////////////////////////////////////////////////////////////////////////////////
key p;
string URL;
default
{
state_entry()
{
p=llRequestURL();
}
http_request(key id, string method, string body)
{
llOwnerSay("Key is:"+(string)id);
if (method == URL_REQUEST_GRANTED)
{
llOwnerSay("URL :" + body);
URL=body;
}
else if (method == URL_REQUEST_DENIED)
{
llOwnerSay("Something went wrong, no url. " + body);
}
else if (method == "POST")
{
llHTTPResponse(id,200,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse ultrices, felis nec volutpat sagittis, magna sapien sollicitudin pede, sed auctor augue quam sed odio. Fusce lacinia ipsum. In sit amet mi. Vivamus vitae neque non ligula imperdiet lacinia. Nullam ac ante. Nam euismod justo id mi. Nullam mollis neque vitae dolor. Proin malesuada nisl non lectus. Proin sed dolor nec nulla sodales semper. Nulla ut libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ornare. Maecenas vehicula ipsum vitae ligula. Aliquam laoreet turpis in purus. Sed aliquam, augue non interdum tristique, felis magna vestibulum mi, pulvinar porttitor tortor turpis sed enim. Aliquam sed eros. Vestibulum eu mauris vel felis euismod ornare. Ut velit ipsum, convallis vitae, semper quis, tempus vitae, magna. In fringilla ultricies turpis. Donec cursus eros vel nisi.
Nam tortor. Ut sapien. Maecenas sed nisi. Pellentesque viverra dictum dui. Duis lobortis velit ac dolor. Fusce nec massa. Donec vel dolor vitae quam tristique imperdiet. Nullam fringilla. Proin fermentum neque in tellus. Phasellus nec lectus mollis lectus ultricies tincidunt. Praesent velit massa, cursus nec, laoreet sed, sodales a, arcu. Donec dolor. Sed ac mi. Nunc id augue. Suspendisse gravida, ante sit amet varius vestibulum, nulla nunc iaculis justo, sit amet lobortis nulla elit at eros. In accumsan ornare est.
Ut ante. Nam ornare neque vitae nisl congue malesuada. Vestibulum sit amet enim vitae eros mollis suscipit. Praesent ipsum velit, fringilla in, mattis eu, commodo et, nisl. Nunc rhoncus eros id nulla. Nulla enim justo, sagittis id, molestie non, ultrices in, magna. Praesent et leo vitae odio aliquam pellentesque. Aliquam justo risus, ultricies eget, tempus sit amet, convallis et, ipsum. Suspendisse sem. In non lorem. Nunc ultrices, libero non iaculis ultricies, est ligula blandit quam, vitae volutpat odio risus quis arcu. Nam orci elit, lobortis id, pretium ut, gravida et, justo. In fringilla rhoncus neque nullam.");
}
}
}
///////////////////////////////////////////////////////////////////////////////
Client
/////////////////////////////////////////////////////////////////////////////
string URL="PASTE THE URL THE SERVER PROVIDES HERE";
key requestid;
default
{
touch_start(integer total_number)
{
requestid = llHTTPRequest(URL,[HTTP_METHOD, "POST",HTTP_MIMETYPE, "application/x-www-form-urlencoded"],"reg_id=request");
}
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == requestid)
{
llOwnerSay( "Web server said: " + body);
}
}
}
The Lorem Ipsum text above is exactly 2K of text. You will note only half is transmitted.
I as well tried to concatenate two strings together and transmit that way, however that also failed, no doubt because the function parameter is still a single string:
llHTTPResponse(id,200,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse ultrices, felis nec volutpat sagittis, magna sapien sollicitudin pede, sed auctor augue quam sed odio. Fusce lacinia ipsum. In sit amet mi. Vivamus vitae neque non ligula imperdiet lacinia. Nullam ac ante. Nam euismod justo id mi. Nullam mollis neque vitae dolor. Proin malesuada nisl non lectus. Proin sed dolor nec nulla sodales semper. Nulla ut libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ornare. Maecenas vehicula ipsum vitae ligula. Aliquam laoreet turpis in purus. Sed aliquam, augue non interdum tristique, felis magna vestibulum mi, pulvinar porttitor tortor turpis sed enim. Aliquam sed eros. Vestibulum eu mauris vel felis euismod ornare. Ut velit ipsum, convallis vitae, semper quis, tempus vitae, magna. In fringilla ultricies turpis. Donec cursus eros vel nisi.
Nam tortor. Ut sapien. Maecenas sed nisi. Pellentesque viverra dictum dui. Duis lobortis velit ac d"+"olor. Fusce nec massa. Donec vel dolor vitae quam tristique imperdiet. Nullam fringilla. Proin fermentum neque in tellus. Phasellus nec lectus mollis lectus ultricies tincidunt. Praesent velit massa, cursus nec, laoreet sed, sodales a, arcu. Donec dolor. Sed ac mi. Nunc id augue. Suspendisse gravida, ante sit amet varius vestibulum, nulla nunc iaculis justo, sit amet lobortis nulla elit at eros. In accumsan ornare est.
Ut ante. Nam ornare neque vitae nisl congue malesuada. Vestibulum sit amet enim vitae eros mollis suscipit. Praesent ipsum velit, fringilla in, mattis eu, commodo et, nisl. Nunc rhoncus eros id nulla. Nulla enim justo, sagittis id, molestie non, ultrices in, magna. Praesent et leo vitae odio aliquam pellentesque. Aliquam justo risus, ultricies eget, tempus sit amet, convallis et, ipsum. Suspendisse sem. In non lorem. Nunc ultrices, libero non iaculis ultricies, est ligula blandit quam, vitae volutpat odio risus quis arcu. Nam orci elit, lobortis id, pretium ut, gravida et, justo. In fringilla rhoncus neque nullam.");
Given the limitations of LSL data types, the only reasonable solutions I can see would be to reduce max body size to 1024 byes or add a second body parameter which is concatenated on the server side before sending to the client. :| Or possibly use a List to as the datatype with each element in the list being concatenated as long as their sum is less than 2048 bytes. (this would actually be kind of useful) 
|
|
Description
|
In the design documents here ( http://wiki.secondlife.com/wiki/LSL_http_server ), it states that "Size of the body of the requests will be limited to 2k bytes"
However I'm finding that the body is in fact limited to 1k byes due to the use of the LSL string type. LSL strings can not hold more than 1024 bytes.
Reproduction:
////////////////////////////////////////////////////////////////////////////////////////////////
Server
//////////////////////////////////////////////////////////////////////////////////////////////
key p;
string URL;
default
{
state_entry()
{
p=llRequestURL();
}
http_request(key id, string method, string body)
{
llOwnerSay("Key is:"+(string)id);
if (method == URL_REQUEST_GRANTED)
{
llOwnerSay("URL :" + body);
URL=body;
}
else if (method == URL_REQUEST_DENIED)
{
llOwnerSay("Something went wrong, no url. " + body);
}
else if (method == "POST")
{
llHTTPResponse(id,200,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse ultrices, felis nec volutpat sagittis, magna sapien sollicitudin pede, sed auctor augue quam sed odio. Fusce lacinia ipsum. In sit amet mi. Vivamus vitae neque non ligula imperdiet lacinia. Nullam ac ante. Nam euismod justo id mi. Nullam mollis neque vitae dolor. Proin malesuada nisl non lectus. Proin sed dolor nec nulla sodales semper. Nulla ut libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ornare. Maecenas vehicula ipsum vitae ligula. Aliquam laoreet turpis in purus. Sed aliquam, augue non interdum tristique, felis magna vestibulum mi, pulvinar porttitor tortor turpis sed enim. Aliquam sed eros. Vestibulum eu mauris vel felis euismod ornare. Ut velit ipsum, convallis vitae, semper quis, tempus vitae, magna. In fringilla ultricies turpis. Donec cursus eros vel nisi.
Nam tortor. Ut sapien. Maecenas sed nisi. Pellentesque viverra dictum dui. Duis lobortis velit ac dolor. Fusce nec massa. Donec vel dolor vitae quam tristique imperdiet. Nullam fringilla. Proin fermentum neque in tellus. Phasellus nec lectus mollis lectus ultricies tincidunt. Praesent velit massa, cursus nec, laoreet sed, sodales a, arcu. Donec dolor. Sed ac mi. Nunc id augue. Suspendisse gravida, ante sit amet varius vestibulum, nulla nunc iaculis justo, sit amet lobortis nulla elit at eros. In accumsan ornare est.
Ut ante. Nam ornare neque vitae nisl congue malesuada. Vestibulum sit amet enim vitae eros mollis suscipit. Praesent ipsum velit, fringilla in, mattis eu, commodo et, nisl. Nunc rhoncus eros id nulla. Nulla enim justo, sagittis id, molestie non, ultrices in, magna. Praesent et leo vitae odio aliquam pellentesque. Aliquam justo risus, ultricies eget, tempus sit amet, convallis et, ipsum. Suspendisse sem. In non lorem. Nunc ultrices, libero non iaculis ultricies, est ligula blandit quam, vitae volutpat odio risus quis arcu. Nam orci elit, lobortis id, pretium ut, gravida et, justo. In fringilla rhoncus neque nullam.");
}
}
}
///////////////////////////////////////////////////////////////////////////////
Client
/////////////////////////////////////////////////////////////////////////////
string URL="PASTE THE URL THE SERVER PROVIDES HERE";
key requestid;
default
{
touch_start(integer total_number)
{
requestid = llHTTPRequest(URL,[HTTP_METHOD, "POST",HTTP_MIMETYPE, "application/x-www-form-urlencoded"],"reg_id=request");
}
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == requestid)
{
llOwnerSay( "Web server said: " + body);
}
}
}
The Lorem Ipsum text above is exactly 2K of text. You will note only half is transmitted.
I as well tried to concatenate two strings together and transmit that way, however that also failed, no doubt because the function parameter is still a single string:
llHTTPResponse(id,200,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse ultrices, felis nec volutpat sagittis, magna sapien sollicitudin pede, sed auctor augue quam sed odio. Fusce lacinia ipsum. In sit amet mi. Vivamus vitae neque non ligula imperdiet lacinia. Nullam ac ante. Nam euismod justo id mi. Nullam mollis neque vitae dolor. Proin malesuada nisl non lectus. Proin sed dolor nec nulla sodales semper. Nulla ut libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ornare. Maecenas vehicula ipsum vitae ligula. Aliquam laoreet turpis in purus. Sed aliquam, augue non interdum tristique, felis magna vestibulum mi, pulvinar porttitor tortor turpis sed enim. Aliquam sed eros. Vestibulum eu mauris vel felis euismod ornare. Ut velit ipsum, convallis vitae, semper quis, tempus vitae, magna. In fringilla ultricies turpis. Donec cursus eros vel nisi.
Nam tortor. Ut sapien. Maecenas sed nisi. Pellentesque viverra dictum dui. Duis lobortis velit ac d"+"olor. Fusce nec massa. Donec vel dolor vitae quam tristique imperdiet. Nullam fringilla. Proin fermentum neque in tellus. Phasellus nec lectus mollis lectus ultricies tincidunt. Praesent velit massa, cursus nec, laoreet sed, sodales a, arcu. Donec dolor. Sed ac mi. Nunc id augue. Suspendisse gravida, ante sit amet varius vestibulum, nulla nunc iaculis justo, sit amet lobortis nulla elit at eros. In accumsan ornare est.
Ut ante. Nam ornare neque vitae nisl congue malesuada. Vestibulum sit amet enim vitae eros mollis suscipit. Praesent ipsum velit, fringilla in, mattis eu, commodo et, nisl. Nunc rhoncus eros id nulla. Nulla enim justo, sagittis id, molestie non, ultrices in, magna. Praesent et leo vitae odio aliquam pellentesque. Aliquam justo risus, ultricies eget, tempus sit amet, convallis et, ipsum. Suspendisse sem. In non lorem. Nunc ultrices, libero non iaculis ultricies, est ligula blandit quam, vitae volutpat odio risus quis arcu. Nam orci elit, lobortis id, pretium ut, gravida et, justo. In fringilla rhoncus neque nullam.");
Given the limitations of LSL data types, the only reasonable solutions I can see would be to reduce max body size to 1024 byes  or add a second body parameter which is concatenated on the server side before sending to the client. :| Or possibly use a List to as the datatype with each element in the list being concatenated as long as their sum is less than 2048 bytes. (this would actually be kind of useful)
|
Show » |
|
There is a limit on the length of any one chat line (via llsay, llshout, llwhisper or llownersay), and llHTTPRequest has its own limits. If you use an external method such as curl to post or put data, you should be able to do 2k bytes. I have been able to in my tests.
Also important - that limitation is on the incoming body to http_request, not on what is returned via llHTTPResponse.