Re: [Wish] Genart last call review of draft-ietf-wish-whip-09

Sean Turner <sean@sn3rd.com> Sat, 12 August 2023 02:33 UTC

Return-Path: <sean@sn3rd.com>
X-Original-To: wish@ietfa.amsl.com
Delivered-To: wish@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E2E0BC151541 for <wish@ietfa.amsl.com>; Fri, 11 Aug 2023 19:33:03 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.106
X-Spam-Level:
X-Spam-Status: No, score=-2.106 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=sn3rd.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qSExnQgdqbbu for <wish@ietfa.amsl.com>; Fri, 11 Aug 2023 19:32:59 -0700 (PDT)
Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6C64AC151093 for <wish@ietf.org>; Fri, 11 Aug 2023 19:32:59 -0700 (PDT)
Received: by mail-qk1-x72e.google.com with SMTP id af79cd13be357-7656652da3cso189524485a.1 for <wish@ietf.org>; Fri, 11 Aug 2023 19:32:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sn3rd.com; s=google; t=1691807578; x=1692412378; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=UVE5EKxnX/LDhyI+TXGCq3V6g/iqU7eGAJApqCwyxHw=; b=nX8WZzpLTh5c39yCvt/Px5EhT/W11Vw90be1+TCihkx5Qydxs24ixnY20i3qEAxYiP uSxpyGkQKJeNzz7tAlK2jn2GiCGhzhkx6hO1otx8BXve7/I+lyJfkMB5/r2+G6pdEEMp RiBXTxU2ThOtuSUhkX697Hox1T1hwaIPvgaCg=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691807578; x=1692412378; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UVE5EKxnX/LDhyI+TXGCq3V6g/iqU7eGAJApqCwyxHw=; b=e/kGVz+X0Ms5XMpVRxEECIoIFrcTVpPXfqlXtKzEcAO690UUYU1j6adsXi7dFYL2i9 EWZC5JvbBArBQ0duD2IweCMrHOusjDp9nH8a7xWBy/MI2zNs+JfFgAbFuXEeiKLs9XWh kTS8gwwkd9ftnhfO83C5zFyDXn3nS6qhDZBmvv3F5qetIiKcY3jCAsy9aREJR0vwgnCN k9vCx9MxKgC9KHbqlxLBf5AMB/hXEP6zR957P/QCityCkCyWwoO8/OJUSkyVAR72/7W+ 0SNO8gMLxHr9e5uUIh+GFmGcDhwxKyQqzH+Wx7xhQ4uu5JrparsAGIZmWjR831bzpHfZ rhnw==
X-Gm-Message-State: AOJu0YwnqLlOAxMWwHoqEcM2QBEX6JGy1totFbAJvXvFVQDBLtDZs70v 7oOqcJJAvNXg3KD+HXrh/VMIdA==
X-Google-Smtp-Source: AGHT+IEAGXm17BCkvbGNM3UFW6AsT1yBiqaTl3fNhkOpzp+bT1QWl7p5SRpxluz7T9U0tgTMWAkB1A==
X-Received: by 2002:a05:620a:852:b0:768:535:5950 with SMTP id u18-20020a05620a085200b0076805355950mr3603426qku.68.1691807577778; Fri, 11 Aug 2023 19:32:57 -0700 (PDT)
Received: from smtpclient.apple ([2600:4040:253b:7300:38c7:8b0:b396:18d]) by smtp.gmail.com with ESMTPSA id o20-20020a0ccb14000000b0063c6c7f4b92sm1651134qvk.1.2023.08.11.19.32.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Aug 2023 19:32:57 -0700 (PDT)
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\))
From: Sean Turner <sean@sn3rd.com>
In-Reply-To: <169150952187.16313.7471460147046530522@ietfa.amsl.com>
Date: Fri, 11 Aug 2023 22:32:56 -0400
Cc: gen-art@ietf.org, draft-ietf-wish-whip.all@ietf.org, last-call@ietf.org, WISH List <wish@ietf.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <4A15E072-56E4-4BDE-9F16-3E7B095FB9DC@sn3rd.com>
References: <169150952187.16313.7471460147046530522@ietfa.amsl.com>
To: Dale Worley <worley@ariadne.com>
X-Mailer: Apple Mail (2.3654.120.0.1.15)
Archived-At: <https://mailarchive.ietf.org/arch/msg/wish/gdQbwGJJTkA0wQDFhzlwhoK50Vc>
Subject: Re: [Wish] Genart last call review of draft-ietf-wish-whip-09
X-BeenThere: wish@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: WebRTC Ingest Signaling over HTTPS <wish.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/wish>, <mailto:wish-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/wish/>
List-Post: <mailto:wish@ietf.org>
List-Help: <mailto:wish-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/wish>, <mailto:wish-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 12 Aug 2023 02:33:04 -0000

Dale,

Hi! Just a heads up that Sergio is out on PTO until early September.

spt

> On Aug 8, 2023, at 11:45, Dale Worley via Datatracker <noreply@ietf.org> wrote:
> 
> Reviewer: Dale Worley
> Review result: Ready with Issues
> 
> I am the assigned Gen-ART reviewer for this draft. The General Area
> Review Team (Gen-ART) reviews all IETF documents being processed
> by the IESG for the IETF Chair.  Please treat these comments just
> like any other last call comments.
> 
> For more information, please see the FAQ at
> 
> <https://trac.ietf.org/trac/gen/wiki/GenArtfaq>.
> 
> Document:  draft-ietf-wish-whip-09
> Reviewer:  Dale R. Worley
> Review Date:  2023-08-08
> IETF LC End Date:  2023-08-08
> IESG Telechat date:  [not known]
> 
> Summary:
> 
>    This draft is on the right track but has open issues, described in
>    the review.
> 
> The exposition could be clarified in several places.  A few of the
> clarifications could be considered technical issues.  I list the
> issues in textual order, with an initial summary of the most important
> issues.
> 
> * Summary of the major issue:
> 
> A very important aspect of this document is that it defines the usage
> of "ICE via SDP via HTTP", equivalently, "supporting ICE offer/answer
> over HTTP" (as opposed to the original "ICE via SDP via SIP").  That
> definition likely will have broader usage than just WHIP.  But the
> document suffers from the "expert's disease", in that the authors
> clearly have deep knowledge of ICE and consequently only document the
> details of the ICE processing without providing any of the framework.
> This leaves naive readers to reconstruct the big picture.  I was going
> to add "As far as I can tell, all of the needed details are listed
> somewhere in section 4", but as you can see below, once I wrote an
> outline of what is needed, there are a few points that don't seem to
> be specified, at least not to the point that I recognized it.)
> 
> I suggest that section 4 be organized by:
> 
> - stating that it is defining "supporting ICE offer/answer
>  over HTTP" (so that it can be clearly referenced by later
>  specifications)
> 
> - specifying the abstract operations involved (with the mapping to
>  specific operations listed either in this list or a later list):
> 
> - - starting the ICE negotiation (via POST carrying
>    application/sdp)
> 
> - - updating the ICE when trickling (via PATCH carrying
>    application/trickle-ice-sdpfrag)
> 
> - - restarting ICE (via PATCH carrying (via PATCH carrying
>    application/trickle-ice-sdpfrag, but it's not clear how this is
>    distinguished, RFC 8840 does not specify it; perhaps because it
>    carries ice-ufrag/ice-pwd attributes (see section 4.1)?)
> 
> - - termination (via DELETE from the client; not clear how from the
>    server)
> 
> - specifying how WHIP constrains the ICE abstraction (Media server
>  MUST not do trickle ICE updates, not clear if Media server MAY do
>  ICE restarts, Media server MAY not support trickle ICE or ICE
>  restart, etc.)
> 
> - discussion of how out-of-order requests may arise (which isn't at
>  all clear to me, as requests seem to be generated only by the
>  server, and carried by TCP, so they seem to be inherently
>  serialized)
> 
> - discussion of how ETags MAY/MUST be handled, as that is
>  comprehensible only when one looks at the serialization needs of all
>  of the operations together
> 
> - specifying the particular features of each of the operations,
>  including any particulars of request and response fields and what
>  response codes are to be used for what error situations
> 
> * Summary of minor issues that might have technical content:
> 
> At various points in section 4 the text refers to a device sending a
> request or generating a response but in many of them, the text doesn't
> state whether the device is on the client or server end, or might be
> both.  I assume that the nature of the operation implies what devices
> might perform it based on text elsewhere, but it's hard to fully
> understand on the first reading pass.  If possible, each sentence
> should make this clear. -- Then again, if section 4 is reorganized to
> describe generic ICE/SDP/HTTP usage, attention should be paid that the
> generic usage may define how e.g. the server does an operation, even
> if WHIP servers may not do that operation.
> 
> Section 4 lists a collection of 4xx and 5xx response codes to be used
> in certain situations.  Are these set due to the specific semantics of
> the codes or just to ensure that the recipient can tell what the cause
> of the error was?  (HTTP suffers from having a large number of error
> responses but all of them have vague semantics.  Unfortunately, there
> doesn't seem to be an HTTP response header that can carry codes
> defined for ICE usage specifically.)
> 
> Section 4 requires the WHIP server to reject certain specific request
> methods, but no others.  Verify that you intend this specific
> limitation.
> 
> Section 4.1 references sections 6.6.2, 2.3, and 3.1 of RFC 9110.  All
> of these references appear to be incorrect, in that those sections do
> not discuss the topics at hand.  Section 4.3 references section 6.4.7
> of RFC 9110, which does not exist.  Some of these appear to be
> referencing sections in RFC 7231, which is obsoleted by RFC 9110.
> 
> Section 4.1 talks about out-of-order PATCH requests but is unclear
> about what may cause them, as the immediate implication is that
> somehow the client is sending overlapping PATCH requests.  Probably
> the authors fully understand the allowed sequences of operations that
> cause this but the text needs to clarify what is being described.
> 
> Section 4.1 has inconsistent statements about a WHIP resource's
> response code if the client requests an ICE restart but the resource
> does not support ICE restart.
> 
> Section 4.2 extends RFC 8842, and this document should be marked as
> doing so.
> 
> In Section 4.4, I notice that there's no explicit differentiation
> between the STUN and the TURN server information in returned Link
> header fields.  Please verify that either (1) the presence of username
> and credential-type differentiates the two cases, or (2) the Media
> client/server do not need to differentiate the two cases.
> 
> Section 4.7 requires POST responses to include Link headers for any
> WHIP extensions supported by the server.  Perhaps OPTIONS responses
> should be required to do so also.
> 
> The designators of WHIP extensions are described as URIs.  In fact,
> they are URNs, and it would be more precise to refer to them as URNs
> in the text.
> 
> * All issues (most of them exposition/editorial), in text order:
> 
> 1.  Introduction
> 
>   It also describes how to negotiate media flows
>   using the Offer/Answer Model with the Session Description Protocol
>   (SDP) [RFC3264] as well as the formats for data sent over the wire
>   (e.g., media types, codec parameters, and encryption).
> 
> I think "as well as" should be "including".
> 
>   RTSP [RFC7826], which is based on RTP, is
>   not compatible with the SDP offer/answer model [RFC3264].
> 
> This statement might be clarified, as the naive reader (me) considers
> offer/answer to also be based on RTP.  I suspect that the critical
> meaning is "RTSP, unlike SDP offer/answer, has no provisions for
> negotiating the characteristics of the media session."
> 
>   This document proposes a simple protocol for supporting WebRTC as
>   media ingestion method which:
> 
> I would amend to "... a simple protocol, WHIP, for ..." to have a
> clear assertion in the introduction of what WHIP is.  I would also add
> "HTTP", as the preceding text describes what WHIP *isn't* based on:
> 
>   This document proposes a simple protocol, WHIP, based on HTTP, for
>   supporting WebRTC as media ingestion method which:
> 
> --
>   *  Allows for ingest both in traditional media platforms and in
>      WebRTC end-to-end platforms with the lowest possible latency.
> 
> Verify that "ingest" is used in the field as shorthand for "ingestion"
> (rather than being a typo).  The text seems to use both words with the
> same meaning; it should probably use only one.
> 
>   *  Is usable both in web browsers and in native encoders.
> 
> I would say "standalone encoders", but perhaps this is the industry
> terminology.
> 
> 2.  Terminology
> 
> For clarity, I would move Figure 1 to after paragraph 1 of section 2
> and amend it to something like this.  Or perhaps better, relocate the
> current section 3 before section 2, so it can provide the context for
> the glossary.
> 
> +--------------+  +-------------+    +---------------+            +--------------+
> | Media client |  | WHIP client |    | WHIP server   |            | Media server |
> +------+-------+  +--+----------+    +---------+---+-+            +------+-------+
>        |             |                         |   |                     |
>        |             |                         | +-+-------------+       |
>        |             |                         | | WHIP resource |       |
>        |             |                         | +--------|------+       |
>        |             |                         |          |              |
>        |             |HTTP POST (SDP Offer)    |          |              |
>        |             +------------------------>+          |              |
>        |             |201 Created (SDP answer) |          |              |
>        |             +<------------------------+          |              |
>        |             |          ICE REQUEST               |              |
>        +---------------------------------------------------------------->+
>        |             |          ICE RESPONSE              |              |
>        |<----------------------------------------------------------------+
>        |             |          DTLS SETUP                |              |
>        |<===============================================================>|
>        |             |          RTP/RTCP FLOW             |              |
>        +<--------------------------------------------------------------->+
>                      | HTTP DELETE                        |
>                      +----------------------------------->|
>                      | 200 OK                             |
>                      <------------------------------------+
> 
> The reason to move it before the definitions is that definitions would
> be a lot clearer with the diagram already in mind.
> 
> The "WHIP client" is separated into two components, one dealing with
> HTTP and SDP and one dealing with RTP, with both being involved in
> ICE, in the same way that the server is divided into two components
> with the same division of responsibilities.
> 
> I suspect that historically, the server-side is conceptualized that
> the "Media Server" exists a priori with the "WHIP endpoint" being
> added to it as an extra unit, but the client-side is conceptualized as
> being a unitary system.  That structure makes the specification harder
> to understand, though, and I think showing the client and server with
> more parallel structures would clarify the specification.
> 
> The "WHIP resource" is shown as being a dependent of the "WHIP
> server".
> 
> The "WHIP endpoint" is renamed "WHIP server".  At least in the SIP
> world, "endpoint" is used to refer to *both* ends of one connection,
> and so the term "WHIP endpoint" would be expected to include the WHIP
> client as well.
> 
> The capitalization of "Media server" is made consistent with the other
> terms.  (See also the entry in the glossary.)
> 
> Although conceptually the left two items (Media client and WHIP
> client) and the right three items (WHIP server, WHIP resource, and
> Media server) collectively form the two end-systems of the
> client/server relationship, I have not tried to invent names for the
> two collections because there doesn't seem to be a need to reference
> them as wholes.
> 
> These changes do require adjusting the terminology in the rest of the
> document.
> 
> 3.  Overview
> 
> See comments on section 2.
> 
> 4.  Protocol Operation
> 
>   The SDP offer SHOULD use the "sendonly" attribute and the SDP answer
>   MUST use the "recvonly" attribute in any case.
> 
> You may want to extend this to "SHOULD use the "sendonly" attribute
> but MAY use the "sendrecv" attribute", since the other possible values
> are useless.
> 
> "in any case" seems redundant given the presence of "MUST".
> 
> POST /whip/endpoint HTTP/1.1
> 
> I recommend preceding each of the HTTP messages with a description of
> what the endpoints are.  E.g. "POST request from WHIP client to WHIP
> server" and "201 Created response from WHIP server to WHIP client".
> 
>              Figure 2: HTTP POST doing SDP O/A example
> 
> Perhaps more informative as "Example WHIP POST executing SDP
> offer/answer".
> 
>   Once a session is setup, ICE consent freshness [RFC7675] SHALL be
>   used to detect non graceful disconnection and DTLS teardown for
>   session termination by either side.
> 
> I think the meaning is "Once a session is set up, ICE consent
> freshness [RFC7675] MUST be maintained.  Both endpoints MUST monitor
> freshness and MUST tear down the connection if freshness is lost."
> (Note I don't know how ICE consent freshness is done, so I am assuming
> that no further details need be specified to ensure interoperability.)
> Probably the 2nd following paragraph ("A Media Server terminating...")
> can be combined with this paragraph.  Also, expand it to place the
> same requirement on the Media client.
> 
>   The WHIP endpoints MUST return an "405 Method Not Allowed" response
>   for any HTTP GET, HEAD or PUT requests on the endpoint URL in order
>   to reserve its usage for future versions of this protocol
>   specification.
> 
> This and the 2nd following paragraph only forbid a few methods, and
> allow an implementation to implement any others as extensions.  Please
> verify that these are exactly what you need.  Also, the wording should
> be "reserve their usage" because the referent is "any ... requests".
> 
>   The WHIP endpoints MUST support OPTIONS requests for Cross-Origin
>   Resource Sharing (CORS) as defined in [FETCH] and it SHOULD include
>   an "Accept-Post" header with a mime type value of "application/sdp"
>   on the "200 OK" response to any OPTIONS request received as per
>   [W3C.REC-ldp-20150226].
> 
> I think this would be less awkward as
> 
>   The WHIP endpoints MUST support OPTIONS requests for Cross-Origin
>   Resource Sharing (CORS) as defined in [FETCH].  The "200 OK"
>   response to any OPTIONS request SHOULD include an "Accept-Post"
>   header with a mime type value of "application/sdp" as per
>   [W3C.REC-ldp-20150226].
> 
> 4.1.  ICE and NAT support
> 
> Text might be added to the beginning of this section similar to the
> text at the beginning of section 4.2, as WHIP puts specific
> restrictions on ICE usage for simplicity's sake.  It seems like "NAT"
> should be replaced by something else, as "NAT" is not mentioned
> elsewhere in the document.  "STUN/TURN" seems to be natural, but there
> is a section for that (4.4).  Perhaps this section should be titled
> "ICE usage".
> 
> Also, several subsections of section 4 seem to be about usage and
> restrictions of various protocols; perhaps they should have parallel
> names e.g. "ICE usage", "WebRTC usage", "STUN/TURN usage".
> 
>   In order to simplify the protocol, there is no support for exchanging
>   gathered trickle candidates from Media Server ICE candidates once the
>   SDP answer is sent.
> 
> I think this would be clearer as follows, since that moves the fact we
> are talking about the Media server earlier in the sentence:
> 
>   In order to simplify the protocol, there is no support for the
>   Media server sending further trickle candidates once the SDP answer
>   is sent.
> 
> --
> 
>   The WHIP client MAY perform trickle ICE or ICE restarts as per
>   [RFC8838] by sending an HTTP PATCH request ...
> 
> PATCH is an unusual method, defined in RFC 5789, and it seems like
> there should be a reference for it here.
> 
> Also, you probably want to insert here a statement whether the WHIP
> resource MAY *initiate* ICE restarts; as far as I can tell, the text
> does not address this.
> 
> Also, you want to directly state that the semantics (meaning) of an
> ICE update/restart request and thus how it is to be processed, is
> determined by the body, as specified in RFC 8840.  The current text
> leaves that silently implied.
> 
>   If the WHIP resource supports either Trickle ICE or ICE restarts, but
>   not both, it MUST return a "405 Not Implemented" response for the
>   HTTP PATCH requests that are not supported.
> 
>   If the WHIP resource does not support the PATCH method for any
>   purpose, it MUST return a "501 Not Implemented" response, as
>   described in [RFC9110] Section 6.6.2.
> 
> The canonical description for "405" is "Method not allowed".  But I
> would reorganize and combine these paragraphs along these lines:
> 
>   If the WHIP resource supports either Trickle ICE or ICE restarts,
>   but not both, it MUST return a "405 Method not allowed" response
>   for HTTP PATCH requests for the feature that is not supported.  If
>   neither feature is supported, it MUST return a "501 Not
>   Implemented" response for such HTTP PATCH requests.
> 
> This allows PATCH requests for other purposes, if any of those are
> ever defined.
> 
> BTW, the reference "[RFC9110] Section 6.6.2" ("Trailer") seems to be
> unrelated to the text; please verify it.
> 
>   As the HTTP PATCH request sent by a WHIP client may be received out-
>   of-order by the WHIP resource, ...
> 
> To clarify this, I would expand it to:
> 
>   The WHIP client MAY send overlapping HTTP PATCH requests to one
>   WHIP resource.  As the HTTP PATCH request sent by a WHIP client may
>   be received out-of-order by the WHIP resource, ...
> 
> However it is unclear to me why the client would want to do this.
> Perhaps the concept is that the server may also be sending PATCH
> requests for trickle ICE etc.?  In that case, you would want to phrase
> it more like:
> 
>   As the WHIP client and the WHIP resource may be both be sending
>   HTTP PATCH requests without coordination, an HTTP PATCH request
>   sent by a WHIP client may be received out-of-order by the WHIP
>   resource, ...
> 
> In any case, you should ensure you understand the possible
> complications and explain them here to the reader.  Also, the final
> sentence of the paragraph is:
> 
>   Note that including the ETag
>   in the original "201 Created" response is only REQUIRED if the WHIP
>   resource supports ICE restarts and OPTIONAL otherwise.
> 
> I *think* this means that the entirety of the preceding paragraph is
> conditional "If the WHIP resource supports ICE restarts, the following
> complications are possible ... and so the WHIP resource must return
> ETag header fields ...".  Whatever the causation/conditions are, they
> should be put at the start of the paragraph.
> 
>   A WHIP client sending a PATCH request for performing trickle ICE MUST
>   include an "If-Match" header field with the latest known entity-tag
>   as per [RFC9110] Section 3.1.  When the PATCH request is received by
>   the WHIP resource, it MUST compare the indicated entity-tag value
>   with the current entity-tag of the resource as per [RFC9110]
>   Section 3.1 and return a "412 Precondition Failed" response if they
>   do not match.
> 
> Beware that this paragraph appears to be a continuation of the
> preceding paragraph, in that the sentence "Note ..." appears to be a
> condition on it also.  If that is true, when you relocate the
> condition to before the first paragraph, the condition should itself
> be paragraph-level, so it is clear that its scope is not ended by the
> end of the first paragraph.
> 
>   A WHIP resource receiving a PATCH request with new ICE candidates,
>   but which does not perform an ICE restart, MUST return a "204 No
>   Content" response without body.
> 
> According to the previous text, if a WHIP resource receives a PATCH
> requesting an ICE restart but it does not implement ICE restart, it
> MUST return either 405 or 501.  This needs to be clarified; perhaps
> there is a difference between "does not support" and "does not
> perform"?
> 
>   If the Media Server does not support
>   a candidate transport or is not able to resolve the connection
>   address, it MUST accept the HTTP request with the "204 No Content"
>   response and silently discard the candidate.
> 
> Note that the Media server does not generate HTTP responses in any
> case.  I assume the meaning is "the WHIP resource must accept ...".  I
> think the intended meaning is
> 
>   If a WHIP resource receives a PATCH request containing a new ICE
>   candidate with a transport that the Media Server does not support
>   or is unable to resolve the address, the resource must MUST
>   silently discard the candidate and process the remainder of the
>   request.  Typically, it will accept the HTTP request with the "204
>   No Content" response.
> 
> The last sentence is written as it is because the resource may have
> some other reason for rejecting the PATCH.
> 
>   A WHIP client sending a PATCH request for performing ICE restart MUST
>   contain an "If-Match" header field with a field-value "*" as per
>   [RFC9110] Section 3.1.
> 
> Naively, this seems questionable, as presumably all ICE operations
> need to be serialized.  Or is it that ICE restart causes all preceding
> ICE updates to become irrelevant?  Again, some explanation of the
> allowed sequencing of ICE operations and the necessary
> serialization/dependencies would be good introduction.
> 
>   Also, the "200 OK" response for a successful ICE restart MUST contain
>   the new entity-tag corresponding to the new ICE session in an ETag
>   response header field and MAY contain a new set of ICE candidates for
>   the Media Server.
> 
> This reads oddly because it combines "new ICE session" with the
> possibility that the triggering PATCH request may not include new ICE
> candidates.  What is the implied processing if there are no
> candidates?  There are two possibilities, one that the new ICE session
> starts with no candidates (in that direction), the other is that the
> previously specified set of candidates is retained.  The latter
> possibility implies that the new session depends on the previous
> session and introduces serialization requirements.
> 
>   If the ICE request cannot be satisfied by the WHIP resource, the
>   resource MUST return an appropriate HTTP error code and MUST NOT
>   terminate the session immediately.
> 
> You probably mean "If the ICE update or restart request ...".  Also,
> you probably mean "... and MUST continue the previous ICE session."
> 
>   In either case, the session MUST be
>   terminated if the ICE consent expires as a consequence of the failed
>   ICE restart as per [RFC7675] Section 5.1.
> 
> Probably intensify to "In any case, ...".
> 
>   Because the WHIP client needs to know the entity-tag associated with
>   the ICE session in order to send new ICE candidates, it MUST buffer
>   any gathered candidates before it receives the HTTP response to the
>   initial POST request or the PATCH request with the new entity-tag
>   value.
> 
> I think this could be clarified by putting more of the sentence in
> time order:
> 
>   Because the WHIP client needs to know the entity-tag associated
>   with the ICE session in order to send a PATCH containing new ICE
>   candidates, it MUST wait until it receives the HTTP response to the
>   initial POST request or the previous PATCH request before it can
>   send any candidates that were gathered after the previous request
>   was sent.
> 
> --
> 
>   ... the STUN requests will contain invalid ICE information and will
>   be rejected by the server.  When this situation is detected by the
>   WHIP Client, it MUST ...
> 
> Given that this is a MUST, we need a more rigid specification of the
> specific responses that compel this behavior in the client.  Also,
> "the server" is used, but apparently in the sense "the STUN server",
> not "the Media server" as elsewhere in the text.  Also, it seems to be
> implied that the Media server will not do ICE restart if it receives
> these errors from the STUN server.  Is that true?
> 
> 4.2.  WebRTC constraints
> 
>   In the specific case of media ingestion into a streaming service,
> 
> Given that the abstract says "ingestion of content into streaming
> services and/or CDNs", this appears to confine the paragraph to
> discussing a subset of WHIP implementations.  This clause should
> probably be revised to clarify that it covers all WHIP usages.
> 
>   Both the WHIP client and the WHIP endpoint SHALL use SDP bundle
>   [RFC9143].  ...
> 
> Please verify that all proper specifications are both "MUST support"
> and "MUST use".  E.g., there is "... will use RTP/RTCP multiplexing
> ..." which should say "SHALL"/"MUST".
> 
>   ... bundled "m=" sections as per [RFC8858] i.
> 
> The ending "i" seems like a typo, but please verify it isn't the
> truncation of intended text.
> 
>   ... in a single MediaStream as defined in [[!RFC8830]] ...
> 
> It appears that RFC 8830 is an intended reference but it is not listed
> in section 8.
> 
>   When a WHIP client sends an SDP offer, it SHOULD insert an SDP
>   "setup" attribute with an "actpass" attribute value, as defined in
>   [RFC8842].  However, if the WHIP client only implements the DTLS
>   client role, it MAY use an SDP "setup" attribute with an "active"
>   attribute value.  If the WHIP endpoint does not support an SDP offer
>   with an SDP "setup" attribute with an "active" attribute value, it
>   SHOULD reject the request with a "422 Unprocessable Entity" response.
> 
>   NOTE: [RFC8842] defines that the offerer must insert an SDP "setup"
>   attribute with an "actpass" attribute value.  However, the WHIP
>   client will always communicate with a Media Server that is expected
>   to support the DTLS server role, in which case the client might
>   choose to only implement support for the DTLS client role.
> 
> Note this means that this document updates RFC 8842, and should be
> marked as such.
> 
> This part seems to be incomplete or inconsistent.  Clearly, a WHIP
> server MUST support the DTLS server role, and so it MUST be able to
> accept "a=setup:active".  This means that the described 422 error
> response should never occur.
> 
> 4.3.  Load balancing and redirections
> 
>   WHIP endpoints and Media Servers might not be colocated on the same
>   server, so it is possible to load balance incoming requests to
>   different Media Servers.
> 
> In stead of the passive "it is possible ...", it would be clearer to
> say "the WHIP server may load balance incoming requests to multiple
> Media servers."
> 
>   WHIP clients SHALL support HTTP redirection
>   via the "307 Temporary Redirect" response as described in [RFC9110]
>   Section 6.4.7.
> 
> RFC 9110 does not contain a section 6.4.7.
> 
> 4.4.  STUN/TURN server configuration
> 
>   A reference to each STUN/TURN server will be returned using the
>   "Link" header field [RFC8288] with a "rel" attribute value of "ice-
>   server".
> 
> I notice that there's no explicit differentiation between the STUN and
> the TURN server information.  Please verify that either (1) the
> presence of username and credential-type differentiates the two cases,
> or (2) the Media client/server do not need to differentiate the two
> cases.
> 
>              Figure 5: Example ICE server configuration
> 
> It seems the caption should be "Example STUN/TURN server
> configuration".
> 
>   The generation of the TURN server credentials may require performing
>   a request to an external provider, which can both add latency to the
>   OPTIONS request processing and increase the processing required to
>   handle that request.  In order to prevent this, the WHIP Endpoint
>   SHOULD NOT return the STUN/TURN server configuration if the OPTIONS
>   request is a preflight request for CORS, that is, if The OPTIONS
>   request does not contain an Access-Control-Request-Method with "POST"
>   value and the the Access-Control-Request-Headers HTTP header does not
>   contain the "Link" value.
> 
> I think the normative structure can be made clearer as:
> 
>   In order to avoid adding latency and processing to an OPTIONS
>   request, the WHIP server SHOULD NOT return return the STUN/TURN
>   server configuration in OPTIONS responses unless either (1) the
>   configuration can be determined without extra processing or latency
>   (e.g. by performing a request to an external provider), or (2) if
>   the OPTIONS request is an XXX, and contains an
>   Access-Control-Request-Method with "POST" value and the the
>   Access-Control-Request-Headers HTTP header contains the "Link"
>   value.
> 
> "is an XXX" optional and is to clarify the situation that exception
> (2) supports.  From the current text, I think it should be "is not a
> preflight request for CORS".  If "preflight request for CORS" is
> retained, please add a reference to "[FETCH]" here, as the only other
> mention of CORS in the document which has the reference to "[FETCH]"
> is a long way away.
> 
>   It might be also possible to configure the STUN/TURN server URIs with
>   long term credentials provided by either the broadcasting service or
>   an external TURN provider on the WHIP client, overriding the values
>   provided by the WHIP endpoint.
> 
> This should start with that it is the WHIP client that is being
> configured:
> 
>   The WHIP client MAY be configured with the STUN/TURN server URIs
>   and long term credentials provided by either the broadcasting
>   service or an external TURN provider, overriding the values
>   provided by the WHIP endpoint.
> 
> 4.7.  Protocol extensions
> 
>   The WHIP endpoint MUST
>   return one "Link" header field for each extension, with the extension
>   "rel" type attribute and the URI for the HTTP resource that will be
>   available for receiving requests related to that extension.
> 
> This seems awkward to me.  Perhaps
> 
>   The WHIP endpoint MUST return one "Link" header field for each
>   extension that it supports, with the "rel" attribute having the
>   extension URN as its value and the URI being suitable for that
>   extension.
> 
> The part "the URI being suitable for that extension" recognizes that
> we can't predict what the semantics of the URI will be for a future
> extension, but the extension will define the semantics.
> 
>   Protocol extensions supported by the WHIP server MUST be advertised
>   to the WHIP client in the "201 Created" response to the initial HTTP
>   POST request sent to the WHIP endpoint.
> 
> It seems like a good idea to require protocol extension support
> declaration in OPTIONS responses as well.
> 
> 5.  Security Considerations
> 
> The writers should do a spelling-check pass over section 5, as there
> are enough misspellings to inconvenience the Editor.
> 
>   On top of that, the WHIP protocol exposes a thin new attack surface
>   expecific [sic] of the REST API methods used within it:
> 
> It seems like the following three items could be condensed, as most of
> the text enumerates problems that are well-known or clear from the
> context.  Perhaps something like:
> 
>   * HTTP flooding and resource exhaustion:  Both the WHIP server and
>     the WHIP resources SHOULD implement a rate limit and avalanche
>     control mechanism for incoming requests.
> 					      
>   * Security of WHIP resource URLs:  Servers for WHIP resource URLs
>     SHOULD either implement authentication and authorization
>     similarly to WHIP servers (see section 4.5) or use URLs that are
>     capabilities, in that they are unguessable and the possession of
>     the URL shows the client has the right to access the resource.
> 
> 6.1.  Link Relation Type: ice-server
> 
>   The link relation type below has been registered by IANA per
>   Section 4.2 of [RFC8288].
> 
> I do not see "ice-server" in
> https://www.iana.org/assignments/link-relations/link-relations.xhtml,
> so it appears the wording should be "IANA is asked to register ...".
> 
> 6.3.1.  Specification Template
> 
>   *  The designated contact shall be responsible for reviewing and
>      enforcing uniqueness.
> 
> Should this be "designated expert"?  Compare with sections 6.4.1 and
> 6.4.2.
> 
> 6.4.1.  Registration Procedure
> 
>   The RFC SHOULD include any attributes defined.
> 
> If this means what I think it does, it should be expanded to something
> like
> 
>   The RFC MUST include the syntax and semantics of any
>   extension-specific attributes that may be provided in a Link header
>   field advertising the extension.
> 
> [END]
> 
> 
>