RFC 2880

Internet Fax T.30 Feature Mapping

๐Ÿ“… published August 2000, from ietf

Network Working Group ๐Ÿ’– Request for Comments: 2880 ๐ŸŽ€ Category: Informational ๐Ÿฆ‹ Authors: L. McIntyre (Xerox Corporation) and G. Klyne (Content Technologies) ๐Ÿ‘‘ Date: August 2000 ๐ŸŒธ Obsoletes / Updates: the title block doesn't list anything this RFC obsoletes or updates ๐Ÿ™ˆ

Internet Fax T.30 Feature Mapping ๐Ÿงš

Status of this Memo ๐Ÿซถ

okay bestie, this memo is here to provide information for the Internet community. it does not specify an Internet standard of any kind, so it's not a spec you have to follow. distribution of this memo is unlimited, so share it with everyone ๐Ÿ’…

Copyright (C) The Internet Society (2000). All Rights Reserved.

Abstract โœจ

so this doc explains how to take the Group 3 fax capability identification bits from ITU T.30 [6] and map them into the Internet fax feature schema from "Content feature schema for Internet fax" [4] ๐Ÿฆ‹

it's a companion to that schema document [4]. the schema document is a profile of the media feature registration mechanisms [1,2,3], and it's used for capability identification between extended Internet fax systems [5]. main character energy for fax machines, honestly ๐ŸŽ€

Table of Contents ๐Ÿ“–

   1. Introduction .............................................3
      1.1 Organization of this document ........................3
      1.2 Terminology and document conventions .................3
      1.3 Discussion of this document ..........................4
   2. Combining feature tags ...................................4
      2.1 Relationship to Group 3 fax ..........................5
      2.2 Feature set descriptions .............................5
      2.3 Examples .............................................5
        2.3.1 Data resource example ............................6
        2.3.2 Recipient capabilities example ...................6
   3. Survey of media-related T.30 capability bits .............6
      3.1 DIS/DTC bit 15 (resolution) ..........................6
      3.2 DIS/DTC bit 16 (MR coding) ...........................7
      3.3 DIS/DTC bits 17,18 (width) ...........................7
      3.4 DIS/DTC bits 19,20 (length) ..........................7
      3.5 DIS/DTC bit 31 (MMR coding) ..........................7
      3.6 DIS/DTC bit 36 (JBIG multi-level coding) .............8
      3.7 DIS/DTC bit 37 (plane interleave) ....................8
      3.8 DIS/DTC bits 41,42,43 (resolution) ...................8
      3.9 DIS/DTC bits 44,45 (preferred units) .................9
      3.10 DIS/DTC bit 68 (JPEG) ...............................9
      3.11 DIS/DTC bit 69 (colour) .............................9
      3.12 DIS/DTC bit 71 (bits/sample) .......................10
      3.13 DIS/DTC bit 73 (no subsampling) ....................10
      3.14 DIS/DTC bit 74 (custom illuminant) .................10
      3.15 DIS/DTC bit 75 (custom gamut) ......................10
      3.16 DIS/DTC bits 76,77 (paper size) ....................11
      3.17 DIS/DTC bit 78 (JBIG bi-level coding) ..............11
      3.18 DIS/DTC bit 79 (JBIG stripe size) ..................11
      3.19 DIS/DTC bit 92,93,94 (MRC maximum functional mode) .11
      3.20 DIS/DTC bit 95 (MRC stripe size) ...................12
      3.21 DIS/DTC bit 97 (resolution) ........................12
      3.22 DIS/DTC bit 98 (resolution) ........................12
   4. Summary of T.30 capability dependencies .................12
      4.1 Image coding ........................................13
        4.1.1 Bi-level coding .................................13
        4.1.2 Multi-level coding ..............................14
        4.1.3 MRC format ......................................14
      4.2 Resolution and units ................................15
      4.3 Colour capabilities .................................17
      4.4 Document size .......................................18
   5. Mapping T.30 capabilities to fax feature schema .........18
      5.1 Image coding ........................................20
        5.1.1 Bi-level coding .................................20
        5.1.2 Multi-level coding ..............................21
        5.1.3 MRC format ......................................23
      5.2 Resolution and units ................................23
      5.3 Colour capabilities .................................24
      5.4 Document size .......................................26
   6. Examples ................................................26
      6.1 Common black-and-white fax machine ..................27
        6.1.1 Corresponding Internet fax capabilities .........29
      6.2 Full-featured color fax machine .....................30
   7. Security Considerations .................................34
   8. Acknowledgements ........................................34
   9. References ..............................................34
   10. Authors' Addresses .....................................36
   Full Copyright Statement ...................................37

1. Introduction โœจ

okay so this section is the warm-up ๐ŸŒธ it says the same thing as the abstract: this doc maps Group 3 fax capability identification bits from ITU T.30 [6] into the Internet fax feature schema in "Content feature schema for Internet fax" [4].

it's still a companion to the schema doc [4]. that doc profiles the media feature registration mechanisms [1,2,3], and it's what gets used for capability identification between extended Internet fax systems [5]. iykyk ๐Ÿงš

1.1 Organization of this document ๐Ÿ—‚๏ธ

here's the tea on how the doc is laid out ๐Ÿ“

Section 2 covers the mechanisms that combine feature tag constraints so you can describe complex recipient capabilities.

Section 3 surveys the Group 3 fax (T.30) capability bits that relate to media handling.

Section 4 describes the dependencies between those T.30 capability bits. they're presented in a decision table format [16], with descriptive text sitting where the action bodies would normally go.

Section 5 describes a formal way to convert Group 3 fax (T.30) capability masks into fax feature schema statements. the conversion is driven by the decision tables from Section 4, and it uses fax feature schema statements and combining rules in the action bodies.

Section 6 shows an example of a Group 3 fax (T.30) capability mask and uses the formal mechanism from Section 5 to turn it into a matching fax feature schema statement. the glow-up montage ๐ŸŽฌโœจ

1.2 Terminology and document conventions ๐ŸŽ€

these are the words the doc uses, and what they mean. the table is kept exactly as written:

   eifax system
             is used to describe any software, device or combination
             of these that conforms to the specification "Extended
             Facsimile Using Internet Mail" [5].

   Feature   is used as defined in [15].  (See also section 2 of this
             memo.)

   Feature tag
             is used as defined in [15].  (See also section 2.)

   Feature collection
             is used as defined in [2].  (See also section 2.)

   Feature set
             is used as defined in [2].  (See also section 2.)

1.3 Discussion of this document ๐Ÿ’ฌ

talk about this doc on the Internet fax mailing list, which is hosted by the Internet Mail Consortium (IMC). send your comments to:

    ietf-fax@imc.org

to subscribe, send a message with the body 'subscribe' to "ietf-fax-request@imc.org" ๐Ÿซถ

want to see what got discussed before you joined? the mailing list archive is here:

    http://www.imc.org/ietf-fax/

okay so this part is where we go bit by bit through the T.30 DIS/DTC bits that actually matter for media ๐ŸŽ€ We'll be referencing Table 2/T.30 and its notes [6] the whole time. Any bit number that doesn't get mentioned below is basically not about media features, so it's not part of the Internet fax feature schema. Bye bye ๐Ÿ‘‹

NOTE: some of the DIS/DTC bits identified below are documented in revisions of the T.30 specification that may be not yet publicly available from the ITU.

3.1 DIS/DTC bit 15 (resolution)

Every Group 3 fax system is required to support a basic resolution of 200*100dpi (dots per inch) or 8*3.85dpmm (dots per millimetre). Main character baseline ๐Ÿ’…

Setting this bit means you also support 200*200dpi or 8*7.7dpmm. Upgrade unlocked ๐Ÿ”ฅ

For multi-level images, 200*200dpi is the basic resolution, and this bit must be set. The other basic resolution options only apply to bi-level images. Multi-level really said "no, 200*200 or nothing" ๐Ÿ™ˆ

See also: bits 44,45.

3.2 DIS/DTC bit 16 (MR coding)

Every Group 3 fax system is required to support Modified Huffman (MH) 1-dimensional coding for bi-level images. (A bi-level image is one with just two pixel states, like black and white, as opposed to a grey-scale or colour image.) ๐Ÿ–ค๐Ÿค

Setting this bit means you also support Modified Read (MR) 2-dimensional coding for bi-level images. Extra skills, bestie โœจ

Both MH and MR coding are described in ITU T.4 [7].

See also: bits 31,78,79.

3.3 DIS/DTC bits 17,18 (width)

Every Group 3 fax system is required to support 215mm paper width. Those two bits can be set to show extra support for 255mm and 303mm paper widths. Wide energy ๐Ÿ“๐ŸŒˆ

See also: bits 76,77.

3.4 DIS/DTC bits 19,20 (length)

Every Group 3 fax system is required to support 297mm paper length. These bits can be set to show extra support for 364mm and unlimited paper lengths. Long and loud, lowkey iconic ๐Ÿงš

See also: bits 76,77.

3.5 DIS/DTC bit 31 (MMR coding)

Setting this bit means you support Modified Modified Read (MMR) 2-dimensional coding for bi-level images, on top of the required MH coding. Double modified, double slay ๐Ÿ’–

MMR coding is described in ITU T.6 [8].

See also: bits 16,78,79.

3.6 DIS/DTC bit 36 (JBIG multi-level coding)

If you're handling multi-level images, JPEG coding is required, which means bit 68 must be set. Setting bit 36 adds support for JBIG lossless coding of multi-level images. Lossless and iconic ๐Ÿฆ‹

JBIG coding for multi-level images is described in ITU T.43 [10] and T.4 Annex G [7].

See also: bits 68,69.

3.7 DIS/DTC bit 37 (plane interleave)

Setting this bit means you support plane interleave for JBIG-coded multi-level images, in addition to stripe interleave. Stripe interleave is already the standard for JBIG multi-level images, so this one is the bonus ๐ŸŽ

JBIG coding for multi-level images is described in ITU T.43 [10] and T.4 Annex G [7].

See also: bit 36.

3.8 DIS/DTC bits 41,42,43 (resolution)

Setting these bits means you support resolutions beyond 200*100dpi and 200*200dpi (or 8*3.85dpmm and 8*7.7dpmm). If you're using a multi-level image mode, it's beyond the basic 200*200dpi instead. The resolution glow-up is real โœจ

Bit 41 means you support 8*15.4dpmm bi-level images, and this is independent of what bits 44 and 45 are set to. ๐ŸŒธ

Bit 42 means you support 300*300dpi bi-level images, also independent of bits 44 and 45. It also covers multi-level images or the MRC mask if bit 97 is set. Triple threat ๐Ÿ”ฅ

Bit 43 means you support 400*400dpi and/or 16*15.4dpmm bi-level images, depending on the settings of bits 44 and 45. It also covers multi-level images or the MRC mask if bit 97 is set. Max resolution, max vibes ๐Ÿ‘‘

See also: bits 15,44,45,97.

3.9 DIS/DTC bits 44,45 (preferred units)

These bits say which resolution units the receiver would like for incoming images. Because the exact resolution and x/y pixel density measures in dpi or dpmm are slightly different, you can get some image size and aspect ratio distortion if the sender and receiver use different units. Not ideal, not the end of the world ๐Ÿ™ƒ

Even when sender and recipient have different preferred units, the image transfer still has to happen. For most fax uses, the dpi and dpmm measurements are close enough that nobody will notice the difference. ๐Ÿซถ

The preferred units setting changes how the following resolutions are interpreted:

            dpi       dpmm      (dpi equivalent)
            ---       ----
  Base      200*100   8*3.85    204*98
  Bit 15    200*200   8*7.7     204*196
  Bit 43    400*400   16*15.4   408*391

But terminals are required to accept the inch-based and metric-based measures above as equivalent, even if that means distorting the image a little to fit the difference. Accept the vibe, accept the vibe ๐Ÿ’…

See also: bits 15, 43

3.10 DIS/DTC bit 68 (JPEG)

This bit indicates support for JPEG coding of multi-level images. Snap, that's a photo-friendly bit ๐Ÿ“ธ

JPEG coding for multi-level images is described in ITU T.81 [12] and T.4 Annex E [7].

See also: bits 15,69,73

3.11 DIS/DTC bit 69 (colour)

This bit indicates support for colour images, in addition to grey-scale. ๐ŸŒˆ

Both grey-scale and colour need multi-level coding. The difference is that grey is single component, while colour is multi-component. Grey is the chill sibling, colour is the extra one ๐ŸŽจ

See also: bits 36,68,73.

3.12 DIS/DTC bit 71 (bits/sample)

Standard support for multi-level images uses 8 bits per sample. Setting this bit indicates extra support for 12 bits per sample. Bits per sample go brrr ๐Ÿ’ซ

For a grey-scale multi-level image there is just one sample per pixel, giving 256 or 4096 possible pixel values. For a full colour multi-level image there are three samples per pixel, giving 256^3 (16777216) or 4096^3 (6871946736) possible values. The math is giving main character ๐Ÿงฎ๐Ÿ’…

When it comes to a mapped colour image, bit 71 also affects the maximum number of entries in the mapping table. When it's reset, up to 4096 different pixel values can be used. When it's set, up to 65536 different values can be used. ๐Ÿฆ‹

See also: bit 68.

3.13 DIS/DTC bit 73 (no subsampling)

Standard support for JPEG-coded multi-level images uses 4:1:1 chrominance subsampling. That means for every 4 luminance samples in the image data there is one chrominance sample. Compression with a little bit of shade ๐Ÿ™ˆ

Setting this bit indicates that JPEG-coded colour images without subsampling can also be supported. This does not apply to JBIG coding (bit 36). ๐Ÿšซ

See also: bits 68,69.

3.14 DIS/DTC bit 74 (custom illuminant)

Standard support for multi-level images requires the D50 illuminant. Setting this bit indicates that a custom illuminant can also be supported for multi-level images (both grey-scale and colour). The details of the custom illuminant are contained in the image data. Custom lighting, custom mood โœจ

Using a custom illuminant with multi-level images is described in ITU T.4 Annex E [7].

See also: bits 36,68.

3.15 DIS/DTC bit 75 (custom gamut)

Standard support for a default colour gamut is required for multi-level images. Setting this bit indicates that a custom gamut can also be supported for multi-level images (both grey-scale and colour). The details of the custom gamut are contained in the image data. Custom colours, same girl ๐ŸŒธ

The default gamut (L*=[0,100], a*=[-85, 85], b* = [-75, 125]), and the use of a custom gamut with multi-level images, are described in ITU T.42 [9] and T.4 Annex E [7].

See also: bits 36,68.

3.16 DIS/DTC bits 76,77 (paper size)

Every Group 3 fax is required to support A4 paper size. These bits can be set to show extra support for North American letter and legal paper sizes. Letter and legal are giving American classic ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ“

See also: bits 17,18,19,20.

3.17 DIS/DTC bit 78 (JBIG bi-level coding)

Setting bit 78 indicates support for JBIG coding of bi-level images (using T.85 encoding rules), on top of the required MH coding. ๐Ÿงš

JBIG coding of bi-level images is described in ITU T.85 [14].

See also: bits 16,31,79.

3.18 DIS/DTC bit 79 (JBIG stripe size)

Setting bit 79 (along with bit 78) indicates support for the 'LO' option with JBIG-coded bi-level images. Basic bi-level JBIG coding uses 128 lines per stripe. The 'LO' option lets other stripe sizes be used instead. Customisable stripes ๐Ÿฆ“

The stripe size applies to all stripes except the last one, which may have fewer lines than the indicated value. Last stripe, last chance ๐Ÿ’€

JBIG coding of bi-level images is described in ITU T.85 [14].

See also: bits 16,31,78.

3.19 DIS/DTC bit 92,93,94 (MRC maximum functional mode)

If these bits are all zero, Mixed Raster Content (MRC) coding is not supported. Otherwise, they form a number in the range 1-7 that gives the MRC maximum functional mode. Zero means no, anything else means yes ๐ŸŽ€

MRC coding of images is described in ITU T.44 [11] and T.4 Annex H [17].

See also: bits 68,95.

3.20 DIS/DTC bit 95 (MRC stripe size)

Standard support for MRC uses a maximum stripe size of 256 lines. When this bit is set, the maximum stripe size is a full page. Full page, full commitment ๐Ÿ“„๐Ÿ”ฅ

This bit only means something if bits 92-94 indicate an MRC coding capability. MRC coding of images is described in ITU T.44 [11] and T.4 Annex H [17].

See also: bits 92,93,94.

3.21 DIS/DTC bit 97 (resolution)

Setting this bit indicates that the additional resolutions shown by bits 42 and 43 may be used for multi-level images and any MRC mask layer. ๐Ÿฆ‹

When this bit is set, bit 42 means 300dpi and bit 43 means 400dpi for multi-level or MRC mask layer images. This applies regardless of the preferred units indicated by bits 44 and 45. โœจ

See also: bits 42,43,68.

3.22 DIS/DTC bit 98 (resolution)

Setting this bit indicates that the additional resolution 100*100dpi may be used for multi-level images. ๐ŸŒˆ

NOTE: 100dpi is not used for bi-level images, including the MRC mask layer.

See also: bit 36,68,92-94.


4. Summary of T.30 capability dependencies ๐Ÿ’œ

This section is full of decision tables that show which combinations of T.30 DIS/DTC mask bits are allowed. They're the cheat sheet for not making a mess of your bits ๐Ÿ“

Inside the decision table bodies, the following symbols are used to show the values of T.30 DIS/DTC bits:

  0  = bit set to '0'
  1  = bit set to '1'
  x  = don't care bit value: may be '0' or '1'
  *0 = bit must be '0' ('1' is invalid in given combination)
  *1 = bit must be '1' ('0' is invalid in given combination)
  #  = bits in row combined to form a numeric value

4.1 Image coding

MH coding is required as a minimum for Group 3 fax operation. It's the floor, babe, nothing lower than this ๐Ÿซถ

4.1.1 Bi-level coding

<------- T.30 bits --------->
15|16|31|36|37|68|69|73|78|79||Description
--+--+--+--+--+--+--+--+--+--++---------------------------------------
 x| 0| 0|  |  |  |  |  | 0| 0||Compression = [MH]
 x| 1| 0|  |  |  |  |  | 0| 0||Compression = [MH,MR]
 x| 0| 1|  |  |  |  |  | 0| 0||Compression = [MH,MMR]
 x| 1| 1|  |  |  |  |  | 0| 0||Compression = [MH,MR,MMR]
 x| 0| 0|  |  |  |  |  | 1| 0||Compression = [MH,T.85]
 x| 1| 0|  |  |  |  |  | 1| 0||Compression = [MH,MR,T.85]
 x| 0| 1|  |  |  |  |  | 1| 0||Compression = [MH,MMR,T.85]
 x| 1| 1|  |  |  |  |  | 1| 0||Compression = [MH,MR,MMR,T.85]
 x| 0| 0|  |  |  |  |  |*1| 1||Compression = [MH,T.85,T.85LO]
 x| 1| 0|  |  |  |  |  |*1| 1||Compression = [MH,MR,T.85,T.85LO]
 x| 0| 1|  |  |  |  |  |*1| 1||Compression = [MH,MMR,T.85,T.85LO]
 x| 1| 1|  |  |  |  |  |*1| 1||Compression = [MH,MR,MMR,T.85,T.85LO]
  |  |  |  |  |  |  |  |  |  ||MH     = 1-D per T.4
  |  |  |  |  |  |  |  |  |  ||MR     = 2-D per T.4
  |  |  |  |  |  |  |  |  |  ||MMR    = 2-D per T.6
  |  |  |  |  |  |  |  |  |  ||T.85   = Basic JBIG per T.85
  |  |  |  |  |  |  |  |  |  ||T.85LO = Optional LO with T.85/JBIG
  |  |  |  |  |  |  |  |  |  ||(Basic JBIG is 128 lines/stripe;  LO
  |  |  |  |  |  |  |  |  |  || allows other stripe sizes to be used)
--+--+--+--+--+--+--+--+--+--++---------------------------------------

4.1.2 Multi-level coding โœจ

okay bestie, quick heads up ๐Ÿ’… when 37, 69, 73, 79 and 95 are set to "1", the feature represented by "0" is also available ๐Ÿซถ like, if plane interleave is available, then stripe interleave is also available. no cap, it's giving bonus feature energy ๐ŸŽ€

<------- T.30 bits --------->
15|16|31|36|37|68|69|73|78|79||Description
--+--+--+--+--+--+--+--+--+--++---------------------------------------
 x|  |  |*0| x| 0| x| x|  |  ||No grey or colour (no T.43 or JPEG)
*1|  |  | 0| x| 1| 0| x|  |  ||JPEG, grey scale only
*1|  |  | 0| x| 1| 1| 0|  |  ||JPEG, full colour, subsampling
*1|  |  | 0| x| 1| 1| 1|  |  ||JPEG, full colour, no subsampling
*1|  |  | 1| 0|*1| 0| x|  |  ||T.43, JPEG, grey only, stripe i/l
*1|  |  | 1| 1|*1| 0| x|  |  ||T.43, JPEG, grey only, plane i/l
*1|  |  | 1| 0|*1| 1| 0|  |  ||T.43, JPEG, colour, stripe i/l, s/s
*1|  |  | 1| 0|*1| 1| 1|  |  ||T.43, JPEG, colour, stripe i/l, no s/s
*1|  |  | 1| 1|*1| 1| 0|  |  ||T.43, JPEG, colour, plane i/l, s/s
*1|  |  | 1| 1|*1| 1| 1|  |  ||T.43, JPEG, colour, plane i/l, no s/s
  |  |  |  |  |  |  |  |  |  ||'s/s'    is 4:1:1 L*:a*:b* subsampling
  |  |  |  |  |  |  |  |  |  ||'No s/s' is 1:1:1 L*:a*:b* subsampling
  |  |  |  |  |  |  |  |  |  ||'stripe i/l' is stripe interleave
  |  |  |  |  |  |  |  |  |  ||'plane i/l'  is full-plane interleave
--+--+--+--+--+--+--+--+--+--++---------------------------------------

4.1.3 MRC format ๐Ÿฆ‹

so the multi-level coders from above (the colour and grey ones) handle the foreground and background images inside an MRC-format document ๐ŸŒˆ, and the bi-level codes take care of the mask layer ๐ŸŽ€.

<---- T.30 bits ------>
15|92|93|94|95|  |  |  ||Description
--+--+--+--+--+--+--+--++---------------------------------------
 x| 0| 0| 0| x|  |  |  ||MRC not accepted
*1| #| #| #| 0|  |  |  ||MRC level, max strip 256 lines
*1| #| #| #| 1|  |  |  ||MRC level, max strip full page
  |  |  |  |  |  |  |  ||### is MRC performance level (1-7, per T.44)
--+--+--+--+--+--+--+--++---------------------------------------

4.2 Resolution and units ๐Ÿงš

okay so bi-level coding has to support at least one of 200*100dpi or 8*3.85dpmm, and that's required in every case for Group 3 fax conformance ๐Ÿ“ โœจ. For multi-level coders (colour/grey) and MRC mask layers, the base resolution is 200*200dpi, which means bit 15 must be set ๐Ÿ’œ.

when multi-level coders (JPEG or T.43) or MRC are in use, only inch-based square resolutions are available ๐Ÿ’…. BUT the base non-square resolution (i.e. 200x100dpi or 8x3.85dpmm) must still be available as a capability, for use with the mandatory bi-level coder (MH). so any references to metric and non-square resolutions in the table below apply only to bi-level coders ๐ŸŒธ.

when describing MRC capabilities, the complete set of usable resolutions is listed. however, there are some restrictions on their use: (a) 100dpi resolution can be used only with multi-level images, and (b) any multi-level image resolution is required to be an integral sub-multiple of the applicable mask resolution ๐Ÿซถ.

in the following table:

  • dpi = dots per inch
  • dpmm = dots per millimetre

preferred resolutions are indicated here, even though inch- or mm-based units must be accepted, according to the T.30 protocol [6] ๐Ÿ‘‘.

<------- T.30 bits ------>
15|41|42|43|44|45|68|97|98||Description
--+--+--+--+--+--+--+--+--++-----------------------------------------
 0|  |  | 0| x| x|  |  |  ||Resolution = base only
  |  |  |  |  |  |  |  |  ||
 1|  |  | 0| 0| 0|  |  |  ||Invalid
 1|  |  | 0| 0| 1|  |  |  ||Resolution = 8*3.85dpmm or 8*7.7dpmm
 1|  |  | 0| 1| 0|  |  |  ||Resolution = 200*100dpi or 200*200dpi
 1|  |  | 0| 1| 1|  |  |  ||Resolution = 8*3.85dpmm or 8*7.7dpmm
  |  |  |  |  |  |  |  |  ||        or   200*100dpi or 200*200dpi
  |  |  |  |  |  |  |  |  ||
 0|  |  | 1| 0| 0|  |  |  ||Invalid
 0|  |  | 1| 0| 1|  |  |  ||Resolution = 8*3.85dpmm or 16*15.4dpmm
 0|  |  | 1| 1| 0|  |  |  ||Resolution = 200*100dpi or 400*400dpi
 0|  |  | 1| 1| 1|  |  |  ||Resolution = 8*3.85dpmm or 16*15.4dpmm
  |  |  |  |  |  |  |  |  ||        or   200*100dpi or 400*400dpi
  |  |  |  |  |  |  |  |  ||
 1|  |  | 1| 0| 0|  |  |  ||Invalid
 1|  |  | 1| 0| 1|  |  |  ||Resolution = 8*3.85dpmm or 8*7.7dpmm
  |  |  |  |  |  |  |  |  ||        or   16*15.4dpmm
 1|  |  | 1| 1| 0|  |  |  ||Resolution = 200*100dpi or 200*200dpi
  |  |  |  |  |  |  |  |  ||        or   400*400dpi
 1|  |  | 1| 1| 1|  |  |  ||Resolution = 8*7.7dpmm  or 8*7.7dpmm
  |  |  |  |  |  |  |  |  ||        or   16*15.4dpmm
  |  |  |  |  |  |  |  |  ||        or   200*100dpi or 200*200dpi
  |  |  |  |  |  |  |  |  ||        or   400*400dpi
--+--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  |  |  |  |  |  ||Resolutions as above
  | 1|  |  |  |  |  |  |  ||Also supports 8*15.4dpmm (bi-level only)
  |  |  |  |  |  |  |  |  ||Independent of bits 44,45
--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  | 0|  |  |  |  |  |  ||Resolutions as above
  |  | 1|  |  |  |  |  |  ||Also supports 300*300dpi
  |  |  |  |  |  |  |  |  ||Independent of bits 44,45
--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  |  |  |  |  | x| 0|  ||Resolutions as above
  |  |  |  |  |  |*1| 1|  ||Also 300*300dpi or 400*400dpi (see below)
  |  |  |  |  |  |  |  |  ||(Applies colour, grey-scale or MRC mask)
  |  |  |  |  |  |  |  |  ||(Valid only when bit 42 or 43 is set.)
  |  |  |  |  |  |  |  |  ||(42 => 300dpi, 43=>400dpi)
--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  |  |  |  |  | x|  | 0||Resolutions as above
  |  |  |  |  |  |*1|  | 1||Also 100*100dpi
  |  |  |  |  |  |  |  |  ||(Applies colour or grey-scale only)
  |  |  |  |  |  |  |  |  ||(Independent of bits 44,45)
--+--+--+--+--+--+--+--+--++-----------------------------------------

4.3 Colour capabilities ๐ŸŒˆ

bit 68 (JPEG) is required for any colour/grey scale mode, and bit 36 is the one that flags the extra T.43 capability ๐Ÿ’–.

<------- T.30 bits --->
36|68|69|71|74|75|  |  ||Description
--+--+--+--+--+--+--+--+-----------------------------------------
 0| 0| x|  |  |  |  |  ||No grey scale or colour
 x| 1| 0|  |  |  |  |  ||Grey scale only
 0| 1| 1|  |  |  |  |  ||Full colour capability (CIE L*a*b*)
 1|*1| 1|  |  |  |  |  ||Full and limited colour capability:
  |  |  |  |  |  |  |  || (CIE L*a*b*, palette, RGB 1 bit/colour
  |  |  |  |  |  |  |  ||  and CMY(K)1 bit/colour)
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  | x|  |  |  |  ||
  | 1|  | 0|  |  |  |  ||8 bits/pixel and up to 4096 palette entries
  | 1|  | 1|  |  |  |  ||8 or 12 bits/pixel, 65536 palette entries
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  | x|  |  |  ||
  | 1|  |  | 0|  |  |  ||CIE standard illuminant D50 (per T.42)
  | 1|  |  | 1|  |  |  ||Custom illuminants (definition provided)
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  |  | x|  |  ||
  | 1|  |  |  | 0|  |  ||Default gamut (per T.42)
  | 1|  |  |  | 1|  |  ||Custom gamuts (definition provided)
--+--+--+--+--+--+--+--++-----------------------------------------

4.4 Document size ๐Ÿ“

A4 width (215mm) is required as a minimum for Group 3 fax conformance ๐ŸŽ€. A Group 3 fax machine must always be able to receive an A4 image ๐Ÿซถ.

<---- T.30 bits ------>
17|18|19|20|76|77|  |  ||Description
--+--+--+--+--+--+--+--++-----------------------------------------
 0| 0|  |  |  |  |  |  ||Width = 215mm
 1| 0|  |  |  |  |  |  ||Width = 215mm or 255mm
 0| 1|  |  |  |  |  |  ||Width = 215mm, 255mm or 303mm
 1| 1|  |  |  |  |  |  ||Invalid - interpret as (17=0,18=1)
  |  |  |  |  |  |  |  ||(measurements described as scan line length)
  |  |  |  |  |  |  |  ||(corresp. inch measurements: T.4 sect 2.2)
--+--+--+--+--+--+--+--++-----------------------------------------
  |  | 0| 0|  |  |  |  ||Length = 297mm (A4)
  |  | 1| 0|  |  |  |  ||Length = 297mm (A4) or 364mm (B4)
  |  | 0| 1|  |  |  |  ||Length = unlimited
  |  | 1| 1|  |  |  |  ||Invalid
--+--+--+--+--+--+--+--++-----------------------------------------
  |  |  |  | 0| 0|  |  ||Papersize = A4
  |  |  |  | 1| 0|  |  ||Papersize = A4 or NA-Letter
  |  |  |  | 0| 1|  |  ||Papersize = A4 or NA-Legal
  |  |  |  | 1| 1|  |  ||Papersize = A4 or NA-Letter or NA-Legal
  |  |  |  |  |  |  |  ||(These in addition to paper sizes implied
  |  |  |  |  |  |  |  || by bits 17-20 above)
--+--+--+--+--+--+--+--++-----------------------------------------

5. Mapping T.30 capabilities to fax feature schema ๐Ÿงฉ

this section follows the structure of the previous one, except the decision tables are restated with feature set expression mappings in the action stub ๐Ÿ’…. the feature set expressions use media feature tags presented in "Content feature schema for Internet fax" [4] โœจ.

to build a feature set expression for a collection of DIS frame bits:

  • compare the DIS bits with each decision table in the following sections (5.1 to 5.4). some decision tables are made of a number of sub-tables separated by horizontal lines ๐Ÿฆ‹.
  • the DIS bits will match exactly one row from each table or sub-table: collect the matching feature set expression from the action stub (the right hand column of the table) ๐ŸŽ€.
  • for the table in section 5.2, which has several sub-tables, combine the feature set expressions from each sub-table with a logical-OR: (| s1 s2 ... sn ), where 's1', 's2' etc. are the feature set expressions selected from each sub-table. this gives one single feature set expression for the table ๐ŸŒธ.
  • for the tables in sections 5.3 and 5.4, combine the sub-table expressions with a logical-AND: (& s1 s2 ... sn ) ๐Ÿ’œ.
  • combine the feature set expressions for each table like this:
(& (| T511 T512 ) T513 T52 T53 T54 )

where:

  • T511 is the feature set expression obtained from the table in section 5.1.1
  • T512 is obtained from the table in section 5.1.2
  • T513 is obtained from the table in section 5.1.3
  • T52 is obtained from the table in section 5.2
  • T53 is obtained from the table in section 5.3
  • T54 is obtained from the table in section 5.4

the resulting expression is the feature set expression for the DIS bits you gave. remember that there may be other capabilities not expressed by the DIS bits that should be folded into the final feature expression (e.g. TIFF image file structure) ๐ŸŒˆ.

to go the reverse way, match the feature set to each row of each decision table using the matching algorithm in RFC 2533 [2], then OR together the DIS bit masks for each row whose feature set expression is completely contained by (i.e. is a subset of) that one (where the bit value in a table is 'x', use '0') ๐Ÿซถ.

a feature set A is completely contained by B if the feature set match of A and B (obtained by applying the feature set matching algorithm in [2]) is equal to A ๐Ÿ’–.

5.1 Image coding ๐ŸŒธ

5.1.1 Bi-level coding โœจ

<------- T.30 bits --------->
15|16|31|36|37|68|69|73|78|79||Feature set expression
 x| 0| 0|  |  |  |  |  | 0| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH]) )
 x| 1| 0|  |  |  |  |  | 0| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR])
 x| 0| 1|  |  |  |  |  | 0| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MMR])
 x| 1| 1|  |  |  |  |  | 0| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR,MMR])
 x| 0| 0|  |  |  |  |  | 1| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size=128) )
 x| 1| 0|  |  |  |  |  | 1| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size=128) )
 x| 0| 1|  |  |  |  |  | 1| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MMR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size=128) )
 x| 1| 1|  |  |  |  |  | 1| 0||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR,MMR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size=128) )
 x| 0| 0|  |  |  |  |  |*1| 1||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size>=0) )
 x| 1| 0|  |  |  |  |  |*1| 1||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size>=0) )
 x| 0| 1|  |  |  |  |  |*1| 1||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MMR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size>=0) )
 x| 1| 1|  |  |  |  |  |*1| 1||(& (color=binary)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[MH,MR,MMR,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JBIG-T85)
  |  |  |  |  |  |  |  |  |  ||   (JBIG-stripe-size>=0) )
--+--+--+--+--+--+--+--+--+--++---------------------------------------

5.1.2 Multi-level coding โœจ

Okay, bestie, this next one is where the multi-level coding combos live ๐ŸŒˆ Look at how the T.30 bits line up with the grey, full, and limited colour options, and how JPEG and JBIG show up in the feature set expressions ๐ŸŽ€

<------- T.30 bits --------->
15|16|31|36|37|68|69|73|78|79||Feature set expression
--+--+--+--+--+--+--+--+--+--++---------------------------------------
 x|  |  |*0| x| 0| x| x|  |  ||
*1|  |  | 0| x| 1| 0| x|  |  ||(& (color=grey)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=JPEG)
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JPEG-T4E) )
*1|  |  | 0| x| 1| 1| 0|  |  ||(& (color=[grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=JPEG)
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JPEG-T4E)
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling="4:1:1") ) )
*1|  |  | 0| x| 1| 1| 1|  |  ||(& (color=[grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=JPEG)
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=JPEG-T4E)
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling=
  |  |  |  |  |  |  |  |  |  ||       ["1:1:1","4:1:1"]) ) )
*1|  |  | 1| 0|*1| 0| x|  |  ||(& (color=grey)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=stripe) )
*1|  |  | 1| 1|*1| 0| x|  |  ||(& (color=grey)
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=[stripe,plane]) )
*1|  |  | 1| 0|*1| 1| 0|  |  ||(& (color=[limited,mapped,grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling="4:1:1"]) )
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=stripe) )
*1|  |  | 1| 0|*1| 1| 1|  |  ||(& (color=[limited,mapped,grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling=
  |  |  |  |  |  |  |  |  |  ||       ["1:1:1","4:1:1"]) )
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=stripe) )

*1|  |  | 1| 1|*1| 1| 0|  |  ||(& (color=[limited,mapped,grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling="4:1:1"]) )
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=[stripe,plane]) )
*1|  |  | 1| 1|*1| 1| 1|  |  ||(& (color=[limited,mapped,grey,full])
  |  |  |  |  |  |  |  |  |  ||   (image-coding=[JPEG,JBIG])
  |  |  |  |  |  |  |  |  |  ||   (image-coding-constraint=
  |  |  |  |  |  |  |  |  |  ||    [JPEG-T4E,JBIG-T43])
  |  |  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  |  |  ||      (image-coding=JPEG)
  |  |  |  |  |  |  |  |  |  ||      (color-subsampling=
  |  |  |  |  |  |  |  |  |  ||       ["1:1:1","4:1:1"]) )
  |  |  |  |  |  |  |  |  |  ||   (image-interleave=[stripe,plane]) )
--+--+--+--+--+--+--+--+--+--++---------------------------------------
15|16|31|36|37|68|69|73|78|79||
--+--+--+--+--+--+--+--+--+--++---------------------------------------

5.1.3 MRC format ๐Ÿฆ‹

Next up is the MRC format, and honestly the table is giving bit-level drama ๐Ÿ’œ

<---- T.30 bits ------>
15|92|93|94|95|  |  |  ||Feature set expression
--+--+--+--+--+--+--+--++---------------------------------------
 x| 0| 0| 0| x|  |  |  ||(MRC-mode=0)
*1| #| #| #| 0|  |  |  ||(& (MRC-mode<=###)
  |  |  |  |  |  |  |  ||   (MRC-max-stripe-size=[0..256]) )
*1| #| #| #| 1|  |  |  ||(& (MRC-mode<=###)
  |  |  |  |  |  |  |  ||   (MRC-max-stripe-size>=0) )
--+--+--+--+--+--+--+--++---------------------------------------

5.2 Resolution and units ๐Ÿ“

Resolution time, bestie ๐ŸŒธ This table lines up the T.30 bits for dpi and the xyratio values, and it's a whole vibe.

<------- T.30 bits ------>
15|41|42|43|44|45|68|97|98||Feature set expression
--+--+--+--+--+--+--+--+--+--++-----------------------------------------
 0|  |  | 0|  |  |  |  |  ||(& (color=binary)
  |  |  |  |  |  |  |  |  ||   (| (& (dpi=200) (dpi-xyratio=200/100) )
  |  |  |  |  |  |  |  |  ||      (& (dpi=204)
  |  |  |  |  |  |  |  |  ||         (dpi-xyratio=204/98) ) ) )
  |  |  |  |  |  |  |  |  ||
 1|  |  | 0|  |  |  |  |  ||(| (& (color=binary)
  |  |  |  |  |  |  |  |  ||      (| (& (dpi=204)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=204/98) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=204)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=204/196) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=200)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=200/100) ) ) )
  |  |  |  |  |  |  |  |  ||   (& (dpi=200) (dpi-xyratio=1) ) )
 0|  |  | 1|  |  |  |  |  ||(| (& (color=binary)
  |  |  |  |  |  |  |  |  ||      (| (& (dpi=204)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=204/98) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=408)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=408/391) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=200)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=200/100) ) ) )
  |  |  |  |  |  |  |  |  ||   (& (dpi=400) (dpi-xyratio=1) ) )
 1|  |  | 1|  |  |  |  |  ||(| (& (color=binary)
  |  |  |  |  |  |  |  |  ||      (| (& (dpi=204)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=204/98) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=204)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=204/196) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=408)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=408/391) )
  |  |  |  |  |  |  |  |  ||         (& (dpi=200)
  |  |  |  |  |  |  |  |  ||            (dpi-xyratio=200/100) ) ) )
  |  |  |  |  |  |  |  |  ||   (& (dpi=200) (dpi-xyratio=1) )
  |  |  |  |  |  |  |  |  ||   (& (dpi=400) (dpi-xyratio=1) ) )
--+--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  |  |  |  |  |  ||
  | 1|  |  |  |  |  |  |  ||(& (color=binary)
  |  |  |  |  |  |  |  |  ||   (dpi=204)
  |  |  |  |  |  |  |  |  ||   (dpi-xyratio=204/391) )
--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  | 0|  |  |  |  |  |  ||
  |  | 1|  |  |  |  |  |  ||(& (dpi=300) (dpi-xyratio=1) )

--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  | x| x|  |  | x| 0|  ||
  |  | x| 1|  |  |*1| 1|  ||(& (dpi=400) (dpi-xyratio=1) )
  |  |*1| 0|  |  |*1| 1|  ||
--+--+--+--+--+--+--+--+--++-----------------------------------------
  |  |  |  |  |  | x|  | 0||
  |  |  |  |  |  |*1|  | 1||(| (color=binary)
  |  |  |  |  |  |  |  |  ||   (& (color=[limited,mapped,grey,full])
  |  |  |  |  |  |  |  |  ||      (dpi=100) (dpi-xyratio=1) ) )
--+--+--+--+--+--+--+--+--++-----------------------------------------
15|41|42|43|44|45|68|97|98||
--+--+--+--+--+--+--+--+--++-----------------------------------------

Quick note ๐Ÿ’…: every number in these media feature expressions is an integer or a rational value, which is why you'll see the n/m fraction format used here ๐ŸŽ€

Also note ๐Ÿซถ: the preferred unit bits (44,45) aren't tested in this section, because a Group 3 fax machine has to accept and process either form of units for binary images. Every resolution is expressed in dpi, and here are the metric unit equivalents ๐Ÿ“

   204  ~= (1728/215)*25.4  ~=  8.04dpmm expressed in dpi
   408  ~= (3456/215)*25.4  ~= 16.08dpmm expressed in dpi
    98  ~=  3.85*25.4       ~=  3.85dpmm expressed in dpi
   196  ~=  7.70*25.4       ~=  7.70dpmm expressed in dpi
   391  ~= 15.40*25.4       ~= 15.40dpmm expressed in dpi

5.3 Colour capabilities ๐ŸŒˆ

Last stop in this part: colour capabilities, where the CIELAB, Device-RGB, Device-CMY and Device-CMYK options get sorted out ๐Ÿ’–

<------- T.30 bits --->
36|68|69|71|74|75|  |  ||Feature set expression
--+--+--+--+--+--+--+--++-----------------------------------------
 0| 0| x|  |  |  |  |  ||
 x| 1| 0|  |  |  |  |  ||(| (color=binary)
  |  |  |  |  |  |  |  ||   (& (color=grey)
  |  |  |  |  |  |  |  ||      (color-space=CIELAB) ) )
 0| 1| 1|  |  |  |  |  ||(| (color=binary)
  |  |  |  |  |  |  |  ||   (& (color=[grey,full])
  |  |  |  |  |  |  |  ||      (color-space=CIELAB) ) )
 1|*1| 1|  |  |  |  |  ||(| (color=binary)
  |  |  |  |  |  |  |  ||   (& (color=limited)
  |  |  |  |  |  |  |  ||      (color-space=[Device-RGB,Device-CMY])
  |  |  |  |  |  |  |  ||      (color-levels<=8) )
  |  |  |  |  |  |  |  ||   (& (color=limited)
  |  |  |  |  |  |  |  ||      (color-space=Device-CMYK)
  |  |  |  |  |  |  |  ||      (color-levels<=16) )
  |  |  |  |  |  |  |  ||   (& (color=[mapped,grey,full])
  |  |  |  |  |  |  |  ||      (color-space=CIELAB) ) )
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  | x|  |  |  |  ||
  | 1|  | 0|  |  |  |  ||(| (color=[binary,limited])
  |  |  |  |  |  |  |  ||   (& (color=mapped)
  |  |  |  |  |  |  |  ||      (color-levels<=4096) )
  |  |  |  |  |  |  |  ||   (& (color=grey)
  |  |  |  |  |  |  |  ||      (color-levels<=256) )
  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  ||      (color-levels<=16777216) ) )
  | 1|  | 1|  |  |  |  ||(| (color=[binary,limited])
  |  |  |  |  |  |  |  ||   (& (color=mapped)
  |  |  |  |  |  |  |  ||      (color-levels<=65536) )
  |  |  |  |  |  |  |  ||   (& (color=grey)
  |  |  |  |  |  |  |  ||      (color-levels<=4096) )
  |  |  |  |  |  |  |  ||   (& (color=full)
  |  |  |  |  |  |  |  ||      (color-levels<=68719476736) ) )
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  | x|  |  |  ||
  | 1|  |  | 0|  |  |  ||(| (color=[binary,limited])
  |  |  |  |  |  |  |  ||   (& (color=[mapped,grey,full])
  |  |  |  |  |  |  |  ||      (color-illuminant=D50) ) )
  | 1|  |  | 1|  |  |  ||   -- Any color illuminant: D50 or custom
  |  |  |  |  |  |  |  ||   -- See note below
--+--+--+--+--+--+--+--++-----------------------------------------
  | 0|  |  |  | x|  |  ||
  | 1|  |  |  | 0|  |  ||(| (color=[binary,limited])
  |  |  |  |  |  |  |  ||   (& (color=grey)
  |  |  |  |  |  |  |  ||      (CIELAB-L-min>=0)
  |  |  |  |  |  |  |  ||      (CIELAB-L-max<=100) )
  |  |  |  |  |  |  |  ||   (& (color=[mapped,full])
  |  |  |  |  |  |  |  ||      (CIELAB-L-min>=0)
  |  |  |  |  |  |  |  ||      (CIELAB-L-max<=100)
  |  |  |  |  |  |  |  ||      (CIELAB-a-min>=-85)
  |  |  |  |  |  |  |  ||      (CIELAB-a-max<=85)
  |  |  |  |  |  |  |  ||      (CIELAB-b-min>=-75)
  |  |  |  |  |  |  |  ||      (CIELAB-b-max<=125) ) )
  | 1|  |  |  | 1|  |  ||   -- Any color gamut: default or custom
--+--+--+--+--+--+--+--++-----------------------------------------
36|68|69|71|74|75|  |  ||Feature set expression
--+--+--+--+--+--+--+--++-----------------------------------------

Okay so that last bit was the colour tables wrapping up ๐ŸŽจโœจ The big takeaway is that the colour illuminant and colour gamut bits each get their own little rules, and you just match your bits to the right row. Easy peasy ๐Ÿ’…

NOTE: the above table assumes the registration of a feature tag for color illuminant, values of which are tokens that are the same as those described by ITU T.4 [7], Annex E, section E.6.7. ๐Ÿงš

5.4 Document size ๐Ÿ“

Okay bestie, so A4 width (215mm) is required as a minimum for Group 3 fax conformance ๐Ÿ–จ๏ธ That means a Group 3 fax machine must always be able to receive an A4 image. No cap, that one's non-negotiable ๐Ÿซถ

<---- T.30 bits ------>
17|18|19|20|76|77|  |  ||Feature set expression
--+--+--+--+--+--+--+--++-----------------------------------------
 0| 0|  |  |  |  |  |  ||(Size-x <= 2150/254)
 1| 0|  |  |  |  |  |  ||(Size-x <= 2550/254)
 x| 1|  |  |  |  |  |  ||(Size-x <= 3030/254)
--+--+--+--+--+--+--+--++-----------------------------------------
  |  | 0| 0|  |  |  |  ||(Size-y <= 2970/254)
  |  | 1| 0|  |  |  |  ||(Size-y <= 3640/254)
  |  | 0| 1|  |  |  |  ||  -- unlimited
  |  | 1| 1|  |  |  |  ||  -- invalid
--+--+--+--+--+--+--+--++-----------------------------------------
  |  |  |  | 0| 0|  |  ||(Paper-size=A4)
  |  |  |  | 1| 0|  |  ||(Paper-size=[A4,Letter])
  |  |  |  | 0| 1|  |  ||(Paper-size=[A4,Legal])
  |  |  |  | 1| 1|  |  ||(Paper-size=[A4,Letter,Legal])
--+--+--+--+--+--+--+--++-----------------------------------------

6. Examples ๐ŸŽ€

NOTE: Although motivated by the requirements of eifax [5], this document is concerned with describing capabilities of Group 3 fax systems [6]. As such, the algorithms do not of themselves create equivalent Internet fax capability statements but, rather, they construct capability expressions that might be incorporated into those for eifax systems. ๐Ÿ’–

This point is illustrated at the end of the first example below, where subsection 6.1.1 has been added. It combines T.30 capabilities with an appropriate TIFF file format capability to yield an expression that might be used to describe an Internet fax system ๐Ÿฆ‹

6.1 Common black-and-white fax machine ๐Ÿ“ 

Okay this first example is the main character ๐Ÿ‘‘ Here's the DIS/DTC frame, bit by bit:

   DIS/DTC
   Bit No.   DIS/DTC bit description                 Value
   -------   -----------------------                 -----
   15        R8 x 7.7 lines/mm and/or                1
             200 x 200 pels/25.4 mm
   16        Two dimensional coding capability       1
   17,18     Recording width capabilities:           0,0
             Scan line length 215 mm + 1%
   19,20     Recording length capability:            01
             unlimited
   31        T.6 (MMR) coding capability             1
   36        T.43 (JBIG) coding capability           0
   37        Plane interleave                        0
   41        Resolution: 8x15.4 dpmm                 0
   42        Resolution: 300x300 dpi                 1
   43        Resolution: 16x15.4 dpmm and/or 400x400 0
             dpi
   68        JPEG coding: not supported              0
   69        Full color mode: not supported          0
   71        12 bits/pel component:  not supported   0
   73        No subsampling (1:1:1):  not supported  0
   74        Custom illuminant:  not supported       0
   75        Custom gamut range:  not supported      0
   76        North American Letter paper size        1
             (8.5"x11") capability
   77        North American Legal paper size         0
             (8.5"x14") capability:  not supported
   78        Single-progression sequential coding    0
             (T.85, bi-level JBIG) basic capability:
             not supported
   79        Single-progression sequential coding    0
             (T.85, bi-level JBIG) optional L0
             capability for other than 128
             lines/stripe:  not supported
   92,93,94  T.44 (Mixed Raster Content) mode:       0,0,0
             not supported
   95        Page length maximum stripe size for MRC 0
             coding:  not supported.
   97        Multi-level resolution 300x300dpi or    0
             400x400dpi:  not supported
   98        Multi-level resolution 100x100dpi:      0
             not supported

Following the procedure in section 5, we match these DIS bits against the decision tables in sections 5.1 to 5.4 and get:

   5.1.1  [Bits 16,31,78,79 = 1,1,0,0]
            (& (color=binary) (image-coding=[MH,MR,MMR]) )

   5.1.2  [Bits 15,36,37,68,69,73 = 1,0,0,0,0,0]
            -- no capabilities

   5.1.3  [Bits 15,92,93,94,95 = 1,0,0,0,0]
            (MRC-mode=0)

   5.2    [Bits 15,43 = 1,0]
            (| (& (color=binary)
                  (| (& (dpi=204)
                        (dpi-xyratio=204/98) )
                     (& (dpi=204)
                        (dpi-xyratio=204/196) )
                     (& (dpi=200)
                        (dpi-xyratio=200/100) ) ) )
               (& (dpi=200) (dpi-xyratio=1) ) )
          [Bit 41 = 0]
            -- no capabilities
          [Bit 42 = 1]
            (& (dpi=300) (dpi-xyratio=1) )
          [Bits 42,43,68,97 = 0,0,0,0]
            -- no capabilities
          [Bits 68,98 = 0,0]
            -- no capabilities

   5.3    [Bits 36,68,69 = 0,0,0]
            -- no capabilities
          [Bits 68,71 = 0,0]
            -- no capabilities
          [Bits 68,74 = 0,0]
            -- no capabilities
          [Bits 68,75 = 0,0]
            -- no capabilities

   5.4    [Bits 17,18 = 0,0]
            (size-x<=2150/254)
          [Bits 19,20 = 0,1]
            -- no capability constraint
          [Bits 76,77 = 1,0]
            (Paper-size=[A4,Letter])

Now we combine these as section 5 says. The initial expression is built verbatim using the rules in the first part of section 5, even though it has some redundancy in it ๐Ÿ™ˆ

   (& (| (& (color=binary) (image-coding=[MH,MR,MMR]) ) )
      (MRC-mode=0)
      (| (| (& (color=binary)
               (| (& (dpi=204) (dpi-xyratio=204/98)  )
                  (& (dpi=204) (dpi-xyratio=204/196) )
                  (& (dpi=200) (dpi-xyratio=200/100) ) ) )
            (& (dpi=200) (dpi-xyratio=1) ) )
         (& (dpi=300) (dpi-xyratio=1) ) )
      (& (size-x<=2150/254)
         (Paper-size=[A4,Letter]) ) )

And this gets simplified next. The expression (& (| (& A B ) ) C ... ) simplifies to just (& A B C ... ), so we end up with:

   (& (color=binary)
      (image-coding=[MH,MR,MMR])
      (MRC-mode=0)
      (| (& (dpi=204) (dpi-xyratio=204/98)  )
         (& (dpi=204) (dpi-xyratio=204/196) )
         (& (dpi=200) (dpi-xyratio=200/100) )
         (& (dpi=200) (dpi-xyratio=1) )
         (& (dpi=300) (dpi-xyratio=1) ) )
      (size-x<=2150/254)
      (Paper-size=[A4,Letter]) )

6.1.1 Corresponding Internet fax capabilities ๐ŸŒ

Okay so for an Internet fax device, you should include extra capabilities that the T.30 DIS frame doesn't cover ๐Ÿงš For example, the supported TIFF file structure. Here's how that looks:

   (& (color=binary)
      (image-file-structure=[TIFF-Limited,TIFF-Minimal])
      (image-coding=[MH,MR,MMR])
      (MRC-mode=0)
      (| (& (dpi=204) (dpi-xyratio=204/98)  )
         (& (dpi=204) (dpi-xyratio=205/196) )
         (& (dpi=200) (dpi-xyratio=200/100) )
         (& (dpi=200) (dpi-xyratio=1) )
         (& (dpi=300) (dpi-xyratio=1) ) )
      (size-x<=2150/254)
      (Paper-size=[A4,Letter]) )

okay bestie, now we're doing the full-featured COLOR fax machine ๐ŸŽ€ this one's giving everything: color, JPEG, the whole buffet ๐Ÿ’… here's its DIS/DTC bit table, bit by bit:

   DIS/DTC
   Bit No.   DIS/DTC bit description                 Value
   -------   -----------------------                 -----
   15        R8 x 7.7 lines/mm and/or                1
             200 x 200 pels/25.4 mm
   16        Two dimensional coding capability       1
   17,18     Recording width capabilities:           0,0
             Scan line length 215 mm + 1%
   19,20     Recording length capability:            01
             unlimited
   31        T.6 (MMR) coding capability             1
   36        T.43 (JBIG) coding capability           0
   37        Plane interleave                        0
   41        Resolution: 8x15.4 dpmm                 1
   42        Resolution: 300x300 dpi                 0
   43        Resolution: 16x15.4 dpmm and/or 400x400 1
             dpi
   68        JPEG coding: supported                  1
   69        Full color mode: supported              1
   71        12 bits/pel component:  not supported   0
   73        No subsampling (1:1:1):  supported      1
   74        Custom illuminant:  not supported       0
   75        Custom gamut range:  not supported      0
   76        North American Letter paper size        1
             (8.5"x11") capability
   77        North American Legal paper size         0
             (8.5"x14") capability:  not supported
   78        Single-progression sequential coding    0
             (T.85, bi-level JBIG) basic capability:
             not supported
   79        Single-progression sequential coding    0
             (T.85, bi-level JBIG) optional L0
             capability for other than 128
             lines/stripe:  not supported
   92,93,94  T.44 (Mixed Raster Content) mode:       0,0,1
             mode 1 supported
   95        Page length maximum stripe size for MRC 1
             coding.
   97        Multi-level resolution 300x300dpi or    1
             400x400dpi:  supported
   98        Multi-level resolution 100x100dpi:      1
             supported

okay so now we take these DIS bits and match them up against the decision tables in sections 5.1 to 5.4 ๐Ÿ”ฅ and here's what pops out:

      5.1.1  [Bits 16,31,78,79 = 1,1,0,0]
               (& (color=binary) (image-coding=[MH,MR,MMR]) )

      5.1.2  [Bits 15,36,37,68,69,73 = 1,0,0,1,1,1]
               (& (color=[grey,full])
                  (image-coding=JPEG)
                  (image-coding-constraint=JPEG-T4E)
                  (& (color=full)
                     (image-coding=JPEG)
                     (color-subsampling=["1:1:1","4:1:1"]) ) )

      5.1.3  [Bits 15,92,93,94,95 = 1,0,0,1,1]
               (& (MRC-mode<=1) (MRC-max-stripe-size>=0) )

      5.2    [Bits 15,43 = 1,1]
               (| (& (color=binary)
                     (| (& (dpi=204)
                           (dpi-xyratio=204/98) )
                        (& (dpi=204)
                           (dpi-xyratio=204/196) )
                        (& (dpi=408)
                           (dpi-xyratio=408/391) )
                        (& (dpi=200)
                           (dpi-xyratio=200/100) ) ) )
                  (& (dpi=200) (dpi-xyratio=1) )
                  (& (dpi=400) (dpi-xyratio=1) ) )
             [Bit 41 = 1]
               (& (color=binary)
                  (dpi=204) (dpi-xyratio=204/391) )
             [Bit 42 = 0]
               -- no capabilities
             [Bits 42,43,68,97 = 0,1,1,1]
               (& (dpi=400) (dpi-xyratio=1) )
             [Bits 68,98 = 1,1]
               (| (color=binary)
                  (& (color=[limited,mapped,grey,full])
                     (dpi=100) (dpi-xyratio=1) ) )

      5.3    [Bits 36,68,69 = 0,1,1]
               (| (color=binary)
                  (& (color=[grey,full])
                     (color-space=CIELAB) ) )
             [Bits 68,71 = 1,0]
               (| (color=[binary,limited])
                  (& (color=mapped)

                     (color-levels<=4096) )
                  (& (color=grey)
                     (color-levels<=256) )
                  (& (color=full)
                     (color-levels<=16777216) ) )
             [Bits 68,74 = 1,0]
               (| (color=[binary,limited])
                  (& (color=[mapped,grey,full])
                     (color-illuminant=D50) ) )
             [Bits 68,75 = 1,0]
               (| (color=[binary,limited])
                  (& (color=grey)
                     (CIELAB-L-min>=0)
                     (CIELAB-L-max<=100) )
                  (& (color=[mapped,full])
                     (CIELAB-L-min>=0)
                     (CIELAB-L-max<=100)
                     (CIELAB-a-min>=-85)
                     (CIELAB-a-max<=85)
                     (CIELAB-b-min>=-75)
                     (CIELAB-b-max<=125) ) )

      5.4    [Bits 17,18 = 0,0]
               (size-x<=2150/254)
             [Bits 19,20 = 0,1]
               -- no capability constraint
             [Bits 76,77 = 1,0]
               (Paper-size=[A4,Letter])

then we smush everything together like section 5 says โœจ and end up with this big combined vibe:

   (& (| (& (color=binary)
            (image-coding=[MH,MR,MMR]) )
         (& (color=[grey,full])
            (image-coding=JPEG)
            (image-coding-constraint=JPEG-T4E)
            (& (color=full)
               (image-coding=JPEG)
               (color-subsampling=["1:1:1","4:1:1"]) ) )
      (& (MRC-mode<=1) (MRC-max-stripe-size>=0) )
      (| (| (& (color=binary)
               (| (& (dpi=204) (dpi-xyratio=204/98) )
                  (& (dpi=204) (dpi-xyratio=204/196) )
                  (& (dpi=408) (dpi-xyratio=408/391) )
                  (& (dpi=200) (dpi-xyratio=200/100) ) ) )
            (& (dpi=200) (dpi-xyratio=1) )
            (& (dpi=400) (dpi-xyratio=1) ) )
         (& (color=binary)

            (dpi=204) (dpi-xyratio=204/391) )
         (& (dpi=400) (dpi-xyratio=1) )
         (| (color=binary)
            (& (color=[limited,mapped,grey,full])
               (dpi=100) (dpi-xyratio=1) ) ) )
      (& (| (color=binary)
            (& (color=[grey,full]) (color-space=CIELAB) ) )
         (| (color=[binary,limited])
            (& (color=mapped) (color-levels<=4096) )
            (& (color=grey) (color-levels<=256) )
            (& (color=full) (color-levels<=16777216) ) )
         (| (color=[binary,limited])
            (& (color=[mapped,grey,full]) (color-illuminant=D50) ) )
         (| (color=[binary,limited])
            (& (color=grey)
               (CIELAB-L-min>=0)
               (CIELAB-L-max<=100) )
            (& (color=[mapped,full])
               (CIELAB-L-min>=0)
               (CIELAB-L-max<=100)
               (CIELAB-a-min>=-85)
               (CIELAB-a-max<=85)
               (CIELAB-b-min>=-75)
               (CIELAB-b-max<=125) ) ) )
      (& (size-x<=2150/254)
         (Paper-size=[A4,Letter]) ) )

and then it simplifies down to this clean lil expression ๐Ÿงš

   (| (& (color=binary)
         (image-coding=[MH,MR,MMR])
         (MRC-mode<=1) (MRC-max-stripe-size>=0)
         (| (& (dpi=204) (dpi-xyratio=204/98) )
            (& (dpi=204) (dpi-xyratio=204/196) )
            (& (dpi=204) (dpi-xyratio=204/391) )
            (& (dpi=408) (dpi-xyratio=408/391) )
            (& (dpi=200) (dpi-xyratio=200/100) )
            (& (dpi=200) (dpi-xyratio=1) )
            (& (dpi=400) (dpi-xyratio=1) ) )
         (size-x<=2150/254)
         (Paper-size=[A4,Letter]) )
      (& (color=grey)
         (image-coding=JPEG)
         (image-coding-constraint=JPEG-T4E)
         (MRC-mode<=1) (MRC-max-stripe-size>=0)
         (dpi=[100,200,400]) (dpi-xyratio=1)
         (color-space=CIELAB)
         (color-levels<=256)
         (color-illuminant=D50)
         (CIELAB-L-min>=0)
         (CIELAB-L-max<=100)
         (size-x<=2150/254)
         (Paper-size=[A4,Letter]) )
      (& (color=full)
         (image-coding=JPEG)
         (image-coding-constraint=JPEG-T4E)
         (color-subsampling=["1:1:1","4:1:1"])
         (MRC-mode<=1) (MRC-max-stripe-size>=0)
         (dpi=[100,200,400]) (dpi-xyratio=1)
         (color-space=CIELAB)
         (color-levels<=16777216)
         (color-illuminant=D50)
         (CIELAB-L-min>=0)
         (CIELAB-L-max<=100)
         (CIELAB-a-min>=-85)
         (CIELAB-a-max<=85)
         (CIELAB-b-min>=-75)
         (CIELAB-b-max<=125)
         (size-x<=2150/254)
         (Paper-size=[A4,Letter]) ) )

7. Security Considerations ๐Ÿ›ก

okay this part is serious, so listen up ๐Ÿ‘‘ the security considerations are discussed in the fax feature schema description [4]. this memo is not believed to introduce any additional security concerns ๐Ÿ”’

8. Acknowledgements ๐Ÿซถ

the authors gratefully acknowledge the following persons who made comments on earlier versions of this memo: Mr. Hiroshi Tamura and and Dr. Robert Buckley ๐Ÿ’œ

9. References ๐Ÿ“šโœจ

okay these are the receipts ๐Ÿงพ๐Ÿ’… every single source the spec leans on, so you can go check them yourself bestie

[1] Holtman, K., Mutz, A. and T. Hardie, "Media Feature Tag Registration Procedure", RFC 2506, March 1999.

[2] Graham, K., "A syntax for describing media feature sets" RFC 2533, March 1999.

[3] Masinter, L., Holtman, K., Mutz, A. and D. Wing, "Media Features for Display, Print, and Fax", RFC 2534, March 1999.

[4] Klyne, G. and L. McIntyre, "Content Feature Schema for Internet Fax (V2)", RFC 2879, July 2000.

[5] Masinter, L. and D. Wing, "Extended Facsimile Using Internet Mail", RFC 2532, March 1999.

[6] "Procedures for document facsimile transmission in the general switched telephone network" ITU-T Recommendation T.30 (1996), including Amendment 1 (1997), Amendment 2 (1997), Amendment 3 (1998) and Amendment 4 (1999) International Telecommunications Union

[7] "Standardization of Group 3 facsimile terminals for document transmission" ITU-T Recommendation T.4 (1996), including Amendment 1 (1997), Amendment 2 (1997) and Amendment 3 (1999) International Telecommunications Union (Covers basic fax coding formats: MH, MR; Annex E deals with some color image related matters, including codes for optional custom illuminants. Annex G deals with some aspects of JBIG encoding of multi-level images.)

[8] "Facsimile coding schemes and coding control functions for Group 4 facsimile apparatus" ITU Recommendation T.6 International Telecommunications Union (Commonly referred to as the MMR standard; covers extended 2-D fax coding format)

[9] "Continuous-tone colour representation method for facsimile" ITU-T Recommendation T.42 (1996) International Telecommunications Union (Covers custom illuminant, gamut)

[10] "Colour and gray-scale image representation using lossless coding scheme for facsimile" ITU-T Recommendation T.43 (1997) International Telecommunications Union (Covers JBIG for colour/grey images)

[11] "Mixed Raster Content (MRC)" ITU-T Recommendation T.44 (1999) International Telecommunications Union

[12] "Information technology - Digital compression and coding of continuous-tone still image - Requirements and guidelines" ITU-T Recommendation T.81 (1992) | ISO/IEC 10918-1:1993 International Telecommunications Union (Commonly referred to as JPEG standard)

[13] "Information technology - Coded representation of picture and audio information - Progressive bi-level image compression" ITU-T Recommendation T.82 (1993) | ISO/IEC 11544:1993 International Telecommunications Union (Commonly referred to as JBIG1 standard)

[14] "Application profile for Recommendation T.82 - Progressive bi-level image compression (JBIG1 coding scheme for facsimile apparatus)" ITU-T Recommendation T.85 (1995), including Amendment 1 (1996), Amendment 2 (1997) and Corrigendum 1 (1997) International Telecommunications Union (Covers bi-level JBIG)

[15] Klyne, G., "Protocol-independent Content Negotiation Framework", RFC 2703, September 1999.

[16] "Programs from Decision Tables" E. Humbey Macdonald/American Elsevier computer monographs (19), 1973 ISBN 0-444-19569-6/0-356-04126-3 (This is an old title, and may not be still in print. It contains a number of references to decision table articles published in Communications of the ACM: August 1967, September 1970, January 1966, November 1966, October 1968, January 1965, February 1964, June 1970, November 1965, June 1965, February 1971.)

[17] "Mixed Raster Content (MRC) mode for G3 facsimile" ITU-T Recommendation T.4, Annex H (1999) International Telecommunications Union (Covers stripe size)


10. Authors' Addresses ๐Ÿ’Œ

the people who wrote this ๐Ÿซถ here's how to reach them

Lloyd McIntyre
Xerox Corporation
Mailstop PAHV-121
3400 Hillview Ave.
Palo Alto, CA 94304 USA

Phone: +1-650-813-6762
Fax:   +1-650-845-2340
EMail: Lloyd.McIntyre@pahv.xerox.com


Graham Klyne
Content Technologies Ltd.
1220 Parkview,
Arlington Business Park
Theale
Reading, RG7 4SA
United Kingdom

Phone: +44 118 930 1300
Fax:   +44 118 930 1301
EMail: GK@ACM.ORG

Copyright (C) The Internet Society (2000). All Rights Reserved.

okay the legal part, and it's actually pretty chill ๐Ÿฆ‹ anyone can copy this document and share it, and they can write derivative works that comment on it, explain it, or help people implement it, and they can publish and distribute those too, in whole or in part, with no restriction at all. The one catch is that the copyright notice and this paragraph have to stay on every copy and every derivative work ๐Ÿ“

The document itself can't be modified in any way, though. You can't strip out the copyright notice or the references to the Internet Society or other Internet organizations. The exceptions are when you're developing Internet standards, in which case the copyright procedures in the Internet Standards process have to be followed, or when you're translating it into a language other than English ๐ŸŒธ

The permissions above are perpetual, so the Internet Society and its successors or assigns can't take them back later ๐Ÿ’œ

Now the boring-but-important bit ๐Ÿ™ˆ This document and the information in it is provided "AS IS", and:

THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

โš ๏ธ translation: they're not promising this is perfect for your use case, so read it carefully before you build on it, bestie ๐Ÿ’€

Acknowledgement ๐Ÿ™โœจ

Funding for the RFC Editor function is currently provided by the Internet Society. ๐Ÿ’–

๐Ÿ“ฆ where this page comes from