Difference between revisions of "User:Vagabond Carter"

From Second Life Wiki
Jump to navigation Jump to search
Line 16: Line 16:


Submitted as a suggestion for HTTP_IN services in the Second Life platform of Linden  
Submitted as a suggestion for HTTP_IN services in the Second Life platform of Linden  
Lab and variations thereof where another protocol is not more practical. This is Not a  
Lab and variations thereof where another protocol is not more practical. This is Not a  
secure protocol, and as such its use should not be for anything non public or  
secure protocol, and as such its use should not be for anything non public or  
restricted access. This serves well for small games, information libraries and Roleplay  
restricted access. This serves well for small games, information libraries and Roleplay  
systems.
systems.


This document and concept heavily draws on Gopher please see  
This document and concept heavily draws on Gopher please see  
 
http://en.wikipedia.org/wiki/Gopher_%28protocol%29 for more information.
http://en.wikipedia.org/wiki/Gopher_%28protocol%29
for more information.


Connection:
Connection:
This to be achieved using more or less normal llHTTPRequests. What is different is the  
This to be achieved using more or less normal llHTTPRequests. What is different is the  
way in which replies are sent.
way in which replies are sent.


Line 50: Line 43:


(code) may be one of the following single characters:
(code) may be one of the following single characters:
I - Information for display, not a command or link. Means of display is up to the  
I - Information for display, not a command or link. Means of display is up to the  
client.
client.




L - Link, the (url) and (body) will be sent by the client in llHTTPRequest((url),
L - Link, the (url) and (body) will be sent by the client in llHTTPRequest((url),
[HTTP_METHOD,"GET" ], (body)) if this option is chosen by the user. (url)may be the  
[HTTP_METHOD,"GET" ], (body)) if this option is chosen by the user. (url)may be the  
Servers own, making this self referencing or that of another server. Link responses may  
Servers own, making this self referencing or that of another server. Link responses may  
be from notecard, hard coded or dynamic just as the main menu is. It is good form, but  
be from notecard, hard coded or dynamic just as the main menu is. It is good form, but  
not required, for Link responses to include a link back to the menu that led to them.
not required, for Link responses to include a link back to the menu that led to them.




E - Execute Command,  the server at (url) should Do Something and respond appropriately  
E - Execute Command,  the server at (url) should Do Something and respond appropriately  
in its llHTTPResponse body, staying within this protocol even if the response is as  
in its llHTTPResponse body, staying within this protocol even if the response is as  
simple as "I|Command accepted||/n".(body) will be prefaced with "ACTION:" in these  
simple as "I|Command accepted||/n".(body) will be prefaced with "ACTION:" in these  
lines.
lines.




S - Send Request, the client must append + "|USER:" + (userkey) in its HTTPRequest  
S - Send Request, the client must append + "|USER:" + (userkey) in its HTTPRequest  
(body), the server at (url) is expected to send an object or notecard via  
(body), the server at (url) is expected to send an object or notecard via  
llGiveInventory to (userkey) if authorized by the server to receive it.(body) will be  
llGiveInventory to (userkey) if authorized by the server to receive it.(body) will be  
prefaced with "SEND:" in these lines.
prefaced with "SEND:" in these lines.




Q - Query, this is the only menu type that takes an argument, it is functionally  
Q - Query, this is the only menu type that takes an argument, it is functionally  
similar to Execute with the body taking the form of "QUERY:(body):ARGUMENT where the  
similar to Execute with the body taking the form of "QUERY:(body):ARGUMENT where the  
string ARGUMENT is provided by the client.
string ARGUMENT is provided by the client.


Line 107: Line 88:
"" indicates an empty string.
"" indicates an empty string.
* Note as this is a QUERY Item the client will append additional information to the  
* Note as this is a QUERY Item the client will append additional information to the  
(body) here.
(body) here.




How Alice's client displays the lines is up to her client, this could be as simple as  
How Alice's client displays the lines is up to her client, this could be as simple as  
hovertext, but Alice's client must provide her a means of selecting from the L,E,Q or S  
hovertext, but Alice's client must provide her a means of selecting from the L,E,Q or S  
options.  
options.  




Once she has made her choice the client must send the appropriate httpRequest appending  
Once she has made her choice the client must send the appropriate httpRequest appending  
as needed + "|USER:" + (userkey) to the body in S requests as well as providing  
as needed + "|USER:" + (userkey) to the body in S requests as well as providing  
ARGUMENT in Q Items.
ARGUMENT in Q Items.




URLs must be direct URLs. Given the unstable nature of HTTPin addresses, use of DNS  
URLs must be direct URLs. Given the unstable nature of HTTPin addresses, use of DNS  
Forwarding such as provided by SilverDay ObjectDNS  
Forwarding such as provided by SilverDay ObjectDNS  
(http://www.silverday.net/sqndns/index.php) and other similar services is advised.
(http://www.silverday.net/sqndns/index.php) and other similar services is advised.


Line 134: Line 108:
Extensions :
Extensions :
Servers may use additional codes, but clients may simply ignore those lines if they are  
Servers may use additional codes, but clients may simply ignore those lines if they are  
unfamiliar with them. Potential Extension codes might include; B - background texture  
unfamiliar with them. Potential Extension codes might include; B - background texture  
UUID, H - WebPage, and others.
UUID, H - WebPage, and others.


Line 143: Line 115:


Request types can be determined by parsing the (body) of the request. A blank body  
Request types can be determined by parsing the (body) of the request. A blank body  
should return root menu, probably from a notecard.
should return root menu, probably from a notecard.




L type Requests can easily be served by reading notecards contents into (body) for  
L type Requests can easily be served by reading notecards contents into (body) for  
 
llHTTPResponce, generally these will be named accordingly. e.g., L|Submenu|(url)|
llHTTPResponce, generally these will be named accoringly. e.g., L|Submenu|(url)|
 
Submenu, would have the server at (url) look for and return the contents of a notecard  
Submenu, would have the server at (url) look for and return the contents of a notecard  
named "Submenu" to the client.
named "Submenu" to the client.




E,and Q type requests can be passed on in the form of link messages to subtasks
E,and Q type requests can be passed on in the form of link messages to subtasks
(scripts), with some mechanism in place for the subtasks to offer a reply e.g.  
(scripts), with some mechanism in place for the subtasks to offer a reply e.g.  
llMessageLinked(LINK_SET,SomeControlInteger,(body),RequestID).
llMessageLinked(LINK_SET,SomeControlInteger,(body),RequestID).


S Requests will simply llGiveInventory, where allowed by permissions. It is advised  
S Requests will simply llGiveInventory, where allowed by permissions. It is advised  
that scripts Not be allowed to be sent this way.  
that scripts Not be allowed to be sent this way.  
</pre>
</pre>

Revision as of 15:15, 15 January 2012

Welcome to my userpage!

  • Host of Stark Reality on Krypton Radio.
  • LSL coder
  • CGI artist
  • Resident of Second life since 2007 SL profile : [1]

    SLRodent Protocol

    SLRodent 
    
    Submitted as a suggestion for HTTP_IN services in the Second Life platform of Linden 
    Lab and variations thereof where another protocol is not more practical. This is Not a 
    secure protocol, and as such its use should not be for anything non public or 
    restricted access. This serves well for small games, information libraries and Roleplay 
    systems.
    
    This document and concept heavily draws on Gopher please see 
    http://en.wikipedia.org/wiki/Gopher_%28protocol%29 for more information.
    
    Connection:
    This to be achieved using more or less normal llHTTPRequests. What is different is the 
    way in which replies are sent.
    
    Overview:
    
    Client sends  ==> llHTTPRequest(ServerURL,[HTTP_METHOD,"GET" ], "");
    ** REQUESTS UNDER THIS PROTOCOL SHALL BE GET METHOD ** 
    
    Server receives request, body is blank so Root menu is sent via llHTTPResponse
    Root menu may reside in a notecard in the server, be hard coded, or dynamically 
    generated.
    
    body will be /n separated lines in the following format
    (code)|(string displayed)|(url)|(body)/n
    
    Thus all 4 fields are |(pipe) separated for easy parsing.
    
    (code) may be one of the following single characters:
    
    I - Information for display, not a command or link. Means of display is up to the 
    client.
    
    
    L - Link, the (url) and (body) will be sent by the client in llHTTPRequest((url),
    [HTTP_METHOD,"GET" ], (body)) if this option is chosen by the user. (url)may be the 
    Servers own, making this self referencing or that of another server. Link responses may 
    be from notecard, hard coded or dynamic just as the main menu is. It is good form, but 
    not required, for Link responses to include a link back to the menu that led to them.
    
    
    E - Execute Command,  the server at (url) should Do Something and respond appropriately 
    in its llHTTPResponse body, staying within this protocol even if the response is as 
    simple as "I|Command accepted||/n".(body) will be prefaced with "ACTION:" in these 
    lines.
    
    
    S - Send Request, the client must append + "|USER:" + (userkey) in its HTTPRequest 
    (body), the server at (url) is expected to send an object or notecard via 
    llGiveInventory to (userkey) if authorized by the server to receive it.(body) will be 
    prefaced with "SEND:" in these lines.
    
    
    Q - Query, this is the only menu type that takes an argument, it is functionally 
    similar to Execute with the body taking the form of "QUERY:(body):ARGUMENT where the 
    string ARGUMENT is provided by the client.
    
            
    Example:
    Alice sends Bobs Server an empty GET request.
    
    Bobs Server replies with:
    I|Welcome to Bobs server|NULL|NULL
    I|Options|NULL|NULL
    L|Carols Server|(CarolsUrl)|""
    E|Read my guestbook|(bobsUrl)|ACTION:Guestbook
    Q|Sign my questbook|(bobsUrl)|ACTION:GuestSign:*  
    S|List of people who owe me L$|(bobsUrl)|SEND:owedby
    
    NULL here is a placeholder, indicating these values do not matter and should be ignored 
    
    by the client.
    "" indicates an empty string.
    * Note as this is a QUERY Item the client will append additional information to the 
    (body) here.
    
    
    How Alice's client displays the lines is up to her client, this could be as simple as 
    hovertext, but Alice's client must provide her a means of selecting from the L,E,Q or S 
    options. 
    
    
    Once she has made her choice the client must send the appropriate httpRequest appending 
    as needed + "|USER:" + (userkey) to the body in S requests as well as providing 
    ARGUMENT in Q Items.
    
    
    URLs must be direct URLs. Given the unstable nature of HTTPin addresses, use of DNS 
    Forwarding such as provided by SilverDay ObjectDNS 
    (http://www.silverday.net/sqndns/index.php) and other similar services is advised.
    
    
    Extensions :
    Servers may use additional codes, but clients may simply ignore those lines if they are 
    unfamiliar with them. Potential Extension codes might include; B - background texture 
    UUID, H - WebPage, and others.
    
    
    LSL implementation notes:
    
    Request types can be determined by parsing the (body) of the request. A blank body 
    should return root menu, probably from a notecard.
    
    
    L type Requests can easily be served by reading notecards contents into (body) for 
    llHTTPResponce, generally these will be named accordingly. e.g., L|Submenu|(url)|
    Submenu, would have the server at (url) look for and return the contents of a notecard 
    named "Submenu" to the client.
    
    
    E,and Q type requests can be passed on in the form of link messages to subtasks
    (scripts), with some mechanism in place for the subtasks to offer a reply e.g. 
    llMessageLinked(LINK_SET,SomeControlInteger,(body),RequestID).
    
    S Requests will simply llGiveInventory, where allowed by permissions. It is advised 
    that scripts Not be allowed to be sent this way.