MasterPoppy Amat による投稿

isekiさん

検証ありがとうございます。
SecondLife Gridでは送信されていてJOGでは拾われていないCookie情報がある(?)
ということでしょうかね。
根本的にサーバプログラムが別物ならしょうがないですが...

OpenSIMの設定で件のCookie、またはえくすさんの言及されているカスタムHeader(?)を要求するような設定があったりしないでしょうか。

*某国出張中につき当方での詳しい検証が後日になります。
いろいろ検証いただいてるのに反応が鈍くて恐縮です。

えくすさん

検証ありがとうございます。
先のisekiさんの検証にもあるようにサーバのコード上はCookieからのID情報でcontent-typeを割り振っているようだということもあり、X-SecondLife-xのHeader情報が足りない件が直接の原因か定かではありませんが、どうやらJOGに接続したときとSecondLife Gridに接続したときでは挙動が違う原因がみえてきたようですね。

某国出張中につき帰ってからになりますが、こちらでもUserAgentのあたりから同じ切り口で検証してみます。

サンプルコードの使い方を補足します。

実行するとチャットウインドウにhttp-inのサーバURLが出力されるので、
FireStromだとURLを右クリック > [内蔵ブラウザで開く] とすると内蔵ブラウザで開きます。

ご教示ありがとうございます。
llSetContentTypeもosSetContentTypeも実装済みのはずだという前提で切り分けテストをしてみました。

llSetContentType の仕様ではCONTENT_TYPE_HTML(=integerの1)を指定している場合
Caveatsに記載ある条件のとき(OwnerがVIewer内蔵ブラウザでアクセスしたときのみ)にHTML文書として表示されるはずです。

Case(A)
llSetContentTypeでのテスト (JOG)…意図しない挙動(textとして表示される)
Code: llSetContentType(id, CONTENT_TYPE_HTML);
https://gyazo.com/88d44c7afe192374eaab0bcb025d7832

Case(B)
osSetContentTypeでのテスト (JOG)…意図しない挙動(textとして表示される)
Code: osSetContentType(id, "text/html");
https://gyazo.com/66581236e15ce6a6a255cfe474aa0ddc

Case(C)
llSetContentTypeでのテスト (SecondLife Grid)…意図した挙動(htmlとして表示される)
Code: llSetContentType(id, CONTENT_TYPE_HTML);
https://gyazo.com/1900a4d5f0acf0d1121a6bdfea5ff114

 

まとめると
SecondLife Gridでは正しくHTMLとして表示される(サーバからtext/htmlで返っている)が、
JOGではllSetContentTypeとosSetContentTypeのいずれもtextとして表示される(text/plainが返っている)ということになりそうです。

おそらく内的にはUser Agentとかで区別してしてて、その辺が間違ってるんじゃないかと言う気がするんですが、
そんな細かいコードがどこにあるのかわからず推測の域をでません。 

 

テストに使用したコードです。(line.32-33(一番下らへん)をコメントアウトしてLSL<->OSSLを切り替えます)

key url_request;

string HTML_BODY =
"<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>";

default
{
    state_entry()
    {
        url_request = llRequestURL();
    }
 
    http_request(key id, string method, string body)
    {
        if (url_request == id)
        {
            url_request = "";
            if (method == URL_REQUEST_GRANTED){
                llOwnerSay("URL: " + body);
            }
            else if (method == URL_REQUEST_DENIED){
                llOwnerSay("Something went wrong, no url:\n" + body);
            }
        }
        else{
            //llSetContentType(id, CONTENT_TYPE_HTML);
            osSetContentType(id, "text/html");
            llHTTPResponse(id, 200, HTML_BODY);
        }
    }
}