secondlife / viewer

🖥️ Second Life's official client
GNU Lesser General Public License v2.1
212 stars 53 forks source link

Add Support HTTP Multiplexing #3101

Open AiraYumi opened 5 days ago

AiraYumi commented 5 days ago

Enables HTTP/2 Multiplexing. If this doesn't work, it will use HTTP pipelining.

(Need Help) I want to be able to enable and disable HTTP/2 Multiplexing using the debug options, but where should I change it?

marchcat commented 2 days ago

Thank you for the contribution!

(Need Help) I want to be able to enable and disable HTTP/2 Multiplexing using the debug options, but where should I change it?

To achieve this, add a setting to the indra/newview/app_settings/settings.xml file as follows:

    <key>UseHTTP2Multiplexing</key>
    <map>
      <key>Comment</key>
      <string>Enable HTTP/2 Multiplexing</string>
      <key>Persist</key>
      <integer>1</integer>
      <key>Type</key>
      <string>Boolean</string>
      <key>Value</key>
      <integer>0</integer>
    </map>

Then, access it from the viewer code like this:

bool use_http2_multiplexing = gSavedSettings.getBOOL("UseHTTP2Multiplexing");
akleshchev commented 2 days ago

I want to be able to enable and disable HTTP/2 Multiplexing using the debug options, but where should I change it?

I doubt that all services will pick up http/2 in one go, so it's probably beneficial to do it on a case by case bassis viewer side, like HttpOptions (or header?). In such case calls will also be in newview, so you will be able to use settings to do something like mHttpOptions->setUseHttp2(gSavedSettings.getBOOL("UseHTTP2Multiplexing"))

To achieve this, add a setting to the indra/newview/app_settings/settings.xml file as follows:

I doubt that it's accessible from curl's files.

P.S. using gSavedSettings.getBOOL() directly for a code like this is suboptimal, it probably should be LLCachedControl inited from gSavedSettings...

AiraYumi commented 2 days ago

I'm currently working on it, and at least I added gSavedSettings to "indra/llcorehttp/_httplibcurl.cpp", but it didn't build. I'll try adding it to HttpOptions.

akleshchev commented 16 hours ago

You can also remake mPipelined into a enum with options like no|pipelining|multiplexing. It already loads from gSavedSettings.getBOOL(http_pipelining), so it will just have to become getS32(http_pipelining).