Subject: [Taps] Preconnection Confusion

From: Martin Duke <[email-masked]>
Date: Mon, 7 Jun 2021 10:51:41 -0700

In my slow-moving implementation project, I have finally gotten to setting
up the preconnection. After reading through the api-drafts, I still lack a
clear picture as to what data items TAPS is tracking after the
Preconnection call.

My perception of this is too foggy to file a useful issue yet.

1) The preconnection inputs are a list of endpoints, the transport
priorities, and the security priorities. AFAICT the one thing the drafts
explicitly ask of TAPS with a new preconnection is fail immediately if the
required and prohibited transport properties result in no viable protocol
choices. So what is TAPS doing with the other arguments at this stage? It
seems like it's only during connection establishment that we resolve the
endpoints into addresses, so why isn't this just sent as an argument to the
Connection establishment calls? It would appear the application is simply
passing a bunch of stuff to TAPS to hold until it's actually needed for a
later call.

My initial, lazy reading made me think that the preconnection was building
the candidate tree by resolving hostnames, etc. That appears to not be the
case, but the text is not super clear to me.

Of course, since establishing a preconnection does not return an event, it
is synchronous and could not do anything with unbounded latency, like a
hostname resolution.

2) Relatedly, but at the risk of going too deep into the
"implementation-dependent," it would be nice for applications if there
could be a standard as to whether these objects are immutable after being
passed. In other words, either
(a) The application passes an endpoint to create the preconnection; if
there are later changes/additions to the endpoint, that updates the
preconnection as well.
(b) Later changes to the endpoint object do not affect the preconnection,
meaning TAPS needs to do a deep copy.
(c) The endpoint object is no longer accessible to the application after
passing through the preconnection, meaning that it would be very useful to
have a cloning method in the object.

Is there a consensus on which of the choices is most desirable?

I am probably missing something obvious here. I hope these questions make
sense to people.

Regards,
Martin