CDNI Control Triggers Interface ExtensionsQwilt6, Ha'harashHod HaSharon4524079Israel+972-72-2221647orif@qwilt.comVerizon13100 Columbia PikeSilver SpringMD20904USAsanjay.mishra@verizon.com
This document updates RFC 8007 to include generic extensions and more
granular content matching options, required by the Open Caching architecture.
The Open Caching working group of the Streaming Video Alliance is focused on
the delegation of video delivery request from commercial CDNs to a caching
layer at the ISP. In that aspect, Open Caching is a specific use case of CDNI,
where the commercial CDN is the upstream CDN (uCDN) and the ISP caching layer
is the downstream CDN (dCDN). The extensions specified in this document to the
CDNI Control Interface / Triggers are derived from requirements of Open Caching
but are applicable to CDNI use cases in general.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119.This document defines the objects and extensions required for granular content management
operations. For that purpose it extends CDNI Control Interface / Triggers
by adding new content selection options to the trigger specification and specifying a generic
extension mechanism that enables adding future functions for controlling the trigger execution.
This document also defines and initial set of extension objects. This document gives examples
for the extensions specified herein, for complete examples of the trigger interface usage see
Section 6 of .
The CDNI Metadata Interface is described in .The CDNI Footprint and Capability Interface is described in .The CDNI Control Interface / Triggers is described in .This document reuses the terminology defined in ,
, , and .Additionally, the following terms are used throughout this document
and are defined as follows:HLS - HTTP Live StreamingDASH - Dynamic Adaptive Streaming Over HTTPMSS - Microsoft Smooth Streaming
The remainder of this document is organized as follows:
gives an overview of the extensions specified in this document. specifies version 2 of the CDNI Control Interface / Triggers. specifies an initial set of trigger extension objects. specifies Footprint and Capability objects for CI/T version
and extensions. list the IANA considerations of this document. describes the security considerations for the specified properties and extensions.
This document defines extensions for the CDNI Control Interface / Triggers (CI/T)
and defines FCI objects as per the CDNI Footprint and Capabilities Interface .
This document specifies version 2 of the CI/T commands and objects.
In this context the CI/T commands and objects as were specified in
are considered to be version 1.
This document specifies version 2 of the Trigger Specification which is an enhancement of
the Trigger Specification that includes all properties as defined in Section 5.2.1 of
as well as the additional properties required by the use cases
listed below in and .
The trigger specification as defined in Section 5.2.1 of provides means to
select content objects by matching a full content URL or patterns with wildcards.
This document specifies two additional selection options:
Regular Expression - Using regex a uCDN can create more complex rules to select the
content objects for the cases of "invalidation" and "purge". For example, purging specific
content within a specific directory path.
Content Playlist - Using video playlist files, a uCDN can trigger an operation that will
be applied to a collection of distinct media files in a format that is natural for a
streaming video content provider. A playlist may have several formats, specifically
HTTP Live Streaming (HLS) *.m3u8 manifest , Microsoft Smooth Streaming (MSS)
*.ismc client manifest , and Dynamic Adaptive Streaming over HTTP (DASH)
*.mpd file [ISO/IEC 23009-1:2014].
The CDNI Control Interface / Triggers defines a set of properties
and objects used by the trigger commands. In this document we define an extension mechanism
to the triggers interface that enables the application to add various functions that allow
finer control over the trigger execution. This document specifies a generic trigger extension
object wrapper for managing individual CDNI trigger extensions in an opaque manner.
This document also registers CDNI Payload Types under the namespace CIT
for the initial set of trigger extension types:
CIT.LocationPolicy (for controlling the locations in which the trigger is executed)CIT.TimePolicy (for scheduling a trigger to run in a specific time window)Example use casesPre-position with cache location policyPurge content with cache location policyPre-position at a specific timePurge by content acquisition time (e.g. purge all content acquired in the past X hours)
This document extends the CI/T Error Handling (see Section 4.7 of ) to support
the following:
Playlists and Regexs - report errors that happened due to specific playlists and/or regexs.
Extension errors - report an error that happened due to an extension object.
Error propagation - enable the uCDN to traceback an error to the dCDN in which it occurred.
Extending the trigger mechanism with optional properties requires the ability for the
dCDN to advertise which optional properties it supports.
The CDNI Footprint and Capabilities Interface enables the dCDN to advertise the
capabilities it supports across different footprints. This document introduces FCI objects to support the
advertisement of these optional properties.
Example use casesTrigger types: Advertise which trigger types are supported by the dCDN.
CDNI defines three trigger types (purge, invalidate, pre-position),
but it does not necessarily mean that all dCDNs support all of them.
The uCDN may prefer to work only with dCDN that support what the uCDN needs.Content selection rule types: Advertise which selection types are supported.
For example, if adding content regex as a means to match on content URLs,
not all dCDN would support it. For playlist mapping, advertise which types and versions
of protocols are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates.
Note that the version string or schema are protocol specific.Trigger extensions: Advertise which trigger extensions object types are supported
by the dCDN. does not define a version number and versioning scheme.
We, therefore, designate the interface and objects as defined in Section 5 of
as version 1. The following sections define version 2 of
the CI/T objects and their properties as extensions of version 1.
Version 2 of the CI/T interface requires the support of the following objects:
CI/T Commands v2: A trigger command request using the payload type ci-trigger-command.v2.
Version 2 MUST only use "trigger.v2" objects as defined in ,
instead of "trigger" objects. All other properties of the trigger command v2 are as defined
in Section 5.1.1 of .
Trigger Status Resource v2: A trigger status resource response using the payload type
ci-trigger-status.v2. Version 2 MUST only use "trigger.v2" objects as defined in
, instead of a "trigger" object, as well as "errors.v2"
array as defined in , instead of a "errors" array.
All other properties of the trigger status v2 are as defined in Section 5.1.2 of
. The errors array "errors.v2" is a list of all errors that
occurred in any of the downstream CDNs along the execution path. When a downstream CDN,
dCDN-A, propagates a trigger to another downstream CDN, dCDN-B, it MUST also propagated
back all errors reported by dCDN-B in the trigger status resource and add them to its
own trigger status resource.
Trigger Collections: The payload type ci-trigger-collection is used with no changes
and as defined in 5.1.3 of .
Usage example of version 2 of trigger commandUsage example of version 2 of trigger status for the trigger created in the
above trigger command example:
The CDNI CI/T interface defines a mechanism for error reporting (see Section 4.7 of )
and an Error Description object for reporting errors (see Section 5.2.6 of ).
This document specifies version 2 of CI/T error handling in order to support the following:
Extension errors - report an error that happened due to an extension object.
As extension objects are expected to be added to the interface as new requirements
comes along, it is expected that in some cases a dCDN may receive a trigger that it
cannot process or does not understand. It is essential for the trigger caller to be
able to understand when such errors occur so they can take actions to fix them.
This document adds a mechanism to report extension errors.
Error propagation - enable the uCDN to traceback an error to the dCDN in which it occurred.
CDNI triggers may be propagated over a chain of downstream CDNs. Let us take for example an
upstream (uCDN-A) CDN A that is delegating to a downstream CDN B (dCDN-B) and dCDN-B is delegating
to a downstream CDN C (dCDN-C). Triggers sent from uCDN-A to dCDN-B may be redistributed
from dCDN-B to dCDN-C and errors can happen anywhere along the path. Therefore, it is essential for
uCDN-A that sets the trigger, to be able to trace back an error to the downstream CDN where it occurred.
This document adds a mechanism to propagate the ID of the faulty dCDN back to the uCDN by adding the CDN ID
to the error description. When a downstream dCDN-B propagates a trigger to another downstream
dCDN-C, it MUST also propagate back the errors received in the trigger status resource from dCDN-C by adding
them to the errors array in its own status resource to be sent back to the originating uCDN-A.
This makes sure that the trigger originating upstream CDN will receive an array of errors that occurred
in all the CDNs along the execution path, each error carrying its own CDN identifier.
This section defines the values that can appear in the top-level
objects described in , and their encodings.
Version 2 of the Trigger Specification adds the following properties on top
of the existing properties of the trigger specification defined in Section
5.2.1 of .
Property: content.regexsDescription: Regexs of content URLs to which the CI/T trigger command applies.Type: A JSON array of RegexMatch objects (see ).Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present
and non-empty.Property: content.playlistsDescription: Playlists of content the CI/T trigger command applies to.Type: A JSON array of Playlist objects (see ).Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present
and non-empty.Property: extensionsDescription: Array of trigger extension data.Type: Array of GenericTriggerExtension objects (see ).Mandatory-to-Specify: No. The default is no extensions.Example of an invalidation trigger.v2 with a list of regex objects, a list of playlist
objects, and extensions:
A RegexMatch consists of a regular expression string a URI is matched against,
and flags describing the type of match. It is encoded as a JSON object with
following properties:
Property: regexDescription: A regular expression for URI matching. Type: A regular expression to match against the URI, i.e against the path-absolute
and the query string parameters . The regular expression
string MUST be compatible with PCRE.Note: Because '\' has special meaning in JSON as the escape
character within JSON strings, the regular expression character '\' MUST be escaped as '\\'.Mandatory: Yes.Property: case-sensitiveDescription: Flag indicating whether or not case-sensitive matching should be used. Type: JSON boolean. Either "true" (the matching is case sensitive) or "false"
(the matching is case insensitive).Mandatory: No; default is case-insensitive match (i.e., a value of "false").Property: match-query-stringDescription: Flag indicating whether to include the query part of the URI when
comparing against the regex.Type: JSON boolean. Either "true" (the full URI, including the query part,
should be compared against the regex) or "false" (the query part of the URI
should be dropped before comparison with the given regex).Mandatory: No; default is "false". The query part of the URI MUST be dropped
before comparison with the given regex. This makes the regular expression simpler
and safer for cases in which the query parameters are not relevant for the match.Example of a case sensitive, no query parameters, regex match against:This regex matches URLs of domain video.example.com where the path structure is
/(single lower case letter)/(name-of-title)/(single digit between 1 to 7)/(index.m3u8 or a 3 digit number with ts extension).
For example:A Playlist consists of a full URL and a media protocol identifier.
An implementation that supports a specific playlist media protocol MUST be able to parse playlist
files of that protocol type and extract, possibly recursively, the URLs to all media objects
and/or sub playlist files, and apply the trigger to each one of them separately.Playlist is encoded as a JSON object with following properties:Property: playlistDescription: A URL to the playlist file.Type: A URL represented as a JSON string.Mandatory: Yes.Property: media-protocolDescription: Media protocol to be when parsing and interpreting this playlist. Type: MediaProtocol (see ).Mandatory: Yes.Example of a HLS playlist:Media Protocol objects are used to specify registered type of media protocol
(see ) used for protocol related
operations like pre-position according to playlist.Type: JSON stringExample:"dash"
A "trigger.v2" object, as defined in includes an
optional array of trigger extension objects. A trigger extension contain properties
that are used as directives for dCDN when executing the trigger command -- for example,
location policies, time policies and so on. Each such CDNI Trigger extension is a specialization
of a CDNI GenericTriggerExtension object. The GenericTriggerExtension object abstracts the basic
information required for trigger distribution from the specifics of any given property
(i.e., property semantics, enforcement options, etc.). All trigger extensions are optional,
and it is thus the responsibility of the extension specification to define a consistent default
behavior for the case the extension is not present.
The trigger enforcement options concept is in accordance with the metadata enforcement options
as defined in Section 3.2 of .
The GenericTriggerExtension object defines the properties contained within it
as well as whether or not the properties are "mandatory-to-enforce".
If the dCDN does not understand or support a mandatory-to-enforce
property, the dCDN MUST NOT execute the trigger command. If the extension is
not mandatory-to-enforce, then that GenericTriggerExtension object can be
safely ignored and the trigger command can be processed in accordance
with the rest of the CDNI Trigger spec.
Although a CDN MUST NOT execute a trigger command if a
mandatory-to-enforce extension cannot be enforced, it could still be
safe to redistribute that trigger (the "safe-to-redistribute"
property) to another CDN without modification. For example, in the
cascaded CDN case, a transit CDN (tCDN) could convey
mandatory-to-enforce trigger extension to a dCDN. For a trigger extension
that does not require customization or translation (i.e., trigger extension
that is safe-to-redistribute), the data representation received off the wire
MAY be stored and redistributed without being understood or supported
by the tCDN. However, for trigger extension that requires translation,
transparent redistribution of the uCDN trigger values might not be
appropriate. Certain triggers extensions can be safely, though perhaps not
optimally, redistributed unmodified. For example, pre-position command might
be executed in suboptimal times for some geographies if transparently
redistributed, but it might still work.
Redistribution safety MUST be specified for each GenericTriggerExtension
property. If a CDN does not understand or support a given
GenericTriggerExtension property that is not safe-to-redistribute, the CDN
MUST set the "incomprehensible" flag to true for that GenericTriggerExtension
object before redistributing it. The "incomprehensible"
flag signals to a dCDN that trigger metadata was not properly transformed
by the tCDN. A CDN MUST NOT attempt to execute a trigger that has been
marked as "incomprehensible" by a uCDN.
tCDNs MUST NOT change the value of mandatory-to-enforce or
safe-to-redistribute when propagating a trigger to a dCDN. Although a
tCDN can set the value of "incomprehensible" to true, a tCDN MUST NOT
change the value of "incomprehensible" from true to false.
describes the action to be taken by a tCDN for the
different combinations of mandatory-to-enforce ("MtE") and safe-to-redistribute
("StR") properties when the tCDN either does or does not understand the trigger
extension object in question:
MtEStRExtension object understood by tCDNTrigger actionFalseTrueTrueCan execute and redistribute.FalseTrueFalseCan execute and redistribute.FalseFalseFalseCan execute. MUST set "incomprehensible" to true when redistributing.FalseFalseTrueCan execute. Can redistribute after transforming the trigger extension
(if the CDN knows how to do so safely); otherwise, MUST set
"incomprehensible" to true when redistributing.TrueTrueTrueCan execute and redistribute.TrueTrueFalseMUST NOT execute but can redistribute..TrueFalseTrueCan execute. Can redistribute after transforming the trigger extension
(if the CDN knows how to do so safely); otherwise, MUST set
"incomprehensible" to true when redistributing.TrueFalseFalseMUST NOT serve. MUST set "incomprehensible" to true when redistributing. describes the action to be taken by a tCDN for the different
combinations of mandatory-to-enforce and "incomprehensible" ("Incomp")
properties, when the dCDN either does or does not understand
the trigger extension object in question:
MtEIncompExtension object understood by dCDNTrigger actionFalseFalseTrueCan execute.FalseTrueTrueCan execute but MUST NOT interpret/apply any trigger extension marked as "incomprehensible".FalseFalseFalseCan execute.FalseTrueFalseCan execute but MUST NOT interpret/apply any trigger extension marked as "incomprehensible".TrueFalseTrueCan execute.TrueTrueTrueMUST NOT execute.TrueFalseFalseMUST NOT execute.TrueTrueFalseMUST NOT execute.A GenericTriggerExtension object is a wrapper for managing individual CDNI
Trigger extensions in an opaque manner.Property: generic-trigger-extension-typeDescription: Case-insensitive CDNI Trigger extension object type.Type: String containing the CDNI Payload Type of the object contained
in the generic-trigger-extension-value property (see table in ).Mandatory-to-Specify: Yes.Property: generic-trigger-extension-valueDescription: CDNI Trigger extension object.Type: Format/Type is defined by the value of the
generic-trigger-extension-type property above.Mandatory-to-Specify: Yes.Property: mandatory-to-enforceDescription: Flag identifying whether or not the enforcement of
this trigger extension is mandatory.Type: BooleanMandatory-to-Specify: No. Default is to treat the trigger extension as
mandatory-to-enforce (i.e., a value of True).Property: safe-to-redistributeDescription: Flag identifying whether or not this trigger extension
can be safely redistributed without modification.Type: BooleanMandatory-to-Specify: No. Default is to allow transparent
redistribution (i.e., a value of True).Property: incomprehensibleDescription: Flag identifying whether or not any CDN in the
chain of delegation has failed to understand and/or failed to
properly transform this trigger extension object. Note: This flag only
applies to trigger extension objects whose safe-to-redistribute property
has a value of False.Type: BooleanMandatory-to-Specify: No. Default is comprehensible (i.e., a
value of False).Example of a GenericTriggerExtension containing a specific trigger extension object:
Version 2 of the Error Description adds the "content.playlists", "content.regexs", "extensions" and "cdn"
properties on top of the existing properties of version 1 of the trigger Error Description as defined in
Section 5.2.6 of .
Properties: content.regexs, content.playlists
Description: Content Regex and Playlist references copied from the Trigger Specification.
Only those regexs and playlists to which the error applies are included in each property,
but those references MUST be exactly as they appear in the request; the dCDN MUST NOT change
or generalize the URLs or Regexs. Note that these properties are added on top of the already
existing properties: "metadata.urls", "content.urls", "metadata.patterns" and "content.patterns".
Type: A JSON array of JSON strings, where each string is copied from a "content.regexs" or
"content.playlists" value in the corresponding Trigger Specification.
Mandatory: At least one of "content.regexs", "content.playlists", "metadata.urls", "content.urls",
"metadata.patterns" or "content.patterns" is mandatory in each Error Description object.
Property: extensions
Description: Array of trigger extension objects copied from the corresponding "extensions" array
from the Trigger Specification. Only those extensions to which the error applies are included, but
those extensions MUST be exactly as they appear in the request.
where each object is copied from data copied from the
Type: Array of GenericTriggerExtension objects, where each extension object is copied
from the "extensions" array values in the Trigger Specification.
Mandatory: No. The "extensions" array SHOULD be used only if there were errors related to
extension objects.
Property: cdn
Description: The CDN PID of the CDN where the error occurred. The "cdn" property is used
by the originating uCDN or by propagating dCDN in order to distinguish in which CDN the
error occured.
Type: A non-empty JSON string, where the string is a CDN PID as defined in Section
4.6 of .Mandatory: Yes.Example of an Error Description object reporting a malformed Playlist:
Example of an Error Description object reporting an unsupported extension object:
This document adds the error code "eextension" to the error codes table defined in Section
5.2.6 of . This error code designates that an error occurred while
parsing a generic trigger extension, or that the specific extension is not supported by the CDN.
A CDN that fails to parse or execute a generic extension object MUST report it using the "errors.v2"
array within the trigger status resource, while setting the error code to "eextension" and providing
an appropriate description. The "eextension" error code is a registered type of
"CDNI CI/T Trigger Error Codes" (see ).
The following subsections provides usage examples of the specified interface extensions being used
by the trigger command and status resource.
In the following example a CI/T "invalidate" command uses the Regex property to specify the range of
content objects for invalidation, the command is rejected by the dCDN due to regex complexity, and
an appropriate error is reflected in the status response.
In the following example a CI/T "preposition" command uses the Playlist property to specify the full
media library of a specific content. The command fails due to playlist parse error and an appropriate
error is reflected in the status response.
In the following example a CI/T "preposition" command is using two extensions to control the
way the trigger is executed. In this example the receiving dCDN identified as "AS64500:0"
does not support the first extension in the extensions array. dCDN "AS64500:0" further
distributes this trigger to another downstream CDN that is identified as "AS64501:0", which
does not support the second extension in the extensions array. The error is propagate from
"AS64501:0" to "AS64500:0" and the errors.v2 array reflects both errors.
The objects defined below are intended to be used in the GenericTriggerExtension
object's generic-trigger-extension-value field as defined in Section
, and their generic-trigger-extension-type
property MUST be set to the appropriate CDNI Payload Type as defined in .
A content operation may be relevant for a specific geographical region, or need to
be excluded from a specific region. In this case, the trigger should be applied
only to parts of the network that are either "included" or "not excluded" by the location policy.
Note that the restrictions here are on the cache location rather than the client location.The LocationPolicy object defines which CDN or cache locations for which the trigger
command is relevant.Example use cases:Pre-position: Certain contracts allow for pre-positioning or availability
of contract in all regions except for certain excluded regions in the world,
including caches. For example, some content cannot ever knowingly touch
servers in a specific country, including cached content. Therefore, these regions
MUST be excluded from a pre-positioning operation.Purge: In certain cases, content may have been located on servers in regions
where the content must not reside. In such cases a purge operation to
remove content specifically from that region, is required.Object specificationProperty: locationsDescription: An Access List that allows or denies (blocks) the trigger execution
per cache location.Type: Array of LocationRule objects (see Section 4.2.2.1 of )Mandatory-to-Specify: Yes.
If a location policy object is not listed within the trigger command, the default behavior is to
execute the trigger in all available caches and locations of the dCDN.
The trigger command is allowed, or denied, for a specific cache location according to the
action of the first location whose footprint matches against that cache's location.
If two or more footprints overlap, the first footprint that matches against the cache's location
determines the action a CDN MUST take. If the "locations" property is an empty list or if none of
the listed footprints match the location of a specific cache location, then the result is equivalent
to a "deny" action.
The following is an example of generic trigger extension object containing a location policy
object that allows the trigger execution in the US but blocks its execution in Canada:
A uCDN may wish to perform content management operations on the dCDN in a specific schedule.
The TimePolicy extensions allows the uCDN to instruct the dCDN to execute the trigger command
in a desired time window. For example, a content provider that wishes to pre-populate a new
episode at off-peak time so that it would be ready on caches at prime time when the episode
is released for viewing. A scheduled operation enables the uCDN to direct the dCDN in what
time frame to execute the trigger.
A uCDN may wish to to schedule a trigger such that the dCDN will execute it in local time,
as it is measured in each region. For example, a uCDN may wish the dCDN to pull the content
at off-peak hours, between 2AM-4AM, however, as a CDN is distributed across multiple time
zones, the UTC definition of 2AM depends on the actual location.
We define two alternatives for localized scheduling:Regional schedule: When used in conjunction with the Location Policy defined
in , the uCDN can trigger separate commands for
different geographical regions, for each region using a different schedule. This allows
the uCDN to control the execution time per region.
Local Time schedule: We introduce a "local time" version for Internet timestamps
that follows the notation for local time as defined in Section 4.2.2 of .
When local time is used, that dCDN SHOULD execute the triggers at different absolute times,
according the local time of each execution location.
Object specificationProperty: unix-time-windowDescription: A UNIX epoch time window in which the trigger SHOULD be executed.Type: TimeWindow object using UNIX epoch timestamps (see Section 4.2.3.2 of
)
Mandatory-to-Specify: No, but exactly one of "unix-time-window", "utc-window"
or "local-time-window" MUST be present.Property: utc-windowDescription: A UTC time window in which the trigger SHOULD be executed.Type: UTCWindow object as defined in .Mandatory-to-Specify: No, but exactly one of "unix-time-window", "utc-window"
or "local-time-window" MUST be present.Property: local-time-windowDescription: A local time window. The dCDN SHOULD execute the trigger at the
defined time frame, interpreted as the the local time per location.
Type: LocalTimeWindow object as defined in .Mandatory-to-Specify: No, but exactly one of "unix-time-window", "utc-window"
or "local-time-window" MUST be present.
If a time policy object is not listed within the trigger command, the default behavior
is to execute the trigger in a time frame most suitable to the dCDN taking under consideration
other constrains and / or obligations.
Example of a generic trigger extension object containing a time policy object that schedules the
trigger execution to a window between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, using
the "unix-time-window" property:
A UTCWindow object describes a time range in UTC or UTC and a zone offset that can
be applied by a TimePolicy.
Property: startDescription: The start time of the window.Type: Internet date and time as defined in .Mandatory-to-Specify: Yes.Property: endDescription: The end time of the window.Type: Internet date and time as defined in .Mandatory-to-Specify: Yes.
Example UTCWindow object that describes a time window from 02:30
01/01/2000 UTC to 04:30 01/01/2000 UTC:
Example UTCWindow object that describes a time window in New York time zone offset
UTC-05:00 from 02:30 01/01/2000 to 04:30 01/01/2000:
A LocalTimeWindow object describes a time range in local time. The reader of this
object MUST interpret it as "the local time at the location of execution". For example,
if the time window states 2AM to 4AM local time then a dCDN that has presence in
both London (UTC) and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC
in London and at 2AM-4AM UTC-05:00 in New York.
Property: startDescription: The start time of the window.Type: JSON string formatted as DateLocalTime as defined in
.
Mandatory-to-Specify: Yes.Property: endDescription: The end time of the window.Type: JSON string formatted as DateLocalTime as defined in
.
Mandatory-to-Specify: Yes.
Example LocalTimeWindow object that describes a local time window from 02:30
01/01/2000 to 04:30 01/01/2000.
DateLocalTime is a timestamp that follows the date and local time notation in Section 4.3.2
of as a complete date and time extended representation,
where the time zone designator is omitted. In addition, for simplicity and as exact accuracy
is not an objective in this case, this specification does not support the decimal fractions of
seconds, and does not take leap second into consideration.
Type: JSON string using the format "date-local-time" as defined in .
The Date and Local Time format is specified here using the syntax description
notation defined in .
Example time representing 09:00AM on 01/01/2000 local time:2000-01-01T09:00:00.00
NOTE: Per and , the "T" character
in this syntax may alternatively be lower case "t". For simplicity,
Applications that generate the "date-local-time" format defined here,
SHOULD only use the upper case letter "T".
The grammar element date-mday represents the day number within the
current month. The maximum value varies based on the month and year
as follows:
See Appendix C of for a sample C code that determines if a year is
a leap year.
The grammar element time-second may have the values 0-59. The value of 60 that is used in
to represent a leap second MUST NOT be used.
Although permits the hour to be "24", this profile of
only allows values between "00" and "23" for the hour in order to reduce confusion.
This section covers the FCI objects required for advertisement of the extensions and properties
introduced in this document.
The CI/T versions capability object is used to indicate support for one or more CI/T objects versions.
Note that the default version as originally defined in MUST be implicitly
supported regardless of the versions listed in this capability object.
Property: versionsDescription: A list of version numbers.Type: An array of JSON stringsMandatory-to-Specify: No. The default is version 1. A missing or an empty versions list
means that only version 1 of the interface and objects is supported.
The following shows an example of CI/T Versions Capability object serialization for a dCDN that supports
versions 2 and 2.1 of the CI/T interface.
The CI/T Playlist Protocol capability object is used to indicate support for one or more
MediaProtocol types listed in by the playlists
property of the "trigger.v2" object.
Property: media-protocolsDescription: A list of media protocols.Type: A list of MediaProtocol (from the CDNI Triggers media protocol types
)Mandatory-to-Specify: No. The default, in case of a missing or an empty list,
is none supported.
The following shows an example of CI/T Playlist Protocol Capability object serialization
for a dCDN that supports "hls" and "dash".
The CI/T Generic Extension capability object is used to indicate support for one or more
GenericExtensionObject types.
Property: trigger-extensionDescription: A list of supported CDNI CI/T GenericExtensionObject types.Type: List of strings corresponding to entries from the "CDNI Payload Types" registry
that are under the CIT namespace, and that correspond to CDNI
CI/T GenericExtensionObject objects.
Mandatory-to-Specify: No. The default, in case of a missing or an empty list, MUST be
interpreted as "no GenericExtensionObject types are supported". A non-empty list MUST be
interpreted as containing "the only GenericExtensionObject types that are supported".
The following shows an example of CI/T Trigger Extension Capability object serialization for
a dCDN that supports the "CIT.LocationPolicy" and the "CIT.TimePolicy" objects.
This document requests the registration of the following CDNI
Payload Types under the IANA CDNI Payload Type registry defined in :Payload TypeSpecificationci-trigger-command.v2RFCthisci-trigger-status.v2RFCthisCIT.LocationPolicyRFCthisCIT.TimePolicyRFCthisFCI.TriggerVersionRFCthisFCI.TriggerPlaylistProtocolRFCthisFCI.TriggerGenericExtensionRFCthis[RFC Editor: Please replace RFCthis with the published RFC
number for this document.]Purpose: The purpose of this payload type is to distinguish version 2 of the CI/T command
(and any associated capability advertisement)Interface: CI/TEncoding: see Purpose: The purpose of this payload type is to distinguish version 2 of the CI/T status resource response
(and any associated capability advertisement)Interface: CI/TEncoding: see Purpose: The purpose of this Trigger Extension type is to distinguish LocationPolicy CIT Trigger Extension objects.Interface: CI/TEncoding: see Purpose: The purpose of this Trigger Extension type is to distinguish TimePolicy CI/T Trigger Extension objects.Interface: CI/TEncoding: see Purpose: The purpose of this payload type is to distinguish FCI advertisement objects for
CI/T Triggers Versions objectsInterface: FCIEncoding: see Purpose: The purpose of this payload type is to distinguish FCI advertisement objects for
CI/T Playlist Protocol objectsInterface: FCIEncoding: see Purpose: The purpose of this payload type is to distinguish FCI advertisement objects for
CI/T Extension objectsInterface: FCIEncoding: see The IANA is requested to update the "CDNI CI/T Error Codes" subregistry (defined in Section 7.3 of
and located at )
with the following registration:Error CodeDescriptionSpecificationeextensionThe dCDN failed to parse a generic extension object, or does not support this extension.Section of this document.The IANA is requested to create a new "CDNI MediaProtocol Types" subregistry
in the "Content Delivery Networks Interconnection (CDNI) Parameters" registry.
The "CDNI Media Protocol Types" namespace defines the valid Media Protocol object
values in Section , used by the Playlist object.
Additions to the MediaProtocol namespace conform to the "Specification Required"
policy as defined in Section 4.6 of , where the specification
defines the MediaProtocol Type and the protocol to which it is associated.
The designated expert will verify that new protocol definitions do not duplicate
existing protocol definitions and prevent gratuitous additions to the namespace.The following table defines the initial MediaProtocol values corresponding
to the HLS, MSS, and DASH protocols:MediaProtocol TypeDescriptionSpecificationProtocol SpecificationhlsHTTP Live StreamingRFCthisRFC 8216mssMicrosoft Smooth StreamingRFCthisMSSdashDynamic Adaptive Streaming over HTTP (MPEG-DASH)RFCthisMPEG-DASH[RFC Editor: Please replace RFCthis with the published RFC number for this document.]
All security considerations listed in Section 8 of and Section 7 of
apply to this document as well.
This document defines the capability to use regular expression within the trigger spec for
more granular content selection. The usage of regex introduced the risk of regex complexity attacks,
a.k.a ReDos attacks. An attacker may be able to craft a regular expression that can exhaust server
resources and may take exponential time in the worst case. An implementation MUST protect itself by
at least accept triggers only from an authenticated party over a secured connection. An implementation
SHOULD also protect itself by using secure programing techniques and decline trigger commands that use
potentially risky regex, such techniques are readily available in secure programming literature and are
beyond the scope of this document.TBDThe authors would like to thank all members of the "Streaming Video Alliance" (SVA) Open Caching Working Group for
their contribution in support of this document. Augmented BNF for Syntax Specifications: ABNFInternet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]Perl Compatible Regular Expressions
Information technology -- Dynamic adaptive streaming over HTTP (DASH) --
Part 1: Media presentation description and segment format
ISO
[MS-SSTR]: Smooth Streaming Protocol
Microsoft
Data elements and interchange formats -- Information interchange --
Representation of dates and times
ISO