Re: [ogpx] content negotiation for LLSD over HTTP connections
Carlo Wood <carlo@alinoe.com> Sat, 27 June 2009 11:50 UTC
Return-Path: <carlo@alinoe.com>
X-Original-To: ogpx@core3.amsl.com
Delivered-To: ogpx@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix)
with ESMTP id 7497F3A68C0 for <ogpx@core3.amsl.com>;
Sat, 27 Jun 2009 04:50:54 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.13
X-Spam-Level:
X-Spam-Status: No, score=-1.13 tagged_above=-999 required=5 tests=[AWL=-0.300,
BAYES_00=-2.599, HELO_EQ_AT=0.424, HOST_EQ_AT=0.745, J_CHICKENPOX_46=0.6]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com
[127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4vyuhYmaA-1F for
<ogpx@core3.amsl.com>; Sat, 27 Jun 2009 04:50:53 -0700 (PDT)
Received: from viefep13-int.chello.at (viefep13-int.chello.at [62.179.121.33])
by core3.amsl.com (Postfix) with ESMTP id 10F363A688D for <ogpx@ietf.org>;
Sat, 27 Jun 2009 04:50:52 -0700 (PDT)
Received: from edge05.upc.biz ([192.168.13.212]) by viefep13-int.chello.at
(InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id
<20090627115109.XANZ23539.viefep13-int.chello.at@edge05.upc.biz>;
Sat, 27 Jun 2009 13:51:09 +0200
Received: from mail9.alinoe.com ([77.250.43.12]) by edge05.upc.biz with edge
id 8zr61c00P0FlQed05zr7Nw; Sat, 27 Jun 2009 13:51:09 +0200
X-SourceIP: 77.250.43.12
Received: from carlo by mail9.alinoe.com with local (Exim 4.69) (envelope-from
<carlo@alinoe.com>) id 1MKWR5-00007j-2M; Sat, 27 Jun 2009 13:51:11 +0200
Date: Sat, 27 Jun 2009 13:51:11 +0200
From: Carlo Wood <carlo@alinoe.com>
To: Infinity Linden <infinity@lindenlab.com>
Message-ID: <20090627115111.GA30752@alinoe.com>
References: <3a880e2c0906261648k1a14024cudd4cbccb57d8753f@mail.gmail.com>
<20090627104731.GB28675@alinoe.com> <20090627110112.GC28675@alinoe.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20090627110112.GC28675@alinoe.com>
User-Agent: Mutt/1.5.18 (2008-05-17)
Cc: ogpx@ietf.org
Subject: Re: [ogpx] content negotiation for LLSD over HTTP connections
X-BeenThere: ogpx@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Virtual Worlds and the Open Grid Protocol <ogpx.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/ogpx>,
<mailto:ogpx-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/ogpx>
List-Post: <mailto:ogpx@ietf.org>
List-Help: <mailto:ogpx-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ogpx>,
<mailto:ogpx-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 27 Jun 2009 11:50:54 -0000
Ok, I made a 'translation' of that IRC page for the purpose of ogpx: For documentation purposes there would exist a (central) webpage, for example http://protocols.ogpx.net, that lists all (accepted) ogpx server implementations (basically meaning more or less independent groups working on their own ogpx server versions). For example, this page could list the labels: SecondLife, OpenSim, BlueMoon, which link to websites controlled by the aforementioned group. Lets call these "implementation labels" for now. Upon connection to a server, the server should send a message to the client as early as possible (even before authentication, or order to allow also the authentication method to be altered in the future) indicating which protocol base it is using. This would exist of a (list) of triplets exists of a label (string) a version (integer) and a 'compatibility version' (integer). For human readable and documentation reasons, the label should always start with an "implementation label". It's highly suggested to just add an integer behind that to complete the label and make it unique. Lets call these labels "version labels". For example, the version labels could read "SecondLife23", "OpenSim1", etc. For documentation purposes, each of the aforementioned websites owned by the different implementer groups should list each of these version labels with a link to more information about them. The version string together with the version defines the (supported) protocol of the server: every feature, mandatory of optional. Neither side has to worry about the mandatory parts, since the versions will take care of that: a 'compatibility version' is oldest version that supports all mandatory stuff. The client then reacts with the version label and protocol version it 'requests', as well as all the optional features it wants. The server confirms which optional features will be used, after which the protocol is switched to the negotiated protocol. The client acknowledges this and also switches to the final protocol. As an example, lets assume that one implementation (opensim) adds a feature that allows clients to better synchronize animations with sound. They assign the label "anisndsync" to it, which only really has to be unique within the namespace of OpenSim. It is made a negotiable feature of 'OpenSim1 version 30'. A viewer that has no notion of this feature will logically not request it, and therefore it will not be used. If some grid makes the feature mandatory, the negotation fails with such a client and the user is told to upgrade to a viewer that supports 'anisndsync'. I do not consider it very likely that anyone would make it mandatory however, until -say- 90% of all viewers already support it, and the 4 year-old viewers that still don't become really annoying. If the client supports it, it will request it (if it's an optional feature, still) and the server will grant it. Obviously the server will know about it (it sent 'OpenSim1 30'), or else the viewer would not have requested it. However, then this feauture turns out to not to work - and the opensim developers decide to remove it again from version 31. Removing a negotiable feature doesn't break compatiblity, so there is nothing to indicate to a viewer (that was written during version 30) that version 31 doesn't support it anymore. What would happen is this: The server says: Opensim1 31 10. (where 10 is the compatibility version in this example). The viewer, only knowing about version 30 and before (that is, version 10 to 30) doesn't have a clue what changed in version 31, but it knows that 10 < 30, the version it does support - and hence it is allowed to react as if the server is version 30. So, it requests "anisndsync" as before. This time however, the server doesn't acknowledge it, and the feature is not used. What worried people in the past with this sheme is: How do the clients keep track of all the features that are mandatory and/or negotiable for every version? Well, this is really very very simple. For each implementated feature the coder had to sit down and read the documenation. Along with that documentation come the label and version number. So, all that is needed is a map from "label + version" to which *implemented* features are mandatory or negotiable. The maintenance load of that is neglectable. It will be like adding two lines of code extra per feature: protocol.register("OpenSim1", 30, "anisndsync", &handle_anisndsync); and common code that takes care of the whole negotiation will do the rest. Mapping "OpenSim1" to the mandatory and optional features might involve more code lines, but this code can simply be copy&pasted from the documentation website of "OpenSim1". Also this will be something that is easy to maintain (adding and removing lines per added/delete feature). -- Carlo Wood <carlo@alinoe.com>
- [ogpx] content negotiation for LLSD over HTTP con… Infinity Linden
- Re: [ogpx] content negotiation for LLSD over HTTP… Hurliman, John
- Re: [ogpx] content negotiation for LLSD over HTTP… Infinity Linden
- Re: [ogpx] content negotiation for LLSD over HTTP… Carlo Wood
- Re: [ogpx] content negotiation for LLSD over HTTP… Carlo Wood
- Re: [ogpx] content negotiation for LLSD over HTTP… Carlo Wood
- Re: [ogpx] content negotiation for LLSD over HTTP… Joshua Bell
- Re: [ogpx] content negotiation for LLSD over HTTP… Carlo Wood