Peter,
The danger with adding the codepoint for
"syntax2002" is that it does not necessarily encompass all of the rules
for version 2, 3, etc. Since those future versions do not exist,
it presents us with certain problems.
Perhaps the right solution is
two-fold:
- Add a new "syntax2002" field
- Allow the called endpoint to modify the
version number field in the Fast Connect proposal. It could
*not* change it if the calling device is version 0 or not using the
new "syntax2002" field, but we could add a rule that says that if the
calling device included "syntax2002", it also means that the called
device may change the version number in the reply to indicate the
actual supported version.
If we do (2), then we need to change the language
in H.323 to say that parameters shall not be changed, unless explicitly
allowed by the particular "controlling media profile document".
For T.38, that would be Annex D/H.323. For V.150.1, that would be
Annex P/H.323.
The video codec issue is an interesting one...
several options can be proposed with various capabilities, but they
can't be changed.
There is an implementation approach that could be
used to solve these kinds of issues, but some folks don't like it.
That is: don't use Fast Connect at all-- just do termcap exchange and
only open media channels and ring the remote phone once caps are
exchanged and media is opened. Regardless of whether H.245 is
tunneled or on a separate connection, the exchange of all required
messages can be done in about 3 TCP packets per side.
As for the requirement that H.245 tunneling be
used with Fast Connect--- yes, the requirement is there, but folks
ignore that like they do other requirements in the standard ;-)
The wording might be "must support tunneling", which does not mean it
has to be used.
Fast Connect certainly has certain advantages over
H.245, but if we had never introduced Fast Connect in the first
place, I suspect nobody would think something is missing. Most
likely, folks would have engineered their products to send TCS right
away, would not have alerted the user until media was established,
etc. They would have optimized their code to send TCS,MSDet,OLC in
the first outgoing message, replied with TCS,TCSAck,MSDet,OLCAck,OLC in
the reply TCP packet, and then TCSAck,OLCAck in the sender's second TCP
packet. In the rare case where the proposed OLC is not acceptable,
it would require an extra exchange of messages, but certainly no worse
than Fast Connect today.
I'm actually working on a new extension to H.323
to allowing the calling endpoint to explicitly request that the call
establishment be delayed until a certain point (e.g., bi-directional
media channels are opened). The calling side can control when it
lets the call proceed. Likewise, the called side can control it by
not acknowledging that the requested "delay point" has been
reached. This might be the better way to handle T.38.... except
that, as you point out, there are Fast Connect-only T.38
devices.
My head hurts...
I really hate to break the rules about changing
the attributes of a Fast Connect proposal.
Here's another thought: What if we add text
to Annex D/H.323 that says that if the proposed version is not
supported, then it shall not accept the proposal. If it wants to
offer a "counter proposal", it has two means: H.245 signaling or H.460.6
(Extended Fast Connect).
Paul
----- Original Message -----
Sent: Thursday, September 11,
2003 3:53 AM
Subject: RE: H.323 Fast Connect
and Versioning
Paul,
as I said before any solution is likely to be
a bit dirty because of the nature of the problem. I think your
"syntax2002" suggestion is perfectly valid - it is a smaller more
localised change and, especially given the reluctance to add new code
points, is probably a better alternative than t39faxV2. It only
requires a single change to T38FaxProfile rather than changes to both
DataApplicationCapability and DataApplicationMode. There is no
danger that the change could affect anything other than T.38 aware
endpoints.
On the subject of H245 tunneling, the problem
scenario we're discussing is Fast Connect and I thought that H.323 V4
says that endpoints using Fast Connect shall use H.245
tunneling! It doesn't do much for pure T.38 endpoints which
don't do any H.245 though.
The thread has suggested two approaches
1. resolve the issue within the Fast
Connect proposal (or any subsequent requestMode/OLC
etc)
2. resolve the issue by modifying some other
part of the standard by introducing "special
cases"
As an implementor, I would prefer to
see a solution within the Fast Connect proposal rather than force
other changes in the standard - the danger of going that route is you
don't know what the downstream consequences are going to be.
Containing the solution in T38FaxProfile keeps implementation
simpler - you receive a message and you know exactly what you are
doing without having to go looking for other information.
Logically, the tunneled H245 messages arrive after the Setup message
and its easier to process the Setup completely before starting to look
at the H.245.
Furthermore, if H.323 endpoints are to remain
interoperable with pure T.38 endpoints (are there any?) then the
solution *must* be contained within the Fast Connect
proposal.
You suggest that "syntax002" is a bit of a
kludge. It probably is but it does have the advantage of being
isolated. I think that "special cases" in the standard that may
have unforeseen consequences for endpoints that are not
interested in T.38 are very much worse.
------------
A slight aside here (but
related).
Your remark about the way that all endpoints
appear to decode and re-encode the Fast Connect proposals implies that
the rule for not changing the proposals is effectively impossible to
maintain.
I only work with audio endpoints that use the
basic audio codecs and T.38 so until this discussion started hadn't
really thought about this issue. It's easy to say you musn't
change, say, the frame count of G729 but for codecs that are
defined as extensible like T.38 (and all the video codecs) there will
always be a problem when new endpoints offer new features to old
endpoints.
Perhaps the Fast Connect rule needs some
review to address the specific issue of extensible
capabilities.
Have video endpoints already encountered this
problem?
Do any video endpoint
implementors have any relevent comments here?
Peter
Peter,
I've only seen this problem with
fax. To answer your last question, I've only seen T.38 use
this kind of version tag. However, V.150.1 also has versioning
information as part of the object identifier that identifies the
capability. This will be interesting to see if we introduce
the same kind of problem there. In general, it's just not good
to advertise the version through an OLC... it's better to perform a
full caps exchange. The trouble is that modem and (to some
extent) fax timings are such that we must open channels ASAP...
before a caps exchange. (Actually, we could transmit the
termcap set in the Setup message, but few devices support
that.)
We have had non-compatible payload
specifications before and we resolved that by adding new code
points. However, we've been trying to avoid that. Even
so, we could do it again... it's just less desirable.
I had another idea. What we could do is,
within the t38faxProtocol SEQUENCE, we could indicate which syntax
is to be used. Older devices would not see this field and
would not decode it. So, when the reply is re-encoded, it
would not be present. So, even if the version was set to "2",
the "Syntax2002" field, say, would not be present. This would
mean that the 1998 syntax has to be used. A newer endpoint
would see the field and would properly re-encode it in the
reply. This is a bit of a kludge and works only because of the
way the ASN.1 encoding/decoding works with every device I've
seen.
Another solution to the problem might be to
require that endpoint use H.245 tunneling and to advertise their
capabilities in the Setup message. That could allow us to
avoid this problem entirely. I'm just not sure how excited
people would be to be forced to use H.245 tunneling every time they
use fax, modem, or text relay.
Paul
----- Original Message -----
Sent: Wednesday, September
10, 2003 12:34 PM
Subject: RE: H.323 Fast
Connect and Versioning
Paul,
I
wrote the first part of this email and then reread yours - I was
bogged down in the fax issue but I think you are actually raising
a wider issue aren't you? See part 2
below.
-------------------------- Part 1
I
don't believe that 5 versions of T38 would result in 5 offered
channels.
The need for the different capability is
due to the fact that what you are offering is a payload that is
encoded in a different and incompatible way.
ie its a bit like offering
G.729 and the sending packets encoded according to G.723.1,
they both represent speech but they are not going to be
played out properly. The
single extra bit introduced into the T.38 payload packet by the
2002 ASN.1 is backwards
incompatible.
The problem only exists for endpoints that
only know about the 1998 ASN.1 and are unaware of the incompatibility - it is important
that they do not think they can accept the offered
channel.
Once an endpoint is aware of the problem
(ie it knows about the 2002 ASN.1) then it can handle versions
>= V2 (as well as V0 and V1). Of course, this does assume that a
similar incompatibilty
does not creep into the payload ASN.1 in future versions -
but that's down to careful work in the standard development and
editing stage.
I still think adding t38faxV2 (say) to
DataApplicationCapability and DataApplicationMode is the simplest
solution
[ t38faxV2
would use the same definitions for t38FaxProtocol and
t38FaxProfile - its only the payload that has changed
]. This
protects the existing T.38 implementations and avoids the need to
break the rule about modifying Fast
Connect proposals.
The change in the T.38 payload ASN.1
breaks the fundamental backwards compatibility that ASN.1 is
supposed to guarantee
and thus whatever the final solution there has to
be an element of a hack involved - I think that this change would
isolate the change and protect the rest of the
standard.
-------------------------- Part 2
The versioning issue applies to any form of payload,
voice/video/fax/whatever.
The problem is still going to exist in early versions of
endpoints that don't understand the consequence of accepting
versions that they do not understand fully. If a new version
of a codec's payload is
not backwards compatible then I would assert that it is a new
codec and must be signalled as a different
capability.
The
issue of multiple variations already exists anyway although not
(to my knowledge) with version numbers.
Endpoints already offer multiple packet sizes for exactly
the reason that you are not supposed to alter the Fast Connect
proposal. What happens when somebody starts to offer
g729Extensions and has to offer all the combinations of Annexes
because they don't know what the other end can use ( I make that
64 proposals in each direction without adding further annexes!
)?
I don't see that relaxing the rule
about modifying the version in a Fast Connect channel will
help resolve the problem of having
to offer multiple proposals. You either have to allow
*anything* to be modified or stick to the current rule.
Exceptions allowing certain fields to be modified just
makes life much more difficult and
confusing.
T.38 is the only codec I am aware of that
actually uses a version
number in this manner.
Are there any others?
Why was it introduced
in T.38? Perhaps this is a
lesson for the future about the value of introducing of such a
field in other codecs.
Peter
Peter,
I think you're on the right track.
We could avoid ASN.1 changes by introducing the new capability
as a generic data capability, but a new capability is required
here, I think.
The problem, as I see it, is that when we
use Fast Connect, we can't alert the calling side as to what
version the called side actually supports. This suggests
that if we have 5 versions of T.38, the calling side would have
to propose a channel for each version independently.
That's horrible. It's only complicated further by the fact
that T.38 may not be signaled by itself-- it might be part of
audio proposals that also include modem, text over IP, VBD, or
other media. It might even be that there are several
versions of the modem (V.150.1) protocol
advertised.
I think the only real solution to this
problem is to allow the Fast Connect proposals to be altered by
the called endpoint such that they can change the version
number.. and nothing else. H.323 has an explicit statement
that says that the proposals can't be modified before returning
them, but perhaps this simple exception might resolve these
issues. I think without such, it's going to be terrible
complicated.
Paul
----- Original Message -----
Sent: Wednesday,
September 10, 2003 3:23 AM
Subject: RE: H.323 Fast
Connect and Versioning
Paul wrote
"Perhaps we can require the
calling device to not transmit any data until it receives at
least one IFP packet from the called side and determines the
ASN.1 version used to encode the message."
Unfortunately this won't work -
although typically the called endpoint will provide the first
IFP (Probably a CED) this doesn't work when you poll for a fax
- in that case the calling endpoint will probably want to send
the first IFP.
The only way I can see out of this is
to add a new data application (say, t38faxV2) to
DataApplicationCapability etc in the H.245
ASN.1. t38fax would use the 1998 ASN.1 and
t38faxV2 would use the 2002 ASN.1 - and future carefully
checked modifications ;-). Now there's no problem, a
2002 aware endpoint can offer both versions and a 1998 aware
endpoint can only accept the ASN.1 it
understands.
Pete
Price
Vegastream
Limited
Folks,
Today, I was exchanging e-mail with
somebody over the fax version number issue and the different
syntax that is used (1998 vs 2002).
If we open H.245 and exchange a full
set of capabilities, and H.323 endpoint could determine the
version supported by the other side and open a channel
supporting that particular version. However, I don't
think any text is explicitly clear on that.
Another scenario-- and one I have
more trouble with-- is Fast Connect. If a calling
endpoint populates the fastStart element with "version 2"
proposals, for example, the called side (say, a version 0
device) might accept the proposal and return the
response. However, it is not allowed to modify the
version field. The reason is that Fast Connect
proposals are not ordered in a way such that replies must be
ordered the same way. Rather, the calling device
determines which proposals are accepted based on
characteristics of the proposals returned (e.g., codec type,
samples per packet, or other information). In some
cases, a calling endpoint will actually not try to "match"
the proposal returned, but just accept it as a proposal and
run with it.
The problem is that if a calling
device proposes version 2 and the called device returns
version 2 (but is actually a v0 device), then the wrong
syntax will be transmitted on the wire. Thus, the text
needs to state somewhere one of these options (or something
similar):
- The calling device must offer a
proposal for each version it wants to potentially use and
the called device must accept the first proposal it can
accept (in order of the proposals) and the called device
must not accept any proposal for a version it does not
support
- The calling device must wait for
capability exchange to complete to determine the actual
supported version of the other device
Alternatively, we could make an
allowance for the endpoint to change the version number in
the Fast Connect proposal, but I don't think that's a good
idea, as it would quite possibly break interoperability with
some devices.
What would a version 0 device do today
if it received a Fast Connect proposal advertising version
2? Would it accept it? I suspect so and I'm
afraid that we might have some interop problems regardless
of the direction we go.
Perhaps we can require the calling
device to not transmit any data until it receives at least
one IFP packet from the called side and determines the ASN.1
version used to encode the message. As much as we can
push onto the shoulders of a v2 device, the better, as I
don't think we have any real deployments in the field
(yet)... might be wrong, but I think it would be a far less
significant impact on that side.
I'm open to suggestions. Perhaps
this issue is even addressed and I've simply overlooked
it.
Thanks,
Paul