Re: [ogpx] content negotiation for LLSD over HTTP connections

Carlo Wood <carlo@alinoe.com> Sun, 19 July 2009 10:13 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 98AC93A6BD4 for <ogpx@core3.amsl.com>; Sun, 19 Jul 2009 03:13:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.83
X-Spam-Level:
X-Spam-Status: No, score=-0.83 tagged_above=-999 required=5 tests=[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 ysxgUtDX6LcL for <ogpx@core3.amsl.com>; Sun, 19 Jul 2009 03:13:06 -0700 (PDT)
Received: from viefep28-int.chello.at (viefep28-int.chello.at [62.179.121.48]) by core3.amsl.com (Postfix) with ESMTP id 13F563A69D8 for <ogpx@ietf.org>; Sun, 19 Jul 2009 03:13:05 -0700 (PDT)
Received: from edge05.upc.biz ([192.168.13.212]) by viefep17-int.chello.at (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090719101225.PEYF14607.viefep17-int.chello.at@edge05.upc.biz>; Sun, 19 Jul 2009 12:12:25 +0200
Received: from mail9.alinoe.com ([77.250.43.12]) by edge05.upc.biz with edge id HmCN1c03G0FlQed05mCPLa; Sun, 19 Jul 2009 12:12:25 +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 1MSTOJ-0004oN-Om; Sun, 19 Jul 2009 12:13:11 +0200
Date: Sun, 19 Jul 2009 12:13:11 +0200
From: Carlo Wood <carlo@alinoe.com>
To: Infinity Linden <infinity@lindenlab.com>
Message-ID: <20090719101311.GA18120@alinoe.com>
References: <3a880e2c0906261648k1a14024cudd4cbccb57d8753f@mail.gmail.com> <20090627104731.GB28675@alinoe.com> <20090627110112.GC28675@alinoe.com> <20090627115111.GA30752@alinoe.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20090627115111.GA30752@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: Sun, 19 Jul 2009 10:13:08 -0000

Ping.

On Sat, Jun 27, 2009 at 01:51:11PM +0200, Carlo Wood wrote:
> 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 mailing list
> ogpx@ietf.org
> https://www.ietf.org/mailman/listinfo/ogpx

-- 
Carlo Wood <carlo@alinoe.com>