Subject: Re: [Uri-review] URI scheme registration request

From: Ted Hardie <[email-masked]>
Date: Tue, 1 Dec 2015 08:01:02 -0800

On Mon, Nov 30, 2015 at 7:07 PM, John Wason <[email-masked]> wrote:

> Are there any more questions about this request?  I have not received any
> replies.
>
>
​Hi John,​

​I think this is sufficient for provisional registration.  Hopefully some
other folks can chime in as well.

regards,

Ted​

> On 11/14/2015 6:37 PM, Dave Thaler wrote:
>
> Short answer: unfortunately no
>
>
>
> This was the subject of issue #16:
>
> <http://trac.tools.ietf.org/wg/appsawg/trac/ticket/16>
> http://trac.tools.ietf.org/wg/appsawg/trac/ticket/16
>
>
>
> It was discussed at IETF 89 and then again at IETF 90. In both cases, and
> as confirmed on the list,
>
> the consensus of the WG was to not allow a notion of wildcards.   Instead
> you have to individually
>
> register each such scheme.  I see “svn+ssh” is not currently registered,
> but it sounds like it ought to be.
>
>
>
> Dave
>
>
>
> *From:* John Wason [mailto:[email-masked] <[email-masked]>]
> *Sent:* Saturday, November 14, 2015 2:21 PM
> *To:* Dave Thaler <[email-masked]> <[email-masked]>; Roy T.
> Fielding <[email-masked]> <[email-masked]>
> *Cc:* [email-masked]
> *Subject:* Re: [Uri-review] URI scheme registration request
>
>
>
> Is it possible to register a "wildcard" or have an understanding that the
> scheme can be appended with the transport type?  Subversion uses "svn+ssh"
> to specify an ssh tunnel.  This format seems to be used occasionally in
> practice.  Because the different transports can point to completely
> different resources on the same host I am not sure having the transport in
> the query portion is the correct solution.
>
> On 11/14/2015 3:07 PM, Dave Thaler wrote:
>
> Roy T. Fielding wrote:
>
> > A URI scheme should define what it names and how that naming maps to
> the URI syntax.
>
> > There is nothing wrong with using separate schemes for different
> transports if those transports
>
> > are essential parts of the name (e.g., if something named Fred at
> TCP:80 is different from something
>
> > named Fred at UDP:89898).  (I prefer using dots, like rr.tcp and rr.udp
> and rr.tcp.tls.)
>
>
>
> Careful… RFC 7595 states:
>
>    Furthermore, to prevent collisions with private-use scheme names, new
>
>    scheme names registered MUST NOT contain a "." unless actually
>
>    constructed from a reversed domain name.
>
>
>
> So rr.tcp should only be done if you register rr as a TLD, and since rr is
> 2 letters, it’s reserved for a country code.
>
>
>
> Dave
>
>
>
>
> --
>
> John Wason, Ph.D.
>
> Wason Technology, LLC
>
> PO Box 669
>
> Tuxedo, NY 10987
>
> (518) 279-6234
>
> [email-masked]
>
>
>
> --
> John Wason, Ph.D.
> Wason Technology, LLC
> PO Box 669
> Tuxedo, NY 10987(518) [email-masked]
>
>
> _______________________________________________
> Uri-review mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/uri-review
>
>

---

From: Dave Thaler <[email-masked]>
Date: Tue, 1 Dec 2015 17:41:15 +0000

Agree, the bar for provisional is supposed to be low.

From: Ted Hardie [mailto:[email-masked]]
Sent: Tuesday, December 1, 2015 8:01 AM
To: John Wason <[email-masked]>
Cc: Dave Thaler <[email-masked]>; [email-masked]
Subject: Re: [Uri-review] URI scheme registration request

On Mon, Nov 30, 2015 at 7:07 PM, John Wason <[email-masked]<mailto:[email-masked]>> wrote:
Are there any more questions about this request?  I have not received any replies.

​Hi John,​

​I think this is sufficient for provisional registration.  Hopefully some other folks can chime in as well.
regards,
Ted​

This was the subject of issue #16:
http://trac.tools.ietf.org/wg/appsawg/trac/ticket/16<https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2ftrac.tools.ietf.org%2fwg%2fappsawg%2ftrac%2fticket%2f16&data=01%7c01%7cdthaler%40microsoft.com%7c37eb512ebef94a1fb87008d2fa689d03%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=RlvsO%2fHiWenlx%2bp7j7qh5Bbu9t7P0qdij94%2fR%2bfU0VM%3d>

It was discussed at IETF 89 and then again at IETF 90. In both cases, and as confirmed on the list,
the consensus of the WG was to not allow a notion of wildcards.   Instead you have to individually
register each such scheme.  I see “svn+ssh” is not currently registered, but it sounds like it ought to be.

Dave

From: John Wason [mailto:[email-masked]]
Sent: Saturday, November 14, 2015 2:21 PM
To: Dave Thaler <[email-masked]><mailto:[email-masked]>; Roy T. Fielding <[email-masked]><mailto:[email-masked]>
Cc: [email-masked]<mailto:[email-masked]>
Subject: Re: [Uri-review] URI scheme registration request

Is it possible to register a "wildcard" or have an understanding that the scheme can be appended with the transport type?  Subversion uses "svn+ssh" to specify an ssh tunnel.  This format seems to be used occasionally in practice.  Because the different transports can point to completely different resources on the same host I am not sure having the transport in the query portion is the correct solution.

Roy T. Fielding wrote:
> A URI scheme should define what it names and how that naming maps to the URI syntax.
> There is nothing wrong with using separate schemes for different transports if those transports
> are essential parts of the name (e.g., if something named Fred at TCP:80 is different from something
> named Fred at UDP:89898).  (I prefer using dots, like rr.tcp and rr.udp and rr.tcp.tls.)

So rr.tcp should only be done if you register rr as a TLD, and since rr is 2 letters, it’s reserved for a country code.

Dave

--

John Wason, Ph.D.

Wason Technology, LLC

PO Box 669

Tuxedo, NY 10987

(518) 279-6234<tel:%28518%29%20279-6234>

[email-masked]<mailto:[email-masked]>

--

John Wason, Ph.D.

Wason Technology, LLC

PO Box 669

Tuxedo, NY 10987

(518) 279-6234<tel:%28518%29%20279-6234>

[email-masked]<mailto:[email-masked]>

_______________________________________________
Uri-review mailing list
[email-masked]<mailto:[email-masked]>
https://www.ietf.org/mailman/listinfo/uri-review<https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fwww.ietf.org%2fmailman%2flistinfo%2furi-review&data=01%7c01%7cdthaler%40microsoft.com%7c37eb512ebef94a1fb87008d2fa689d03%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=R%2b3eqR8z3uOAFMjcg86IxlhWMF8qSHuCJfkApmjFobc%3d>

---

From: "Roy T. Fielding" <[email-masked]>
Date: Tue, 1 Dec 2015 13:12:11 -0800

On Nov 20, 2015, at 8:20 PM, John Wason <[email-masked]> wrote:
> 
> I have prepared a more detailed description of the transports and URI request.  Please let me know if you need further specific details:
> 
> Robot Raconteur URI Scheme Improvement
> John Wason
> Wason Technology, LLC
> [email-masked] <mailto:[email-masked]>
> 11/20/15
>  
> Introduction
>  
> Robot Raconteur is being improved to better comply with web standards by adding support for WebSocket transports and implementing a new URI scheme that can be registered with IANA.  The URIs for Robot Raconteur use the following basic format:
>  
> rr+transport://hostname:port/path/to/endpoint?service=servicename&nodename=targetnodename&nodeid=targetnodeuuid <rr+transport://hostname:port/path/to/endpoint?service=servicename&nodename=targetnodename&nodeid=targetnodeuuid>
>  
> The scheme is “rr”, “+”, and then the transport type.  For instance for TCP the scheme is “rr+tcp”. If TLS is used, “rr” is replaced with “rrs” to indicate the extra security.  For TCP a secure transport would use the scheme “rrs+tcp”. The following schemes are used and will each be discussed in detail in the following sections:
>  
> ·         rr+tcp
> ·         rrs+tcp
> ·         rr+local
> ·         rr+usb
> ·         rr+pci
> ·         rr
> ·         rr+cloud
> ·         rr+ws
> ·         rrs+ws
> ·         rr+wss
> ·         rrs+wss
>  
> Each of these schemes corresponds to a different selection of transports and security options.
>  
> The hostname and port correspond to the hostname and port of the target machine.  If no port is specified the default is used.  For rr+local, rr+tcp, rr+usb, rr+pci, rr, and rr+cloud the port must not be included as these do not use ports to find the target.
>  
> The absolute path (/path/to/endpoint) in the example is only used for WebSockets with HTTP to identify the WebSocket target and must be empty or “/” for all other transport types.
>  
> The query contains the name of the service to connect to.  It may also contain the nodeid and nodename if desired to help find the node.  The same endpoint can provide connection to multiple nodes so this provides a way to select the target node. The query string can also be used to pass extra parameters to the WebSocket HTTP server if desired.  The query string is passed unmodified to the server.
>  
> All nodes can be secured with username and credential pairs.
>  
> A functional example of a Robot Raconteur URI is:
>  
> rr+tcp://192.168.2.3:48653/?nodeid= <rr+tcp://192.168.2.3:48653/?nodeid=> a7aa5f85-dfa7-41fe-89a1-1ebff43b9580&service=create
>  
> The following sections will describe the exact transports and how they create connections to the target nodes.

I still don't see what the purpose is for all these new schemes.  Yes, provisional should have a low bar, but there
should at least be an indication that each scheme being registered provides new identifiers.

For example, the +ws(s) identifiers appear to just be an alias of ws and wss.  Aliases are bad.
rr and rr+cloud are being defined as aliases = VERY BAD.  There is no reason to do that.

> TCP Transport
>  
> ·         rr+tcp – Standard TCP communication
> ·         rrs+tcp – TLS TCP communication
>  
> The TCP Transport operates by connecting to a remote port and then using the Robot Raconteur protocol to communicate.  The official listen port is 48653.  The path must be “/” or empty. The first handshake contains the target nodeid and/or nodename to identify which node should be connected.  Both can be blank to connect to the default node on the endpoint.  The communication can be wrapped in TLS using Start TLS semantics.  The first message contains the target nodeid and/or nodename and a flag to start using TLS.  The server node then provides a certificate signed by Wason Technology, LLC issued to the UUID (nodeid) of the node.  The client can also provide a signed certificate to provide certificate based authentication.
>  
> Discovery for TCP is accomplished through UDP packets that are broadcast periodically on port 48653.  The packets contain the nodeid, nodename, the connection URI, and some additional metadata to help identify the capabilities.  The information is generally only used to connect to the “Service Index” that runs on all nodes.  This index provides detailed information about the services available and how to connect.  The clients will interrogate the nodes through the Service Index to determine if the node matches the search criteria.  During this process it will also verify the TLS certificates if appropriate.

Okay, it sounds like you have two identifiers: one for the service index and one for the node within that service.
Why don't you use two URIs: one for identifying the service index (defines the protocols necessary to get there)
and one for a single rr scheme that identifies the rr node ("/" being the index itself)?

Also, TLS implies TCP.  For most schemes, the bare name is TCP and {name}s is TLS.  So, rr and rrs, or
raconteur and raconteurs if you want to be more descriptive.  Using plain rr to indicate the WebRTC
transport is very odd.

> WebSocket Transport
>  
> The WebSocket transport is an extension to the TCP transport and in the software is directly integrated into the TCP transport.  It works by wrapping the TCP transport data into WebSocket binary frames. The frame boundaries are ignored as the stream is reassembled on the receiving end.  The frames however shall be equal to or less than 4 KB of data per frame.  
>  
> The transport also implements the HTTP handshake to start the WebSocket protocol using the subprotocol “robotraconteur”. The URI contains the path to the WebSocket and query information, both of which are passed unmodified to the server. The URI must contain a query parameter named “service” to identify the name of the service to connect.
>  
> All nodes that listen for TCP connections shall also be capable of detecting and accepting an HTTP WebSocket connection to the root file path “/” on the same port that listens for standard Robot Raconteur connections. This allows for standard web browsers to connect without additional plugins. (Note that HTTPS (wss) is not possible in this configuration. See below.)
>  
> TLS is somewhat complicated with WebSockets due to the handshake behavior.  There are four flavors of WebSocket connections:
>  
> ·         rr+ws – No encryption (HTTP)
> ·         rrs+ws – Encryption using the TLS Robot Raconteur transport.  This does not encrypt the HTTP handshake.  For local network use connecting to a device this should be sufficient as the handshake only contains the target nodeid/service information which is not considered secret data. Just after the handshake the Robot Raconteur TLS layer is activated protecting any secret data. (HTTP)
> ·         rr+wss – Encrypted HTTPS transport but no Robot Raconteur encryption.  Not recommended because the target node identity is not verified. (HTTPS)
> ·         rrs+wss – Encryption HTTPS transport and TLS Robot Raconteur transport.  This will encrypt the HTTP handshake and allow for identity verification of the node.  Note that this is only possible when the target node has an official HTTPS certificate which is not available for IoT type devices.  In those cases rrs+ws should be used as it is designed for such scenarios. rrs+wss should only be used when it is determined to be truly necessary.

This just describes several access mechanism which will (after accessing) make use of rr identifiers.
You don't need new schemes for this.

>  
> Local Transport
>  
> ·         rr+local
>  
> The local transport uses UNIX sockets or Named Pipes to communicate between nodes on the same machine.  The nodeid and/or nodename are used to identify the target nodes.  The host is always “localhost”.  A username can be used to specify which user owns the desired node, ie “username@localhost”.  The port is never used and must be left out of the URI. Access control is accomplished through file permissions and standard username/credential access control. Untrusted software shall not be allow local transport access. The path must be “/” or empty.

Likewise, not an identifier. You don't need an identifier for every local configuration option.

> Hardware Transport
>  
> ·         rr+usb
> ·         rr+pci
>  
> Hardware device drivers are implemented through a userspace daemon service.  This service provides UNIX socket / Named Pipe connections that allow nodes to access the devices.  Access control is accomplished through file permissions.  Generally only admin or equivalent users are given access. Untrusted software shall not be allow local transport access. The path must be “/” or empty.

Likewise, not an identifier.

> Cloud Transport
>  
> ·         rr
> ·         rr+cloud
>  
> The cloud transport is a transport based on WebRTC.  The signaling as accomplished through the Robot Raconteur server.  Nodes are identified by the Robot Raconteur username and nodeid/nodname pair.  The hostname for each user is “username.cloud.robotraconteur.com <http://username.cloud.robotraconteur.com/>”, where username is replaced with the registered username.  For instance, “johnw.cloud.robotraconteur.com <http://johnw.cloud.robotraconteur.com/>” would be the hostname “johnw”. The port must not be included. Nodes connecting to the cloud service must all have issued certificates tied to the uuid of the node (nodeid). This communication is always secured through DTLS at the WebRTC layer.  Security of the overall cloud is managed by the Robot Raconteur server. The hostnames for each user are only relevant within the signaling server and do not have any general use DNS meaning. “rr” and “rr+cloud” are equivalent. The path must be “/” or empty.

If this is consistent with WebRTC, then use webrtc's identifiers.

In other words, what you are defining here is an identifier space for rr nodes and then a
bunch of proxy mechanisms for obtaining access to those identified nodes.  We don't do that
by multiplying schemes!  We do it by sending two identifiers: one for the proxy and one for
the resource to access.  The proxy mechanisms already have defined identifier schemes.

....Roy

---

From: John Wason <[email-masked]>
Date: Tue, 1 Dec 2015 17:31:13 -0500

Claiming that the different scheme types are simply "proxies" is 
inaccurate.  The different transport types have incredibly important 
performance and security implications that are best transmitted as a 
single piece of data. Also, a single client can connect to different 
services using different transport types so there isn't really a single 
place that the "proxy" can be specified. The chances of a user getting a 
two piece connection command correct vs just changing a few letters in 
the URI are remote. The "click to connect" type usage would not work.  
Because Robot Raconteur mostly runs on LAN the DNS system is not used 
for many connections.  Because of this the same URI with only the scheme 
changed can connect to different services. This means that the "proxy" 
specification would point to a different resource which is also not a 
correct usage of the "proxy" concept.

"For example, the +ws(s) identifiers appear to just be an alias of ws 
and wss."

No they aren't.  The protocol needs to be specified.  It is true that 
rr+ws etc. are compatible with WebSockets but it is just a stream 
wrapper.  The rr+ws is critically important to the software library to 
identify how to connect to the service.

  "rr and rr+cloud are being defined as aliases = VERY BAD.  There is no 
reason to do that."

Except that for users there may be cases where one is more clear than 
the other.

On 12/1/2015 4:12 PM, Roy T. Fielding wrote:
> On Nov 20, 2015, at 8:20 PM, John Wason <[email-masked] 
> <mailto:[email-masked]>> wrote:
>>
>> I have prepared a more detailed description of the transports and URI 
>> request.  Please let me know if you need further specific details:
>>
>> *Introduction*
>> Robot Raconteur is being improved to better comply with web standards 
>> by adding support for WebSocket transports and implementing a new URI 
>> scheme that can be registered with IANA.The URIs for Robot Raconteur 
>> use the following basic format:
>> rr+transport://hostname:port/path/to/endpoint?service=servicename&nodename=targetnodename&nodeid=targetnodeuuid
>> The scheme is “rr”, “+”, and then the transport type.For instance for 
>> TCP the scheme is “rr+tcp”. If TLS is used, “rr” is replaced with 
>> “rrs” to indicate the extra security.For TCP a secure transport would 
>> use the scheme “rrs+tcp”. The following schemes are used and will 
>> each be discussed in detail in the following sections:
>> ·rr+tcp
>> ·rrs+tcp
>> ·rr+local
>> ·rr+usb
>> ·rr+pci
>> ·rr
>> ·rr+cloud
>> ·rr+ws
>> ·rrs+ws
>> ·rr+wss
>> ·rrs+wss
>> The hostname and port correspond to the hostname and port of the 
>> target machine.If no port is specified the default is used.For 
>> rr+local, rr+tcp, rr+usb, rr+pci, rr, and rr+cloud the port must not 
>> be included as these do not use ports to find the target.
>> The absolute path (/path/to/endpoint) in the example is only used for 
>> WebSockets with HTTP to identify the WebSocket target and must be 
>> empty or “/” for all other transport types.
>> The query contains the name of the service to connect to.It may also 
>> contain the nodeid and nodename if desired to help find the node.The 
>> same endpoint can provide connection to multiple nodes so this 
>> provides a way to select the target node. The query string can also 
>> be used to pass extra parameters to the WebSocket HTTP server if 
>> desired.The query string is passed unmodified to the server.
>> rr+tcp://192.168.2.3:48653/?nodeid=a7aa5f85-dfa7-41fe-89a1-1ebff43b9580&service=create
>> The following sections will describe the exact transports and how 
>> they create connections to the target nodes.
>
> I still don't see what the purpose is for all these new schemes.  Yes, 
> provisional should have a low bar, but there
>> *TCP Transport*
>> ·rr+tcp – Standard TCP communication
>> ·rrs+tcp – TLS TCP communication
>> The TCP Transport operates by connecting to a remote port and then 
>> using the Robot Raconteur protocol to communicate.The official listen 
>> port is 48653.The path must be “/” or empty. The first handshake 
>> contains the target nodeid and/or nodename to identify which node 
>> should be connected.Both can be blank to connect to the default node 
>> on the endpoint.The communication can be wrapped in TLS using Start 
>> TLS semantics.The first message contains the target nodeid and/or 
>> nodename and a flag to start using TLS.The server node then provides 
>> a certificate signed by Wason Technology, LLC issued to the UUID 
>> (nodeid) of the node.The client can also provide a signed certificate 
>> to provide certificate based authentication.
>> Discovery for TCP is accomplished through UDP packets that are 
>> broadcast periodically on port 48653.The packets contain the nodeid, 
>> nodename, the connection URI, and some additional metadata to help 
>> identify the capabilities.The information is generally only used to 
>> connect to the “Service Index” that runs on all nodes.This index 
>> provides detailed information about the services available and how to 
>> connect.The clients will interrogate the nodes through the Service 
>> Index to determine if the node matches the search criteria.During 
>> this process it will also verify the TLS certificates if appropriate.
>
> Okay, it sounds like you have two identifiers: one for the service 
> index and one for the node within that service.
> Why don't you use two URIs: one for identifying the service index 
> (defines the protocols necessary to get there)
>> *WebSocket Transport*
>> The WebSocket transport is an extension to the TCP transport and in 
>> the software is directly integrated into the TCP transport.It works 
>> by wrapping the TCP transport data into WebSocket binary frames. The 
>> frame boundaries are ignored as the stream is reassembled on the 
>> receiving end.The frames however shall be equal to or less than 4 KB 
>> of data per frame.
>> The transport also implements the HTTP handshake to start the 
>> WebSocket protocol using the subprotocol “robotraconteur”. The URI 
>> contains the path to the WebSocket and query information, both of 
>> which are passed unmodified to the server. The URI must contain a 
>> query parameter named “service” to identify the name of the service 
>> to connect.
>> All nodes that listen for TCP connections shall also be capable of 
>> detecting and accepting an HTTP WebSocket connection to the root file 
>> path “/” on the same port that listens for standard Robot Raconteur 
>> connections. This allows for standard web browsers to connect without 
>> additional plugins. (Note that HTTPS (wss) is not possible in this 
>> configuration. See below.)
>> TLS is somewhat complicated with WebSockets due to the handshake 
>> behavior.There are four flavors of WebSocket connections:
>> ·rr+ws – No encryption (HTTP)
>> ·rrs+ws – Encryption using the TLS Robot Raconteur transport.This 
>> does not encrypt the HTTP handshake.For local network use connecting 
>> to a device this should be sufficient as the handshake only contains 
>> the target nodeid/service information which is not considered secret 
>> data. Just after the handshake the Robot Raconteur TLS layer is 
>> activated protecting any secret data. (HTTP)
>> ·rr+wss – Encrypted HTTPS transport but no Robot Raconteur 
>> encryption.Not recommended because the target node identity is not 
>> verified. (HTTPS)
>> ·rrs+wss – Encryption HTTPS transport and TLS Robot Raconteur 
>> transport.This will encrypt the HTTP handshake and allow for identity 
>> verification of the node.Note that this is only possible when the 
>> target node has an official HTTPS certificate which is not available 
>> for IoT type devices.In those cases rrs+ws should be used as it is 
>> designed for such scenarios. rrs+wss should only be used when it is 
>> determined to be truly necessary.
>
>> *Local Transport*
>> ·rr+local
>> The local transport uses UNIX sockets or Named Pipes to communicate 
>> between nodes on the same machine.The nodeid and/or nodename are used 
>> to identify the target nodes.The host is always “localhost”.A 
>> username can be used to specify which user owns the desired node, ie 
>> “username@localhost”.The port is never used and must be left out of 
>> the URI. Access control is accomplished through file permissions and 
>> standard username/credential access control. Untrusted software shall 
>> not be allow local transport access. The path must be “/” or empty.
>
>> *Hardware Transport*
>> ·rr+usb
>> ·rr+pci
>> Hardware device drivers are implemented through a userspace daemon 
>> service.This service provides UNIX socket / Named Pipe connections 
>> that allow nodes to access the devices.Access control is accomplished 
>> through file permissions.Generally only admin or equivalent users are 
>> given access. Untrusted software shall not be allow local transport 
>> access. The path must be “/” or empty.
>
>> *Cloud Transport*
>> ·rr
>> ·rr+cloud
>> The cloud transport is a transport based on WebRTC.The signaling as 
>> accomplished through the Robot Raconteur server.Nodes are identified 
>> by the Robot Raconteur username and nodeid/nodname pair.The hostname 
>> for each user is “username.cloud.robotraconteur.com 
>> <http://username.cloud.robotraconteur.com/>”, where username is 
>> replaced with the registered username.For instance, 
>> “johnw.cloud.robotraconteur.com 
>> <http://johnw.cloud.robotraconteur.com/>” would be the hostname 
>> “johnw”. The port must not be included. Nodes connecting to the cloud 
>> service must all have issued certificates tied to the uuid of the 
>> node (nodeid). This communication is always secured through DTLS at 
>> the WebRTC layer.Security of the overall cloud is managed by the 
>> Robot Raconteur server. The hostnames for each user are only relevant 
>> within the signaling server and do not have any general use DNS 
>> meaning. “rr” and “rr+cloud” are equivalent. The path must be “/” or 
>> empty.
>

-- 
John Wason, Ph.D.
Wason Technology, LLC
PO Box 669
Tuxedo, NY 10987
(518) 279-6234
[email-masked]

---

From: "Roy T. Fielding" <[email-masked]>
Date: Tue, 1 Dec 2015 16:28:36 -0800

> On Dec 1, 2015, at 2:31 PM, John Wason <[email-masked]> wrote:
> 
> Claiming that the different scheme types are simply "proxies" is inaccurate.  The different transport types have incredibly important performance and security implications that are best transmitted as a single piece of data.  Also, a single client can connect to different services using different transport types so there isn't really a single place that the "proxy" can be specified. The chances of a user getting a two piece connection command correct vs just changing a few letters in the URI are remote. The "click to connect" type usage would not work.  Because Robot Raconteur mostly runs on LAN the DNS system is not used for many connections.  Because of this the same URI with only the scheme changed can connect to different services. This means that the "proxy" specification would point to a different resource which is also not a correct usage of the "proxy" concept.

I meant that the software is relying on an intermediary/broker in the form of your
service that is being discovered via UDP (or directed to via some other configuration)
in the form of a two-piece connection command, which your own description uses to
construct a single-piece URI.  I am saying you can keep them separate and avoid
registering so many schemes.

This does not imply all your services go through a single proxy.  It just means
there is an obvious two-step being performed similar to how HTTP uses proxies:
1) connect to some arbitrary connection-based transport service;
2) use raconteur on that service.

How you get to that intermediary is obviously important and can be specified with
one URI.  Everything else in your description involves queries to that intermediary
after the connection has been established.  That's why you can have one URI that
identifies the service and another URI that is specific to Robot Raconteur.
Your software already knows it is using RR. You don't need a separate identifier
scheme to tell you that the purpose of the connection is RR.

NOTHING in your description indicates that these two different purposes need to
be combined into a single identifier field.  If we are talking about an information
service with hypertext-style interactions using existing formats (like HTML),
then we would need a single identifier because we intend to include the links
as resource references.  If we are talking about a browser plug-in that relies on
the scheme name to be activated, then one of the schemes needs to be specific to
RR (but it really doesn't matter which one).

> "For example, the +ws(s) identifiers appear to just be an alias of ws and wss."
>  
> No they aren't.  The protocol needs to be specified.  It is true that rr+ws etc. are compatible with WebSockets but it is just a stream wrapper.  The rr+ws is critically important to the software library to identify how to connect to the service.

ws is just a stream wrapper. What you do inside that wrapper is not in the URI
because it is intentionally non-standard and already known to both client and
server.

>  "rr and rr+cloud are being defined as aliases = VERY BAD.  There is no reason to do that."
> 
> Except that for users there may be cases where one is more clear than the other.

That is not a reason to alias an entire space of identifiers.

....Roy

---

From: John Wason <[email-masked]>
Date: Tue, 1 Dec 2015 20:09:32 -0500

How is what I am requesting any different than the RTSP protocol:

rtsp - Real Time Streaming Protocol
rtsps - Real Time Streaming Protocol over TLS
rtspu - Real Time Streaming Protocol over UDP

or the various iris protocols:

iris
iris.beep
iris.lwz
iris.xpc
iris.xpcs

or the example I used earlier:

svn - subversion
svn+ssh - subversion over ssh

or xmlprc

xmlprc.beep
xmlrcp.beeps

The format I am requesting is in common use to specify the transport 
information. I am using "+" because the newer standard says not to use 
dots without a DNS registration.

-- 
John Wason, Ph.D.
Wason Technology, LLC
PO Box 669
Tuxedo, NY 10987
(518) 279-6234
[email-masked]

---

From: <[email-masked]>
Date: Tue, 1 Dec 2015 19:44:46 -0600

While you are correct that there are a number of schemes with compound names, my sense is that if their authors came to this list for advice today they might well be advised to consolidate their scheme. A lot of what is listed is just documenting legacy practices. 

For example, rather than have a separate git+ssh scheme, git clients accept ssh URIs. If I were implementing a protocol that optionally accepted TLS, I might activate it automatically if I receive a STARTTLS command (as configured by the client or server) rather than use a separate scheme. 

That isn't to say your proposal is unreasonable, just that it might benefit from what others have learned from past schemes on how to simplify things. 

-----Original Message-----
From: Uri-review [mailto:[email-masked]] On Behalf Of John Wason
Sent: Tuesday, December 1, 2015 7:10 PM
To: Roy T. Fielding
Cc: [email-masked]
Subject: Re: [Uri-review] URI scheme registration request

rtsp - Real Time Streaming Protocol
rtsps - Real Time Streaming Protocol over TLS rtspu - Real Time Streaming Protocol over UDP

iris
iris.beep
iris.lwz
iris.xpc
iris.xpcs

svn - subversion

or xmlprc

xmlprc.beep
xmlrcp.beeps

The format I am requesting is in common use to specify the transport information. I am using "+" because the newer standard says not to use dots without a DNS registration.

On 12/1/2015 7:28 PM, Roy T. Fielding wrote:
> I meant that the software is relying on an intermediary/broker in the 
> form of your service that is being discovered via UDP (or directed to 
> via some other configuration) in the form of a two-piece connection 
> command, which your own description uses to construct a single-piece 
> URI.  I am saying you can keep them separate and avoid registering so many schemes.
>
> This does not imply all your services go through a single proxy.  It 
> just means there is an obvious two-step being performed similar to how HTTP uses proxies:
> How you get to that intermediary is obviously important and can be 
> specified with one URI.  Everything else in your description involves 
> queries to that intermediary after the connection has been 
> established.  That's why you can have one URI that identifies the service and another URI that is specific to Robot Raconteur.
> Your software already knows it is using RR. You don't need a separate 
> identifier scheme to tell you that the purpose of the connection is RR.
>
> NOTHING in your description indicates that these two different 
> purposes need to be combined into a single identifier field.  If we 
> are talking about an information service with hypertext-style 
> interactions using existing formats (like HTML), then we would need a 
> single identifier because we intend to include the links as resource 
> references.  If we are talking about a browser plug-in that relies on 
> the scheme name to be activated, then one of the schemes needs to be specific to RR (but it really doesn't matter which one).
>
> ws is just a stream wrapper. What you do inside that wrapper is not in 
> the URI because it is intentionally non-standard and already known to 
> both client and server.
>

--
John Wason, Ph.D.
Wason Technology, LLC
PO Box 669
Tuxedo, NY 10987
(518) 279-6234
[email-masked]

---

From: Ted Hardie <[email-masked]>
Date: Wed, 2 Dec 2015 08:39:05 -0800

> provides new identifiers.
​Roy, I understand your preference, but using different schemes to indicate
different protocol mechanics instead of different identifiers has certainly
been done in the past; RFC 3981 is one example.

Given that we're trying to encourage provisional registration by making it
a low bar, I don't think blocking on something that we've done in standards
track documents is appropriate.​  There's certainly nothing in RFC 7595's
guidelines for provisional registrations that would suggest we should block
on this.

If this is intended to be an interim step toward permanent registration,
then I'm sure the feedback will be considered.

regards,

Ted

> The TCP Transport operates by connecting to a remote port and then using
> the Robot Raconteur protocol to communicate.  The official listen port is
> 48653.  The path must be “/” or empty. The first handshake contains the
> target nodeid and/or nodename to identify which node should be connected.
>  Both can be blank to connect to the default node on the endpoint.  The
> communication can be wrapped in TLS using Start TLS semantics.  The first
> message contains the target nodeid and/or nodename and a flag to start
> using TLS.  The server node then provides a certificate signed by Wason
> Technology, LLC issued to the UUID (nodeid) of the node.  The client can
> also provide a signed certificate to provide certificate based
> authentication.
>
> Discovery for TCP is accomplished through UDP packets that are broadcast
> periodically on port 48653.  The packets contain the nodeid, nodename,
> the connection URI, and some additional metadata to help identify the
> capabilities.  The information is generally only used to connect to the
> “Service Index” that runs on all nodes.  This index provides detailed
> information about the services available and how to connect.  The clients
> will interrogate the nodes through the Service Index to determine if the
> node matches the search criteria.  During this process it will also
> verify the TLS certificates if appropriate.
>
>
> Okay, it sounds like you have two identifiers: one for the service index
> and one for the node within that service.
> The WebSocket transport is an extension to the TCP transport and in the
> software is directly integrated into the TCP transport.  It works by
> wrapping the TCP transport data into WebSocket binary frames. The frame
> boundaries are ignored as the stream is reassembled on the receiving end.
>  The frames however shall be equal to or less than 4 KB of data per frame.
>
>
> The transport also implements the HTTP handshake to start the WebSocket
> protocol using the subprotocol “robotraconteur”. The URI contains the path
> to the WebSocket and query information, both of which are passed unmodified
> to the server. The URI must contain a query parameter named “service” to
> identify the name of the service to connect.
>
> detecting and accepting an HTTP WebSocket connection to the root file path
> “/” on the same port that listens for standard Robot Raconteur connections.
> This allows for standard web browsers to connect without additional
> plugins. (Note that HTTPS (wss) is not possible in this configuration. See
> below.)
>
> TLS is somewhat complicated with WebSockets due to the handshake behavior.
>   There are four flavors of WebSocket connections:
>
> ·         rrs+ws – Encryption using the TLS Robot Raconteur transport.  This
> does not encrypt the HTTP handshake.  For local network use connecting to
> a device this should be sufficient as the handshake only contains the
> target nodeid/service information which is not considered secret data. Just
> after the handshake the Robot Raconteur TLS layer is activated protecting
> any secret data. (HTTP)
> ·         rr+wss – Encrypted HTTPS transport but no Robot Raconteur
> encryption.  Not recommended because the target node identity is not
> verified. (HTTPS)
> ·         rrs+wss – Encryption HTTPS transport and TLS Robot Raconteur
> transport.  This will encrypt the HTTP handshake and allow for identity
> verification of the node.  Note that this is only possible when the
> target node has an official HTTPS certificate which is not available for
> IoT type devices.  In those cases rrs+ws should be used as it is designed
> for such scenarios. rrs+wss should only be used when it is determined to be
> truly necessary.
>
>
> between nodes on the same machine.  The nodeid and/or nodename are used
> to identify the target nodes.  The host is always “localhost”.  A
> “username@localhost”.  The port is never used and must be left out of the
> URI. Access control is accomplished through file permissions and standard
> username/credential access control. Untrusted software shall not be allow
> local transport access. The path must be “/” or empty.
>
>
> Hardware device drivers are implemented through a userspace daemon service.
>   This service provides UNIX socket / Named Pipe connections that allow
> nodes to access the devices.  Access control is accomplished through file
> permissions.  Generally only admin or equivalent users are given access.
> Untrusted software shall not be allow local transport access. The path must
> be “/” or empty.
>
>
> The cloud transport is a transport based on WebRTC.  The signaling as
> accomplished through the Robot Raconteur server.  Nodes are identified by
> the Robot Raconteur username and nodeid/nodname pair.  The hostname for
> each user is “username.cloud.robotraconteur.com”, where username is
> replaced with the registered username.  For instance, “
> johnw.cloud.robotraconteur.com” would be the hostname “johnw”. The port
> must not be included. Nodes connecting to the cloud service must all have
> issued certificates tied to the uuid of the node (nodeid). This
> communication is always secured through DTLS at the WebRTC layer.  Security
> of the overall cloud is managed by the Robot Raconteur server. The
> hostnames for each user are only relevant within the signaling server and
> do not have any general use DNS meaning. “rr” and “rr+cloud” are
> equivalent. The path must be “/” or empty.
>
>

---

From: Graham Klyne <[email-masked]>
Date: Wed, 02 Dec 2015 20:40:23 +0000

FWIW, opining here as as designated scheme reviewer for IANA:

Ted is right about the low bar to encourage provisional registration.  But I'm 
noting the discussion and am minded to request a note added to the registration 
(when it happens) to the effect that the multiplicity of URI scheme names is not 
without controversy, and that this should be noted if there is a subsequent 
request to advance to permanent registration of the schemes.

I hope that the submitter will note the comments made here and consider the 
extent to which the multiple schemes are needed to serve the goals of longer 
term interoperability of systems that use them.

#g
--

---

From: John Wason <[email-masked]>
Date: Thu, 3 Dec 2015 22:22:41 -0500

I think for now I will continue the request as it stands for the 
provisional registration.  My goal at the moment is to prevent 
conflict.  A formal standard is far enough off in the future due to IP 
issues that I don't think it is that important to worry about now.

On 12/2/2015 3:40 PM, Graham Klyne wrote:
> Ted is right about the low bar to encourage provisional registration.  
> But I'm noting the discussion and am minded to request a note added to 
> the registration (when it happens) to the effect that the multiplicity 
> of URI scheme names is not without controversy, and that this should 
> be noted if there is a subsequent request to advance to permanent 
> registration of the schemes.
>
> I hope that the submitter will note the comments made here and 
> consider the extent to which the multiple schemes are needed to serve 
> the goals of longer term interoperability of systems that use them.
>
> #g
> -- 
>
>
>>> For example, the +ws(s) identifiers appear to just be an alias of ws 
>>> and
>>> wss.  Aliases are bad.
>>> using
>>> broadcast
>>> index
>>> and one for a single rr scheme that identifies the rr node ("/" 
>>> being the
>>> index itself)?
>>>
>>> Also, TLS implies TCP.  For most schemes, the bare name is TCP and 
>>> {name}s
>>> is TLS.  So, rr and rrs, or
>>> raconteur and raconteurs if you want to be more descriptive. Using 
>>> plain
>>> rr to indicate the WebRTC
>>> transport is very odd.
>>>
>>> *WebSocket Transport*
>>>
>>> behavior.
>>> for
>>> This just describes several access mechanism which will (after 
>>> accessing)
>>> make use of rr identifiers.
>>> Likewise, not an identifier. You don't need an identifier for every 
>>> local
>>> configuration option.
>>>
>>> *Hardware Transport*
>>>
>>> ·         rr+usb
>>> ·         rr+pci
>>>
>>> service.
>>> In other words, what you are defining here is an identifier space 
>>> for rr
>>> nodes and then a
>>> bunch of proxy mechanisms for obtaining access to those identified 
>>> nodes.
>>> We don't do that
>>> by multiplying schemes!  We do it by sending two identifiers: one 
>>> for the
>>> proxy and one for

-- 
John Wason, Ph.D.
Wason Technology, LLC
PO Box 669
Tuxedo, NY 10987
(518) 279-6234
[email-masked]