summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3995.txt
blob: 9a8013b89479af0641d8fcbe1cced072d3969cae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
Network Working Group                                         R. Herriot
Request for Comments: 3995                     Global Workflow Solutions
Category: Standards Track                                    T. Hastings
Updates: 2911, 2910                                    Xerox Corporation
                                                              March 2005


                   Internet Printing Protocol (IPP):
                 Event Notifications and Subscriptions

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2005).

Abstract

   This document describes an OPTIONAL extension to the Internet
   Printing Protocol/1.1: Model and Semantics (RFC 2911, RFC 2910).
   This extension allows a client to subscribe to printing related
   Events.  Subscriptions are modeled as Subscription Objects.  The
   Subscription Object specifies that when one of the specified Events
   occurs, the Printer delivers an asynchronous Event Notification to
   the specified Notification Recipient via the specified Push or Pull
   Delivery Method (i.e., protocol).

   A client associates Subscription Objects with a particular Job by
   performing the Create-Job-Subscriptions operation or by submitting a
   Job with subscription information.  A client associates Subscription
   Objects with the Printer by performing a Create-Printer-Subscriptions
   operation.  Four other operations are defined for Subscription
   Objects: Get-Subscriptions-Attributes, Get-Subscriptions, Renew-
   Subscription, and Cancel-Subscription.











Herriot & Hastings          Standards Track                     [Page 1]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  5
       1.1.  Notification Overview. . . . . . . . . . . . . . . . . .  5
   2.  Models for Notification. . . . . . . . . . . . . . . . . . . .  8
       2.1.  Model for Simple Notification (Normative). . . . . . . .  8
       2.2.  Additional Models for Notification (Informative) . . . .  9
   3.  Terminology. . . . . . . . . . . . . . . . . . . . . . . . . .  9
       3.1.  Conformance Terminology. . . . . . . . . . . . . . . . .  9
       3.2.  Other Terminology. . . . . . . . . . . . . . . . . . . . 10
   4.  Object Relationships . . . . . . . . . . . . . . . . . . . . . 12
       4.1.  Printer and Per-Printer Subscription Objects . . . . . . 13
       4.2.  Printer, Job and Per-Job Subscription Objects. . . . . . 13
   5.  Subscription Object. . . . . . . . . . . . . . . . . . . . . . 13
       5.1.  Rules for Support of Subscription Template Attributes. . 14
       5.2.  Rules for Processing Subscription Template Attributes. . 15
       5.3.  Subscription Template Attributes . . . . . . . . . . . . 18
             5.3.1.  notify-recipient-uri (uri) . . . . . . . . . . . 20
             5.3.2.  notify-pull-method (type2 keyword) . . . . . . . 21
             5.3.3.  notify-events (1setOf type2 keyword) . . . . . . 22
             5.3.4.  notify-attributes (1setOf type2 keyword) . . . . 29
             5.3.5.  notify-user-data (octetString(63)) . . . . . . . 30
             5.3.6.  notify-charset (charset) . . . . . . . . . . . . 31
             5.3.7.  notify-natural-language (naturalLanguage). . . . 31
             5.3.8.  notify-lease-duration (integer(0:67108863)). . . 32
             5.3.9.  notify-time-interval (integer(0:MAX)). . . . . . 33
       5.4.  Subscription Description Attributes. . . . . . . . . . . 34
             5.4.1.  notify-subscription-id  (integer (1:MAX)). . . . 35
             5.4.2.  notify-sequence-number (integer (0:MAX)) . . . . 35
             5.4.3.  notify-lease-expiration-time (integer(0:MAX)). . 36
             5.4.4.  notify-printer-up-time (integer(1:MAX)). . . . . 37
             5.4.5.  notify-printer-uri (uri) . . . . . . . . . . . . 37
             5.4.6.  notify-job-id (integer(1:MAX)) . . . . . . . . . 37
             5.4.7.  notify-subscriber-user-name (name(MAX)). . . . . 38
   6.  Printer Description Attributes Related to Notification . . . . 38
       6.1.  printer-state-change-time (integer(1:MAX)) . . . . . . . 39
       6.2.  printer-state-change-date-time (dateTime). . . . . . . . 39
   7.  New Values for Existing Printer Description Attributes . . . . 39
       7.1.  operations-supported (1setOf type2 enum) . . . . . . . . 40
   8.  Attributes Only in Event Notifications . . . . . . . . . . . . 40
       8.1.  notify-subscribed-event (type2 keyword). . . . . . . . . 40
       8.2.  notify-text (text(MAX)). . . . . . . . . . . . . . . . . 41
   9.  Event Notification Content . . . . . . . . . . . . . . . . . . 41
       9.1.  Content of Machine Consumable Event Notifications. . . . 44
             9.1.1.  Event Notification Content Common to All Events. 44
             9.1.2.  Additional Event Notification Content for Job
                     Events . . . . . . . . . . . . . . . . . . . . . 45




Herriot & Hastings          Standards Track                     [Page 2]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


             9.1.3.  Additional Event Notification Content for
                     Printer Events . . . . . . . . . . . . . . . . . 46
       9.2.  Content of Human Consumable Event Notification . . . . . 46
             9.2.1.  Event Notification Content Common to All Events. 47
             9.2.2.  Additional Event Notification Content for Job
                     Events . . . . . . . . . . . . . . . . . . . . . 49
             9.2.3.  Additional Event Notification Content for
                     Printer Events . . . . . . . . . . . . . . . . . 49
   10. Delivery Methods . . . . . . . . . . . . . . . . . . . . . . . 50
   11. Operations for Notification. . . . . . . . . . . . . . . . . . 52
       11.1. Subscription Creation Operations . . . . . . . . . . . . 52
             11.1.1. Create-Job-Subscriptions Operation . . . . . . . 52
             11.1.2. Create-Printer-Subscriptions operation . . . . . 55
             11.1.3. Job Creation Operations - Extensions for
                     Notification . . . . . . . . . . . . . . . . . . 56
       11.2 Other Operations. . . . . . . . . . . . . . . . . . . . . 58
             11.2.1. Restart-Job Operation - Extensions for
                     Notification . . . . . . . . . . . . . . . . . . 58
             11.2.2. Validate-Job Operation - Extensions for
                     Notification . . . . . . . . . . . . . . . . . . 59
             11.2.3. Get-Printer-Attributes - Extensions for
                     Notification . . . . . . . . . . . . . . . . . . 59
             11.2.4. Get-Subscription-Attributes operation. . . . . . 60
             11.2.5. Get-Subscriptions operation. . . . . . . . . . . 63
             11.2.6. Renew-Subscription operation . . . . . . . . . . 66
             11.2.7. Cancel-Subscription operation. . . . . . . . . . 68
   12. Status Codes . . . . . . . . . . . . . . . . . . . . . . . . . 70
       12.1. successful-ok-ignored-subscriptions (0x0003) . . . . . . 70
       12.2. client-error-ignored-all-subscriptions (0x0414). . . . . 71
   13. Status Codes in Subscription Attributes Groups . . . . . . . . 71
       13.1. client-error-uri-scheme-not-supported (0x040C) . . . . . 71
       13.2. client-error-attributes-or-values-not-supported (0x040B) 71
       13.3. client-error-too-many-subscriptions (0x0415) . . . . . . 72
       13.4. successful-ok-too-many-events (0x0005) . . . . . . . . . 72
       13.5. successful-ok-ignored-or-substituted-attributes (0x0001) 72
   14. Encodings of Additional Attribute Tags . . . . . . . . . . . . 72
   15. Conformance Requirements . . . . . . . . . . . . . . . . . . . 72
       15.1. Conformance requirements for clients . . . . . . . . . . 73
       15.2. Conformance requirements for Printers. . . . . . . . . . 73
   16. Model for Notification with Cascading Printers (Informative) . 74
   17. Distributed Model for Notification (Informative) . . . . . . . 75
   18. Extended Notification Recipient (Informative). . . . . . . . . 76
   19. Object Model for Notification (Normative). . . . . . . . . . . 77
       19.1. Object relationships . . . . . . . . . . . . . . . . . . 78
       19.2. Printer Object and Per-Printer Subscription Objects. . . 79
       19.3. Job Object and Per-Job Subscription Objects. . . . . . . 79
   20. Per-Job versus Per-Printer Subscription Objects (Normative). . 79
   21. Normative References . . . . . . . . . . . . . . . . . . . . . 80



Herriot & Hastings          Standards Track                     [Page 3]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   22. Informative References . . . . . . . . . . . . . . . . . . . . 80
   23. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 81
       23.1. Attribute Registrations. . . . . . . . . . . . . . . . . 82
       23.2. Additional Enum Attribute Value Registrations within
             the IPP registry . . . . . . . . . . . . . . . . . . . . 83
       23.3. Operation Registrations. . . . . . . . . . . . . . . . . 83
       23.4. Status code Registrations. . . . . . . . . . . . . . . . 83
       23.5. Attribute Group tag Registrations. . . . . . . . . . . . 84
       23.6. Registration of Events . . . . . . . . . . . . . . . . . 84
       23.7. Registration of Event Notification Delivery Methods. . . 85
             23.7.1. Requirements for Registration of Event
                     Notification Delivery Methods. . . . . . . . . . 85
             23.7.2. Registration Procedure . . . . . . . . . . . . . 86
             23.7.3. Delivery Method Document Registrations . . . . . 87
             23.7.4. Registration Template. . . . . . . . . . . . . . 88
   24. Internationalization Considerations. . . . . . . . . . . . . . 89
   25. Security Considerations. . . . . . . . . . . . . . . . . . . . 89
       25.1. Client access rights . . . . . . . . . . . . . . . . . . 89
       25.2. Printer security threats . . . . . . . . . . . . . . . . 91
       25.3. Notification Recipient security threats. . . . . . . . . 91
   26. Description of the base IPP documents (Informative). . . . . . 92
   27. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 93
   Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 94
   Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 95

Tables

   Table 1  - Subscription Template Attributes. . . . . . . . . . . . 20
   Table 2  - Subscription Description Attributes . . . . . . . . . . 35
   Table 3  - Printer Description Attributes Associated with
              Notification. . . . . . . . . . . . . . . . . . . . . . 39
   Table 4  - Operation-id assignments. . . . . . . . . . . . . . . . 40
   Table 5  - Attributes in Event Notification Content. . . . . . . . 45
   Table 6  - Additional Event Notification Content for Job Events. . 46
   Table 7  - Combinations of Events and Subscribed Events for
              "job-impressions-completed" . . . . . . . . . . . . . . 46
   Table 8  - Additional Event Notification Content for Printer
              Events. . . . . . . . . . . . . . . . . . . . . . . . . 46
   Table 9  - Printer Name in Event Notification Content. . . . . . . 48
   Table 10 - Event Name in Event Notification Content. . . . . . . . 48
   Table 11 - Event Time in Event Notification Content. . . . . . . . 48
   Table 12 - Job Name in Event Notification Content. . . . . . . . . 49
   Table 13 - Job State in Event Notification Content . . . . . . . . 49
   Table 14 - Printer State in Event Notification Content . . . . . . 50
   Table 15 - Information about the Delivery Method . . . . . . . . . 51
   Table 16 - Printer Conformance Requirements for Operations . . . . 74





Herriot & Hastings          Standards Track                     [Page 4]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


Figures

   Figure 1 - Model for Notification. . . . . . . . . . . . . . . . .  9
   Figure 2 - Model for Notification with Cascading Printers. . . . . 75
   Figure 3 - Opaque Use of a Notification Server Transparent to the
              Client. . . . . . . . . . . . . . . . . . . . . . . . . 76
   Figure 4 - Use of an Extended Notification Recipient transparent
              to the Printer. . . . . . . . . . . . . . . . . . . . . 77
   Figure 5 - Object Model for Notification . . . . . . . . . . . . . 78

1.  Introduction

   This IPP notification specification is an OPTIONAL extension to
   Internet Printing Protocol/1.1: Model and Semantics [RFC2911,
   RFC2910].  See Appendix 29 for a description of the base IPP
   documents.  This document in combination with the following documents
   is intended to meet the most important notification requirements
   described in [RFC3997]:

      Internet Printing Protocol (IPP):  "Job Progress Attributes"
      [RFC3381]

      Internet Printing Protocol (IPP):  "The 'ippget' Delivery Method
      for Event Notifications" [RFC3996]

   This specification REQUIRES that clients and Printers support the
   'ippget' Pull Delivery Method [RFC3996].  Conforming client and
   Printer implementations MAY support additional Push or Pull Delivery
   Methods as well.  Note: this document does not define any Delivery
   Methods itself, but it does define the rules for conformance for
   Delivery Method Documents and their registration with IANA (see
   section 23.7.3).

   Refer to the Table of Contents for the layout of this document.

1.1.  Notification Overview

   This document defines operations that a client can perform in order
   to create Subscription Objects in a Printer and carry out other
   operations on them.  A Subscription Object represents a Subscription
   abstraction.  The Subscription Object specifies that when one of the
   specified Events occurs, the Printer delivers an asynchronous Event
   Notification to the specified Notification Recipient via the
   specified Delivery Method (i.e., protocol).

   When a client (called a Subscribing Client) performs an operation
   that creates a Subscription Object, the operation contains one or
   more Subscription Template Attributes Groups.  Each such group holds



Herriot & Hastings          Standards Track                     [Page 5]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   information used by the Printer to initialize a newly created
   Subscription Object.  The Printer creates one Subscription Object for
   each Subscription Template Attributes Group in the operation.  This
   group is like the Job Template Attributes group defined in [RFC2911].
   The following is an example of the information included in a
   Subscription Template Attributes Group (see section 5 for details on
   the Subscription Object attributes):

   1. The names of Subscribed Events that are of interest to the
      Notification Recipient.

   2. The address (URL) of one Notification Recipient for a Push
      Delivery Method or the method for a Pull Delivery Method.

   3. The Delivery Method (i.e., the protocol) which the Printer uses to
      deliver the Event Notification.

   4. Some opaque data that the Printer delivers to the Notification
      Recipient in the Event Notification.  For example, the
      Notification Recipient might use this opaque data as a forwarding
      address for the Event Notification.

   5. The charset to use in text fields within an Event Notification

   6. The natural language to use in the text fields of the Event
      Notification

   7. The requested lease time in seconds for the Subscription Object

   An operation that creates a Subscription Object is called a
   Subscription Creation Operation.  These operations include the
   following operations (see section 11.1 for further details):

      -  Job Creation operation: When a client performs such an
         operation (Print-Job, Print-URI, and Create-Job), a client can
         include zero or more Subscription Template Attributes Groups in
         the request.  The Printer creates one Subscription Object for
         each Subscription Template Attributes Group in the request, and
         the Printer associates each such Subscription Object with the
         newly created Job.  This document extends these operations'
         definitions in [RFC2911] by adding Subscription Template
         Attributes Groups in the request and Subscription Attributes
         Groups in the response.

      -  Create-Job-Subscriptions operation: A client can include one or
         more Subscription Template Attributes Groups in the request.
         The Printer creates one Subscription Object for each




Herriot & Hastings          Standards Track                     [Page 6]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


         Subscription Template Attributes Group and associates each with
         the job that is the target of this operation.

      -  Create-Printer-Subscriptions operation: A client can include
         one or more Subscription Template Attributes Groups in the
         request.  The Printer creates one Subscription Object for each
         Subscription Template Attributes Group and associates each with
         the Printer that is the target of this operation.

   For each of the above operations:

      -  the Printer associates a Subscription Object with the Printer
         or a specific Job.  When a Subscription Object is associated
         with a Job Object, it is called a Per-Job Subscription Object.
         When a Subscription Object is associated with a Printer Object,
         it is called a Per-Printer Subscription Object.

      -  the response contains one Subscription Attributes Group for
         each Subscription Template Attributes Group in the request and
         in the same order.  When the Printer successfully creates a
         Subscription Object, its corresponding Subscription Attributes
         Group contains the "notify-subscription-id" attribute.  This
         attribute uniquely identifies the Subscription Object and is
         analogous to a "job-id" for a Job object.  Some operations
         described below use the "notify-subscription-id" to identify
         the target Subscription Object.

   This document defines the following additional operations (see
   section 11.2 for further details):

   -  Restart-Job operation: When a client performs the Restart-Job
      operation [RFC2911], the Printer re-uses the same Job and its
      Subscription Objects.

   -  Validate-Job operation: When a client performs this operation, a
      client can include zero or more Subscription Template Attributes
      Groups in the request.  The Printer determines if it could create
      one Subscription Object for each Subscription Template Attributes
      Group in the request.  This document extends this operation's
      definition in [RFC2911] by adding Subscription Template Attributes
      Groups in the request and Subscription Attributes Groups in the
      response.

   -  Get-Subscription-Attributes operation: This operation allows a
      client to obtain the specified attributes of a target Subscription
      Object.





Herriot & Hastings          Standards Track                     [Page 7]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   -  Get-Subscriptions operation: This operation allows a client to
      obtain the specified attributes of all Subscription Objects
      associated with the Printer or a specified Job.

   -  Renew-Subscription operation: This operation renews the lease on
      the target Per-Printer Subscription Object before it expires.  A
      newly created Per-Printer Subscription Object receives an initial
      lease.  It is the duty of the client to use this operation
      frequently enough to preserve a Per-Printer Subscription Object.
      The Printer deletes a Per-Printer Subscription Object when its
      lease expires.  A Per-Job Subscription Object last exactly as long
      as its associated Job Object and thus doesn't have a lease.

   -  Cancel-Subscription operation: This operation (1) cancels the
      lease on the specified Per-Printer Subscription Object and thereby
      deletes the Per-Printer Subscription Object or (2) deletes the
      Per-Job Subscription Object.

   When an Event occurs, the Printer finds all Subscription Objects
   listening for the Event (see section 9 for details on finding such
   Subscription Objects).  For each such Subscription Object, the
   Printer:

   a) generates an Event Notification with information specified in
      section 9, AND

   b) either:

      i)  If the Delivery Method is a Push Delivery Method as indicated
          by the presence of the Subscription Object's "notify-
          recipient-uri" attribute, delivers the Event Notification
          using the Delivery Method and target address identified in the
          Subscription Object's "notify-recipient-uri" attribute, OR

      ii) If the Delivery Method is a Pull Delivery Method as indicated
          by the presence of the Subscription Object's "notify-pull-
          method" attribute, saves Event Notification for a time period
          called the Event Life defined by the Delivery Method, i.e.,
          the Notification Recipient is expected to fetch the Event
          Notifications.

2.  Models for Notification

2.1.  Model for Simple Notification (Normative)

   As part of a Subscription Creation Operation, an IPP Printer (i.e.,
   located in an output device or a server) creates one or more
   Subscription Objects.  In a Subscription Creation Operation, the



Herriot & Hastings          Standards Track                     [Page 8]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   client specifies the Notification Recipient to which the Printer is
   to deliver Event Notifications.  A Notification Recipient can be the
   Subscribing Client or a third party.

   Figure 1 shows the Notification model for a simple Client-Printer
   relationship.

   embedded printer:

                                        output device or server
   PDA, desktop, or server                 +---------------+
        +--------+                         |  ###########  |
        | client |-----Subscription ---------># Printer #  |
        +--------+  Creation Operation     |  # Object  #  |
     +------------+                        |  #####|#####  |
     |Notification|                        +-------|-------+
     |Recipient   |<----IPP Event Notifications----+
     +------------+    (Job and/or Printer Events)

                  Figure 1 - Model for Notification

2.2.  Additional Models for Notification (Informative)

   Additional models have been proposed (see Appendices 16, 17, and 18).

3.  Terminology

   This section defines terminology used throughout this document.
   Other terminology is defined in [RFC2911].

3.1.  Conformance Terminology

   Capitalized terms, such as MUST, MUST NOT, REQUIRED, SHOULD, SHOULD
   NOT, MAY, NEED NOT, and OPTIONAL, have special meaning relating to
   conformance as defined in RFC 2119 [RFC2119] and [RFC2911] section
   12.1.  If an implementation supports the extension defined in this
   document, then these terms apply; otherwise, they do not.  These
   terms define conformance to this document only; they do not affect
   conformance to other documents, unless explicitly stated otherwise.

   Note: a feature that is OPTIONAL in this document becomes REQUIRED if
   the Printer implements a Delivery Method that REQUIRES the feature.

   READ-ONLY - an adjective used in an attribute definition to indicate
   that an IPP Printer MUST NOT allow the attribute's value to be
   modified.





Herriot & Hastings          Standards Track                     [Page 9]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


3.2.  Other Terminology

   This document uses the same terminology as [RFC2911], such as
   "client", "Printer", "attribute", "attribute value", "keyword",
   "operation", "request", "response", "administrator", "operator", and
   "support".  In addition, the following terms are defined for use in
   this document and the Delivery Method Documents:

   Compound Event Notification - two or more Event Notifications that a
   Printer delivers together as a single request or response.  The
   Delivery Method Document specifies whether the Delivery Method
   supports Compound Event Notifications.

   Delivery Method - the mechanism by which the Printer delivers an
   Event Notification.

   Delivery Method Document - a document, separate from this document,
   that defines a Delivery Method.

   Event - some occurrence (either expected or unexpected) within the
   printing system of a change of state, condition, or configuration of
   a Job or Printer object.  An Event occurs only at one instant in time
   and does not span the time the physical Event takes place.  For
   example, jam-occurred and jam-cleared are two distinct, instantaneous
   Events, even though the jam may last for a while.

   Event Life - For a Pull Delivery Method, the length of time in
   seconds after an Event occurs during which the Printer will retain
   that Event for delivery in an Event Notification.  After the Event
   Life expires, the Printer will no longer deliver an Event
   Notification for that Event in such a response.

   Event Notification - the information about an Event that the Printer
   delivers when an Event occurs.

   Event Notification Attributes Group - The attributes group which is
   used to deliver an Event Notification in a request (Push Delivery
   Methods) or a response (Pull Delivery Methods).

   Human Consumable Event Notification - localized text for human
   consumption only.  There is no standardized format and thus programs
   should not try to parse this text.

   Job Creation operation - One of the operations that creates a Job
   object:  Print-Job, Print-URI and Create-Job.  The Restart-Job
   operation [RFC2911] is not considered a Job Creation operation, since
   the Printer re-uses the existing Job object.  The Validate-Job
   operation is not considered a Job Creation operation because no Job



Herriot & Hastings          Standards Track                    [Page 10]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   object is created.  Therefore, when a statement also applies to
   either the Restart-Job and/or the Validate-Job operation, they are
   mentioned explicitly.

   Job Event - an Event caused by some change in a particular job on the
   Printer, e.g., 'job-completed'.

   Machine Consumable Event Notification - bytes for program
   consumption.  The bytes are formatted according to the Delivery
   Method document.

   Notification - when not in the phrases 'Event Notification' and
   'Notification Recipient' - the concepts of this specification, i.e.,
   Events, Subscription Objects, and Event Notifications.

   Notification Recipient - the entity to which the Printer delivers an
   Event Notification.  For Push Delivery Methods, the IPP Printer sends
   the Notifications to a Notification Recipient.  For Pull Delivery
   Methods, the Notification Recipient is acting in the role of an IPP
   client and requests Event Notifications and so the terms "client" and

   "Notification Recipient" are used interchangeably with such Delivery
   Methods.  For example, see [RFC3996].

   Per-Job Subscription Object - A Subscription Object that is
   associated with a single Job.  The Create-Job-Subscriptions operation
   and Job Creation operations create such an object.

   Per-Printer Subscription Object - A Subscription Object that is
   associated with the Printer as a whole.  The Create-Printer-
   Subscriptions operation creates such an object.

   Printer Event - an Event caused by some change in the Printer that is
   not specific to a job, e.g., 'printer-state-changed'.

   Pull Delivery Method - The Printer saves Event Notifications for some
   event life time and expects the Notification Recipient to request
   Event Notifications.  The Printer delivers the Event Notifications in
   a response to such a request.

   Push Delivery Method -The Printer delivers the Event Notification
   shortly after an Event occurs.

   Subscribed Event - an Event that the Subscribing Client expresses
   interest in by making it a value of the "notify-events" attribute on
   a Subscription Object.

   Subscribed Job Event - a Subscribed Event that is a Job Event.



Herriot & Hastings          Standards Track                    [Page 11]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Subscribed Printer Event - a Subscribed Event that is a Printer
   Event.

   Subscribing Client - The client that creates the Subscription Object.

   Subscription Attributes Group - The attributes group in a response
   that contains Subscription Object attributes.

   Subscription Creation Operation - An operation that creates a
   Subscription Object:  Job Creation operations, Create-Job-
   Subscriptions operation, Create-Printer-Subscriptions operation.  In
   the context of a Job Creation operation, a Subscription Creation
   Operation is the part of the Job Creation operation that creates one
   or more Subscription objects.  The Restart-Job operation [RFC2911] is
   not considered a Subscription Creation Operation, since the Printer
   re-uses the Job's existing Subscription Objects, rather than creating
   any new Subscription Objects.

   Subscription Creation Request - The request portion of a Subscription
   Creation Operation.

   Subscription Description Attributes - Subscription Object attributes
   that a Printer supplies during a Subscription Creation Operation.

   Subscription Object - An object containing a set of attributes that
   indicate:  the Notification Recipient (for Push Delivery Method
   only), the Delivery Method, the Subscribed Events that cause the
   Printer to deliver an Event Notification, and the information to
   include in an Event Notification.

   Subscription Template Attributes - Subscription Object attributes
   that a client can supply in a Subscription Creation Operation and
   associated Printer Object attributes that specify supported and
   default values for the Subscription Object attributes.

   Subscription Template Attributes Group - The attributes group in a
   request that contains Subscription Object attributes that are
   Subscription Template Attributes.

4.  Object Relationships

   This section defines the object relationships between the Printer,
   Job, and Subscription Objects.  It does not define the
   implementation.  For an illustration of these relationships, see
   Appendix 19.






Herriot & Hastings          Standards Track                    [Page 12]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


4.1.  Printer and Per-Printer Subscription Objects

   1. A Printer object can be associated with zero or more Per-Printer
      Subscription Objects.

   2. Each Per-Printer Subscription Object is associated with exactly
      one Printer object.

4.2.  Printer, Job and Per-Job Subscription Objects

   1. A Printer object is associated with zero or more Job objects.

   2. Each Job object is associated with exactly one Printer object.

   3. A Job object is associated with zero or more Per-Job Subscription
      Objects.

   4. Each Per-Job Subscription Object is associated with exactly one
      Job object.

5.  Subscription Object

   A Subscribing Client creates a Subscription Object with a
   Subscription Creation Operation in order to indicate its interest in
   certain Events.  See section 11 for a description of these
   operations.  When an Event occurs, the Subscription Object specifies
   to the Printer where to deliver Event Notifications for Push Delivery
   Methods only, how to deliver them, and what to include in them.  See
   section 9 for details on the contents of an Event Notification.

   Using the IPP Job Template attributes as a model (see [RFC2911]
   section 4.2), the attributes of a Subscription Object are divided
   into two categories: Subscription Template Attributes and
   Subscription Description Attributes.

   Subscription Template attributes are, in turn, like the Job Template
   attributes, divided into

   1. Subscription Object attributes that a client can supply in a
      Subscription Creation Request and

   2. their associated Printer Object attributes that specify supported
      and default values for the Subscription Object attributes

   The remainder of this section specifies general rules for
   Subscription Template Attributes and describes each attribute in a
   Subscription Object.




Herriot & Hastings          Standards Track                    [Page 13]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


5.1.  Rules for Support of Subscription Template Attributes

   Subscription Template Attributes are fundamental to the Notification
   model described in this specification.  The client supplies these
   attributes in Subscription Creation Operations and the Printer uses
   these attributes to populate a newly created Subscription Object.

   Subscription Objects attributes that are Subscription Template
   Attributes conform to the following rules:

   1. Each attribute's name starts with the prefix string "notify-" and
      this document calls such attributes "notify-xxx".

   2. For each "notify-xxx" Subscription Object attribute defined in
      column 1 of Table 1 in section 5.3, Table 1 specifies
      corresponding Printer attributes: "notify-xxx-default", "notify-
      xxx-supported", "yyy-supported" and "notify-max-xxx-supported"
      defined in column 2 of Table 1.  Note "xxx" stands for the same
      string in each case and "yyy" stands for some other string.

   3. If a Printer supports "notify-xxx" in column 1 of Table 1, then
      the Printer MUST support all associated attributes specified in
      column 2 of Table 1.  For example, Table 1 shows that if the
      Printer supports "notify-events", it MUST support "notify-events-
      default", "notify-events-supported" and "notify-max-events-
      supported".

   4. If a Printer does not support "notify-xxx" in column 1 of Table 1,
      then the Printer MUST NOT support any associated "notify-yyy"
      attributes specified in column 2 of Table 1.  For example, Table 1
      shows that if the Printer doesn't support "notify-events", it MUST
      NOT support "notify-events-default", "notify-events-supported" and
      "notify-max-events-supported".  Note this rule does not apply to
      attributes whose names do not start with the string "notify-" and
      are thus defined in another object and used by other attributes.

   5. Most "notify-xxx" attributes have a corresponding "yyy-supported"
      attribute that specifies the supported values for "notify-xxx".
      Column 2 of Table 1 specifies the name of each "yyy-supported"
      attribute.  The naming rules of IPP/1.1 (see [RFC2911]) are used
      when "yyy-supported" is "notify-xxx-supported".

   6. Some "notify-xxx" attributes have a corresponding "notify-xxx-
      default" attribute that specifies the value for "notify-xxx" if
      the client does not supply it.  Column 2 of Table 1 specifies the
      name of each "notify-xxx-default" attribute.  The naming rules of
      IPP/1.1 (see [RFC2911]) are used.




Herriot & Hastings          Standards Track                    [Page 14]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   If a client wishes to present an end user with a list of supported
   values from which to choose, the client SHOULD query the Printer for
   its supported value attributes.  The client SHOULD also query the
   default value attributes.  If the client then limits selectable
   values to only those values that are supported, the client can
   guarantee that the values supplied by the client in the create
   request all fall within the set of supported values at the Printer.
   When querying the Printer, the client MAY enumerate each attribute by
   name in the Get-Printer-Attributes Request, or the client MAY just
   supply the 'subscription-template' group name in order to get the
   complete set of supported attributes (both supported and default
   attributes - see section 11.2.3).

5.2.  Rules for Processing Subscription Template Attributes

   This section defines a detailed set of rules that a Printer follows
   when it processes Subscription Template Attributes in a Subscription
   Creation Request.  These rules are similar to the rules for
   processing Operation attributes in [RFC2911].  That is, the Printer
   may or may not support an attribute and a client may or may not
   supply the attribute.  Some combinations of these cases are OK.
   Others return warnings or errors, and perhaps a list of unsupported
   attributes.

   A Printer MUST implement the following behavior for processing
   Subscription Template Attributes in a Subscription Creation Request:

   1. If a client supplies a "notify-xxx" attribute from column 1 of
      Table 1 and the Printer supports it and its value, the Printer
      MUST populate the attribute on the created Subscription Object.

   2. If a client supplies a "notify-xxx" attribute from column 1 of
      Table 1 and the Printer doesn't support it or its value, the
      Printer MUST NOT populate the attribute on the created
      Subscription Object with it.  The Printer MUST do one of the
      following:

      a) If the value of the "notify-xxx" attribute is unsupported, the
         Printer MUST return the attribute with its value in the
         Subscription Attributes Group of the response.

      b) If "notify-xxx" is an unsupported attribute, the Printer MUST
         return the attribute in the Subscription Attributes Group of
         the response with the 'unsupported' out-of-band value.

      Note:  The rules of this step are the same as for Unsupported
      Attributes [RFC2911] section 3.1.7.  except that the unsupported
      attributes are returned in the Subscription Attributes Group



Herriot & Hastings          Standards Track                    [Page 15]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      rather than the Unsupported Attributes Group because Subscription
      Creation Operations can create more than one Subscription Object).

   3. If a client is REQUIRED to supply a "notify-xxx" attribute from
      column 1 of Table 1 and the Printer doesn't support the supplied
      value, the Printer MUST NOT create a Subscription Object.  The
      rules for Unsupported Attributes in step #2 still apply.

   4. If a client does not supply a "notify-xxx" attribute from column 1
      of Table 1 and the attribute is REQUIRED for the client to supply,
      the Printer MUST reject the Subscription Creation Operation
      (including Job Creation operations) without creating a
      Subscription Object, and MUST return in the response:

      a) the status code 'client-error-bad-request' AND

      b) no Subscription Attribute Groups.

   5. If a client does not supply a "notify-xxx" attribute from column 1
      of Table 1 that is OPTIONAL for the client to supply, and column 2
      of Table 1 either:

      a) specifies a "notify-xxx-default" attribute, the Printer MUST
         behave as if the client had supplied the "notify-xxx-default"
         attribute (see step #1) and populate the Subscription object
         with the value of the "notify-xxx-default" attribute as part of
         the Subscription Creation operation (unlike Job Template
         attributes where the Printer does not populate the Job object
         with defaults - see [RFC2911]) OR

      b) does not specify a "notify-xxx-default" attribute, the Printer
         MUST populate the "notify-xxx" attribute on the Subscription
         Object according to the definition of the "notify-xxx"
         attribute in a section 5.3.  For some attributes, the "notify-
         xxx" is populated with the value of some other attribute, and
         for others, the "notify-xxx" is NOT populated on the
         Subscription object at all.

   6. A Printer MUST create a Subscription Object for each Subscription
      Template Attributes group in a request unless the Printer:

      a) encounters some attributes in a Subscription Template
         Attributes Group that require the Printer not to create the
         Subscription Object OR

      b) would create a Per-Job Subscription Object when it doesn't have
         space for another Per-Job Subscription Object OR




Herriot & Hastings          Standards Track                    [Page 16]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      c) would create a Per-Printer Subscription Object when it doesn't
         have space for another Per-Printer Subscription Object.

   7. A response MUST contain one Subscription Attributes Group for each
      Subscription Template Attributes Group in the request (and in the
      same order) whether the Printer creates a Subscription Object from
      the Subscription Template Attributes Group or not.  However, the
      attributes in each Subscription Attributes Group can be in any
      order.

   8. The Printer MUST populate each Subscription Attributes Group of
      the response such that each contains:

      a) the "notify-subscription-id" attribute (see section 5.4.1), if
         and only if the Printer creates a Subscription Object.

      b) the "notify-lease-duration" attribute (see section 5.3.8), if
         and only if the Printer creates a Per-Printer Subscription
         Object.  The value of this attribute is the value of the
         Subscription Object's "notify-lease-duration" attribute.  This
         value MAY be different from the client-supplied value (see
         section 5.3.8).  If a client supplies this attribute in the
         creation of a Per-Job Subscription Object, it MUST appear in
         this group with the out-of-band value 'unsupported' to indicate
         that the Printer doesn't support it in this context.

      c) all of the unsupported Subscription Template Attributes from
         step #2.  Note, they are not returned in the Unsupported
         Attributes Group in order to separate the unsupported
         attributes for each Subscription Object.

      d) the "notify-status-code" attribute if the Printer does not
         create the Subscription Object or if there are unsupported
         attributes from step #2.  The possible values of the "notify-
         status-code" attribute are shown below (see section 13 for more
         details).  The Printer returns the first value in the list
         below that describes the status.

         'client-error-uri-scheme-not-supported':  the Subscription
            Object was not created because the scheme of the "notify-
            recipient-uri" attribute is not supported.  See section 13.1
            for more details about this status code.  See step #3 in
            this section for the case that causes this error, and the
            resulting step #6a) that causes the Printer not to create
            the Subscription Object.






Herriot & Hastings          Standards Track                    [Page 17]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


         'client-error-attributes-or-values-not-supported':  the
            Subscription Object was not created because the method of
            the "notify-pull-method" attribute is not supported.  See
            section 13.1 for more details about this status code.  See
            step #3 in this section for the case that causes this error,
            and the resulting step #6a) that causes the Printer not to
            create the Subscription Object.

         'client-error-too-many-subscriptions':  the Subscription
            Object was not created because the Printer has no space for
            additional Subscription Objects.  The client MAY try again
            later.  See section 13.3 for more details about this status
            code.  See steps #6b) and #6c) in this section for the cases
            that causes this error.

         'successful-ok-too-many-events':  the Subscription Object was
            created without the "notify-events" values included in this
            Subscription Attributes Group because the "notify-events"
            attribute contains too many values.  See section 13.4 for
            more details about this status code.  See step #2 in this
            section and section 5.3.3 for the cases that cause this
            status code.

         'successful-ok-ignored-or-substituted-attributes':  the
            Subscription Object was created but some supplied
            Subscription Template Attributes are unsupported.  These
            unsupported attributes are also in the Subscription
            Attributes Group.  See section 13.5 for more details about
            this status code.  See step #2 in this section for the cases
            that cause this status code.

   9. The Printer MUST validate all Subscription Template Attributes and
      MUST return all unsupported attributes and values in the
      corresponding Subscription Attributes Group of the response (see
      step #2) unless it determines that it could not create additional
      Subscription Objects because of condition #6b) or condition #6c).
      Then, the Printer NEED NOT validate these additional Subscription
      Template Attributes and the client MUST NOT expect to find
      unsupported attributes from step #2 in such additional
      Subscription Attribute Groups.

5.3.  Subscription Template Attributes

   This section contains the Subscription Template Attributes defined
   for the Subscription and Printer objects.






Herriot & Hastings          Standards Track                    [Page 18]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 1 below shows the Subscription Template Attributes and has two
   columns:

   -  Attribute in Subscription Object: the name and attribute syntax of
      each Subscription Object Attribute that is a Subscription Template
      Attribute

   -  Default and Supported Printer Attributes: the default attribute
      and supported Printer attributes that are associated with the
      attribute in column 1.

   The "notify-recipient-uri" attribute is for use with Push Delivery
   Methods.  The "notify-pull-method" attribute is for use with Pull
   Delivery Methods.

   For Push Delivery Methods, a Printer MUST support all attributes in
   Table 1 below except for "notify-pull-method" and "notify-attributes"
   (and "notify-pull-method-supported" and "notify-attributes-
   supported").  For Pull Delivery Methods, a Printer MUST support all
   attributes in Table 1 below except for "notify-recipient-uri" and
   "notify-attributes" (and "notify-schemes-supported" and "notify-
   attributes-supported").  If a Printer supports both Push and Pull
   Delivery Methods, then it MUST support both "notify-recipient-uri"
   and "notify-pull-method" attributes.

   For Pull Delivery Methods, a client MUST supply "notify-recipient-
   uri" and MAY omit any of the rest of the attributes in column 1 of
   Table 1 in a Subscription Creation Request.  For Push Delivery
   Methods, a client MUST supply "notify-pull-method" and MAY omit any
   of the rest of the attributes in column 1 of Table 1 in a
   Subscription Creation Request.  A client MUST NOT supply both
   "notify-recipient-uri" and "notify-pull-method" attributes in the
   same Subscription Creation Request.

   Note:  The Default and Supported Printer attributes listed in column
   2 of Table 1 do not have separate sections in this specification
   defining their semantics.  Instead, the section for the corresponding
   Subscription Object attribute (column 1 of Table 1) contains the
   semantics of these Printer attributes.  This approach follows the
   precedence of the Job Template attributes in section 4.2 of [RFC2911]
   where the corresponding "xxx-default" and "xxx-supported" Printer
   attributes are defined in the same section as the "xxx" Job
   attribute.








Herriot & Hastings          Standards Track                    [Page 19]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 1 - Subscription Template Attributes

   Attribute in Subscription     Default and Supported Printer
   Object                        Attributes

   notify-recipient-uri (uri) *  notify-schemes-supported  (1setOf
                                 uriScheme)
   notify-pull-method (type2     notify-pull-method-supported (1setOf
   keyword) **                   type2 keyword)
   notify-events (1setOf type2   notify-events-default (1setOf type2
   keyword)                      keyword)
                                 notify-events-supported (1setOf type2
                                 keyword)
                                 notify-max-events-supported
                                 (integer(2:MAX))

   notify-attributes (1setOf     notify-attributes-supported (1setOf
   type2 keyword)                type2 keyword)
   notify-user-data
   (octetString(63))
   notify-charset (charset)      charset-supported (1setOf charset)
   notify-natural-language       generated-natural-language-supported
   (naturalLanguage)             (1setOf naturalLanguage)
   notify-lease-duration         notify-lease-duration-default
   (integer(0:MAX))              (integer(0:67108863))
                                 notify-lease-duration-supported
                                 (1setOf (integer(0: 67108863) |
                                 rangeOfInteger(0:67108863)))
   notify-time-interval
   (integer(0:MAX))

   * "notify-recipient-uri" is for Push Delivery Methods only.
   ** "notify-pull-method" is for Pull Delivery Methods only.

5.3.1.  notify-recipient-uri (uri)

   This attribute's value is a URL, which is a special case of a URI.
   Its value consists of a scheme and an address.  The address specifies
   the Notification Recipient and the scheme specifies the Push Delivery
   Method for each Event Notification associated with this Subscription
   Object.

   If a Printer supports any Push Delivery Methods, a Printer MUST
   support this attribute and return the value as supplied by the client
   (no case conversion or other canonicalization) in any operation
   response that includes this attribute.





Herriot & Hastings          Standards Track                    [Page 20]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   For a Push Delivery Method, a client MUST supply this attribute in a
   Subscription Creation Operation.  Thus there is no need for a default
   Printer attribute.

   The URI scheme of the value of this attribute on a Subscription
   object MUST be a value of the "notify-schemes-supported (1setOf
   uriScheme)" Printer attribute (see section 5.3.1.1).  Note: According
   to [RFC2396] the ":" terminates the scheme and so is not part of the
   scheme.  Therefore, values of the "notify-schemes-supported" Printer
   attribute do not include the ":" character.

   If the client supplies an unsupported scheme in the value of this
   attribute, then the Printer MUST NOT create the Subscription Object
   and MUST return the "notify-status-code" attribute with the 'client-
   error-uri-scheme-not-supported' value in the Subscription Attributes
   Group in the response.

5.3.1.1.  notify-schemes-supported  (1setOf uriScheme)

   This attribute contains the URI schemes supported in the "notify-
   recipient-uri" Subscription Template attribute.  See sections 5.1 and
   5.2 for the behavior of "xxx-supported" Subscription Template Printer
   attributes.

5.3.2.  notify-pull-method (type2 keyword)

   This attribute's value is a type2 keyword indicating which Pull
   Delivery Method is to be used.

   Since a Printer MUST support the 'ippget' Pull Delivery Method
   [RFC3996] (see section 15), a Printer MUST support this attribute and
   return the value as supplied by the client in any operation response
   that includes this attribute.

   For a Pull Delivery Method, a client MUST supply this attribute in a
   Subscription Creation Operation.  Thus there is no need for a default
   Printer attribute.

   The keyword value of this attribute on a Subscription object MUST be
   a value of the "notify-pull-method-supported (1setOf type2 keyword)"
   Printer attribute.

   If the client supplies an unsupported method in the value of this
   attribute, then the Printer MUST NOT create the Subscription Object
   and MUST return the "notify-status-code" attribute with the 'client-
   error-attributes-or-values-not-supported' value in the Subscription
   Attributes Group in the response.




Herriot & Hastings          Standards Track                    [Page 21]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


5.3.2.1.  notify-pull-method-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.3.  notify-events (1setOf type2 keyword)

   This attribute contains a set of Subscribed Events.  When an Event
   occurs and it "matches" a value of this attribute, the Printer
   delivers an Event Notification using information in the Subscription
   Object.  The details of "matching" are described subsection 5.3.3.5.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation, the Printer MUST populate this
   attribute on the Subscription Object with its "notify-events-default"
   attribute value.

   Each keyword value of this attribute on a Subscription Object MUST be
   a value of the  "notify-events-supported (1setOf type2 keyword)"
   Printer attribute.

   The number of values of this attribute MUST NOT exceed the value of
   the "notify-max-events-supported" attribute.  A Printer MUST support
   at least 2 values per Subscription Object.  If the number of values
   supplied by a client in a Subscription Creation Operation exceeds the
   value of this attribute, the Printer MUST treat extra values as
   unsupported values and MUST use the value of 'successful-ok-too-
   many-events' for the "notify-status-code" attribute in the
   Subscription Attributes Group of the response.

5.3.3.1.  notify-events-default (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-default"
   Subscription Template Printer attributes.

5.3.3.2.  notify-events-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.









Herriot & Hastings          Standards Track                    [Page 22]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


5.3.3.3.  notify-max-events-supported (integer(2:MAX))

   This attribute specified the maximum number of events that the
   Printer supports for the "notify-events" Subscription Template
   attribute.  See sections 5.1 and 5.2 for the behavior of "xxx-
   supported" Subscription Template Printer attributes.

5.3.3.4.  Standard Values for Subscribed Events

   Each value of this attribute is a keyword and it specifies a
   Subscribed Event that represents certain changes.  Some keywords
   represent a subset of changes of another keyword, e.g., 'job-
   completed' is an Event value which is a sub-value of 'job-state-
   change'.  See section 5.3.3.5 for the case where this attribute
   contains both a value and a sub-value.

   The values in this section are divided into three categories: No
   Events, Job Events and Printer Events.

   A Printer MUST support the Events indicated as "REQUIRED" and MAY
   support the Events indicated as "OPTIONAL".

5.3.3.4.1.  No Events

   The standard and only keyword value for No Events is:

   'none':  REQUIRED - no Event Notifications for any Events.  As the
      sole value of "notify-events-supported", this value means that the
      Printer does not support the delivery of Event Notifications.  As
      the sole value of "notify-events-default", this value means that a
      client MUST specify the "notify-events" attribute in order for a
      Subscription Creation Operation to succeed.  If the Printer
      receives this value as the sole value of a Subscription Creation
      Operation, it does not create a Subscription Object.  If a Printer
      receives this value with other values of a Subscription Creation
      Operation, the Printer MUST treat this value as an unsupported
      value.

5.3.3.4.2.  Subscribed Printer Events

   The standard keyword values for Subscribed Printer Events are:

   'printer-state-changed':  REQUIRED - the Printer changed state from
      any state to any other state.  Specifically, the value of the
      Printer's "printer-state", "printer-state-reasons" or "printer-
      is-accepting-jobs" attributes changed.





Herriot & Hastings          Standards Track                    [Page 23]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      This Subscribed Event value has the following sub-values:
      'printer-restarted' and 'printer-shutdown'.  A client can listen
      for any of these sub-values if it doesn't want to listen to all
      printer-state changes:

         'printer-restarted':  OPTIONAL - when the printer is powered
            up.

         'printer-shutdown':  OPTIONAL - when the device is being
            powered down.

         'printer-stopped:  REQUIRED - when the printer stops printing,
            i.e., the value of the "printer-state" Printer attribute
            becomes 'stopped'.

   'printer-config-changed':  OPTIONAL - when the configuration of a
      Printer has changed, i.e., the value of the "printer-message-
      from-operator" or any "configuration" Printer attribute has
      changed.  A "configuration" Printer attribute is an attribute
      which can change value because of some human interaction either
      direct or indirect, and which is not covered by one of the other
      Events in this section.  Examples of "configuration" Printer
      attributes are any of the Job Template attributes, such as "xxx-
      supported", "xxx-ready" and "xxx-default".  The client has to
      perform a Get-Printer-Attributes to find out the new values of
      these changed attributes.  This Event is useful for GUI clients
      and drivers to update the available printer capabilities to the
      user.

      This Event value has the following sub-values: 'printer-media-
      changed' and 'printer-finishings-changed'.  A client can listen
      for any of these sub-values if it doesn't want to listen to all
      printer-configuration changes:

         'printer-media-changed':  OPTIONAL - when the media loaded on
            a printer has been changed, i.e., the "media-ready"
            attribute has changed.  This Event includes two cases: an
            input tray that goes empty and an input tray that receives
            additional media of the same type or of a different type.
            The client must check the "media-ready" Printer attribute
            (see [RFC2911] section 4.2.11) separately to find out what
            changed.

         'printer-finishings-changed':  OPTIONAL - when the finisher on
            a printer has been changed, i.e., the "finishings-ready"
            attribute has changed.  This Event includes two cases: a
            finisher that goes empty and a finisher that is refilled
            (even if it is not full).  The client must check the



Herriot & Hastings          Standards Track                    [Page 24]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


            "finishings-ready" Printer attribute separately to find out
            what changed.

   'printer-queue-order-changed': OPTIONAL - the order of jobs in the
      Printer's queue has changed, so that an application that is
      monitoring the queue can perform a Get-Jobs operation to determine
      the new order.  This Event does not include when a job enters the
      queue (the 'job-created' Event covers that) and does not include
      when a job leaves the queue (the 'job-completed' Event covers
      that).

5.3.3.4.3.  Subscribed Job Events

   The standard keyword values for Subscribed Job Events are:

   'job-state-changed':  REQUIRED - the job has changed from any state
      to any other state.  Specifically, the Printer delivers this Event
      whenever the value of the "job-state" attribute or "job-state-
      reasons" attribute changes.  When a Job is removed from the Job
      Retention or Job History phases (see [RFC2911] section 4.3.7.1),
      no Event is generated.

      This Event value has the following sub-values: 'job-created',
      'job-completed' and 'job-stopped'.  A client can listen for any of
      these sub-values if it doesn't want to listen to all 'job-state
      changes'.

      'job-created':  REQUIRED - the Printer has accepted a Job
         Creation operation, a Restart-Job operation [RFC2911], or any
         job operation that creates a Job object from an existing Job
         object.  The Printer populates the job's "time-at-creation"
         attribute value (see [RFC2911] section 4.3.14.1).  The Printer
         puts the job in the 'pending', 'pending-held' or 'processing'
         states.

      'job-completed':  REQUIRED - the job has reached one of the
         completed states, i.e., the value of the job's "job-state"
         attribute has changed to: 'completed', 'aborted', or
         'canceled'.  The Job's "time-at-completed" and "date-time-at-
         completed" (if supported) attributes are set (see [RFC2911]
         section 4.3.14).  When a Job completes, a Notification
         Recipient MAY query the Job using the Get-Job-Attributes
         operation.  To allow such a query, the Printer retains the Job
         in the Job Retention and/or the Job History phases (see
         [RFC2911] section 4.3.7.1) for a suitable amount of time that
         depends on implementation and the Delivery Methods supported.
         The Printer also delivers this Event when a Job is removed with
         the Purge-Job operation (see [RFC2911] section 3.2.9).  In this



Herriot & Hastings          Standards Track                    [Page 25]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


         case, the Event Notification MUST report the 'job-state' as
         'canceled' and the Job object is no longer present for query.

      'job-stopped:  OPTIONAL - when the job stops printing, i.e.,
         the value of the "job-state" Job attribute becomes
         'processing-stopped'.

   'job-config-changed':  OPTIONAL - when the configuration of a job has
      changed, i.e., the value of the "job-message-from-operator" or any
      of the "configuration" Job attributes have changed.  A
      "configuration" Job attribute is an attribute that can change
      value because of some human interaction either direct or indirect.
      Examples of "configuration" Job attributes are any of the job
      template attributes and the "job-name" attribute.  The client
      performs a Get-Job-Attributes to find out the new values of the
      changed attributes.  This Event is useful for GUI clients and
      drivers to update the job information to the user.

   'job-progress': OPTIONAL - when the Printer has completed Printing a
      sheet.  See the separate [RFC3381] specification for additional
      attributes that a Printer MAY deliver in an Event Notification
      caused by this Event.  The "notify-time-interval" attribute
      affects this Event by causing the Printer NOT to deliver an Event
      Notification every time a 'job-progress' Events occurs.  See
      section 5.3.9 for full details.

5.3.3.5.  Rules for Matching of Subscribed Events

   When an Event occurs, the Printer MUST find each Subscription object
   whose "notify-events" attribute "matches" the Event.  The rules for
   "matching" of Subscribed Events are described separately for Printer
   Events and for Job Events.  This section also describes some special
   cases.

5.3.3.5.1.  Rules for Matching of Printer Events

   Given that the Printer causes Printer Event E to occur, for each
   Per-Job or Per-Printer Subscription S in the Printer, if E equals a
   value of this attribute in S or E is a sub-value of a value of this
   attribute in S, the Printer MUST generate an Event Notification.

   Consider the example.  There are three Subscription Objects each with
   the Subscribed Printer Event 'printer-state-changed'.  Subscription
   Object A is a Per-Printer Subscription Object.  Subscription Object B
   is a Per-Job Subscription Object for Job 1, and Subscription Object C
   is a Per-Job Subscription Object for Job 2.  When the Printer enters
   the 'stopped' state, the Printer delivers an Event Notification to
   the Notification Recipients of Subscription Objects A, B, and C



Herriot & Hastings          Standards Track                    [Page 26]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   because this is a Printer Event.  Note if Job 1 has already
   completed, the Printer would not deliver an Event Notification for
   its Subscription Object, even if Job 1 is retained in the Job
   Retention and/or the Job History phases (see [RFC2911] section
   4.3.7.1).

5.3.3.5.2.  Rules for Matching of Job Events

   Given that Job J causes Job Event E to occur:

   1. For each Per-Printer Subscription S in the Printer, if E equals a
      value of this attribute in S or E is a sub-value of a value of
      this attribute in S, the Printer MUST generate an Event
      Notification.

   2. For each Per-Job Subscription S associated with Job J, if E equals
      a value of this attribute in S or E is a sub-value of a value of
      this attribute in S, the Printer MUST generate an Event
      Notification.

   3. For each Per-Job Subscription S that is NOT associated Job J, if E
      equals a value of this attribute in S or E is a sub-value of a
      value of this attribute in, the Printer MUST NOT generate an Event
      Notification from S.

   Consider the example: There are three Subscription Objects listening
   for the Job Event 'job-completed'.  Subscription Object A is a Per-
   Printer Subscription Object.  Subscription Object B is a Per-Job
   Subscription Object for Job 1, and Subscription Object C is a Per-Job
   Subscription Object for Job 2.  In addition, Per-Printer Subscription
   Object D is listening for the Job Event 'job-state-changed'.  When
   Job 1 completes, the Printer delivers an Event Notification to the
   Notification Recipient of Subscription Object A (because it is Per-
   Printer) and Subscription Object B because it is a Per-Job
   Subscription Object associated with the Job generating the Event.
   The Printer also delivers an Event Notification to the Notification
   Recipient of Subscription Object D because 'job-completed' is a sub-
   value of 'job-state-changed' - the value that Subscription Object D
   is listening for.  The Printer does not deliver an Event Notification
   to the Notification Recipients of Subscription Object C because it is
   a Per-Job Subscription Object associated with some Job other than the
   Job generating the Event.

5.3.3.5.3.  Special Cases for Matching Rules

   This section contains two rules for the special case where a single
   Event produces multiple Event Notifications destined for the same
   Notification Recipient.  These two rules clarify whether a Printer



Herriot & Hastings          Standards Track                    [Page 27]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   should send multiple Event Notifications or consolidate them into a
   single Event Notification.

   If an Event matches Subscribed Events in two different Subscription
   Objects and the Printer would deliver two identical Event
   Notifications (except for the "notify-subscription-id" attribute) to
   the same Notification Recipient using the same Delivery Method, the
   Printer MUST deliver both Event Notifications.  That is, the Printer
   MUST NOT try to consolidate seemingly identical Event Notifications
   that occur in separate Subscription objects.  Incidentally, the
   Printer MUST NOT reject Subscription Creation Operations that would
   create this scenario.

   Consider the example: At the time a Job completes, there are two
   Per-Printer Subscription Objects A and B with the same Notification
   Recipient R.  Subscription Object A has the Subscribed Job Event
   'job-state-changed'.  Subscription Object B has the Subscribed Job
   Event 'job-completed'.  Both Subscription Objects match the Event
   'job-completed'.  The Printer delivers two Event Notifications to the
   Notification Recipient R.  One with the value of  'job-state-changed'
   for the "notify-subscribed-event" attribute and the other with the
   value of  'job-completed' for the "notify-subscribed-event"
   attribute.

   If an Event matches two Subscribed Events in a single Subscription
   object (e.g., a value and its sub-value), a Printer MAY deliver one
   Event Notification for each matched value in the Subscription Object
   or it MAY deliver only a single Event Notification.  The rules in
   sections 5.3.3.5.1 and 5.3.3.5.2 are purposefully flexible about the
   number of Event Notifications sent when Event E matches two or more
   values in a Subscription Object.

   Consider the example: At the time a Job completes, a Subscription
   Object A has two Subscribed Job Events 'job-state-changed' and 'job-
   completed'.  Both Subscribed Job Events match the Event 'job-
   completed'.  The Printer delivers either one or two Event
   Notifications to the Notification Recipient of Subscription Object A,
   depending on implementation.  If it delivers two Event Notifications,
   one has the value of  'job-state-changed' for the "notify-
   subscribed-event" attribute, and the other has the value of 'job-
   completed' for the "notify-subscribed-event" attribute.  If it
   delivers one Event Notification, it has the value of either 'job-
   state-changed' or 'job-completed' for the "notify-subscribed-event"
   attribute, depending on implementation.  The algorithm for choosing
   such a value is implementation dependent.






Herriot & Hastings          Standards Track                    [Page 28]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


5.3.4.  notify-attributes (1setOf type2 keyword)

   This attribute contains a set of attribute names.  When a Printer
   delivers a Machine Consumable Event Notification, it includes a fixed
   set of attributes (see section 9.1).  If this attribute is present
   and the Event Notification is Machine Consumable, the Printer also
   includes the attributes specified by this attribute.

   A Printer MAY support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or the Printer does not support this
   attribute, the Subscription Object either (1) MAY contain the
   "notify-attributes" attribute with a 'none' value or (2) NEED NOT
   contain the attribute at all.  There is no "notify-attributes-
   default" Printer attribute.

   Each keyword value of this attribute on a Subscription Object MUST be
   a value of the "notify-attributes-supported (1setOf type2 keyword)"
   Printer attribute (see section 5.3.4.1).  The "notify-attributes-
   supported" MAY contain any Printer attribute, Job attribute or
   Subscription Object attribute that the Printer supports in an Event
   Notification.  It MUST NOT contain any of the attributes in Section
   9.1 that a Printer automatically puts in an Event Notification; it
   would be redundant.  If a client supplies an attribute in Section
   9.1, the Printer MUST treat it as an unsupported attribute value of
   the "notify-attributes" attribute.

   The following rules apply to each keyword value N of the "notify-
   attributes" attribute: If the value N names:

   a) a Subscription attribute, the Printer MUST use the attribute N in
      the Subscription Object that is being used to generate the Event
      Notification.

   b) a Job attribute and the Printer is generating an Event
      Notification from a Per-Job Subscription Object S, the Printer
      MUST use the attribute N in the Job object associated with S.

   c) a Job attribute and the Printer is generating an Event
      Notification from a Per-Printer Subscription Object and the Event
      is:

      -  a Job Event, the Printer MUST use the attribute N in the Job
         object that caused the Event.





Herriot & Hastings          Standards Track                    [Page 29]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      -  a Printer Event, the Printer MUST use the attribute N in the
         active Job.

   If a Printer supports this attribute and a Subscription Object
   contains this attribute and the Delivery Method generates a Machine
   Consumable Event Notification, the Printer MUST include in each Event
   Notification:

   a) the attributes specified in section 9.1 and

   b) each attribute named by this attribute.

   The Printer MUST NOT use this attribute to generate a Human
   Consumable Event Notification.

5.3.4.1.  notify-attributes-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.5.  notify-user-data (octetString(63))

   This attribute contains opaque data that some Delivery Methods
   include in each Machine Consumable Event Notification.  The opaque
   data might contain, for example:

   -  the identity of the Subscriber

   -  a path or index to some Subscriber information

   -  a key that identifies to the Notification Recipient the ultimate
      recipient of the Event Notification

   -  the id for a Notification Recipient that had previously registered
      with an Instant Messaging Service

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in the
   Subscription Creation Operation, the Subscription Object either (1)
   MAY contain the "notify-user-data" attribute with a zero length value
   or (2) NEED NOT contain the attribute at all.  There is no "notify-
   user-data-default" Printer attribute.







Herriot & Hastings          Standards Track                    [Page 30]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   There is no "notify-user-data-supported" Printer attribute.  Rather,
   any octetString whose length does not exceed 63 octets is a supported
   value.  If the length exceeds 63 octets, the Printer MUST treat it as
   an unsupported value.

5.3.6.  notify-charset (charset)

   This attribute specifies the charset to be used in the Event
   Notification content sent to the Notification Recipient, whether the
   Event Notification content is Machine Consumable or Human Consumable.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or supplies an unsupported value, the
   Printer MUST populate this attribute in the Subscription Object with
   the value of the "attributes-charset" operation attribute, which is a
   REQUIRED attribute in all IPP requests (see [RFC2911]).  If the value
   of the "attributes-charset" attribute is unsupported, the Printer
   MUST populate this attribute in the Subscription Object with the
   value of the Printer's "charset-configured" attribute.  There is no
   "notify-charset-default" Printer attribute.

   The value of this attribute on a Subscription Object MUST be a value
   of the "charset-supported (1setOf charset)" Printer attribute.

5.3.7.  notify-natural-language (naturalLanguage)

   This attribute specifies the natural language to be used in any human
   consumable text in the Event Notification content sent to the
   Notification Recipient, whether the Event Notification content is
   Machine Consumable or Human Consumable.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or supplies an unsupported value, the
   Printer MUST populate this attribute in the Subscription Object with
   the value of the "attributes-natural-language" operation attribute,
   which is a REQUIRED attribute in all IPP requests (see [RFC2911]
   section 3.1.4).  If the value of the "attributes-natural-language"
   attribute is unsupported, the Printer MUST populate this attribute in
   the Subscription Object with the value of the Printer's "natural-
   language-configured" attribute (see [RFC2911] section 4.4.19).  There
   is no "notify-natural-language-default" Printer attribute.




Herriot & Hastings          Standards Track                    [Page 31]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   The value of this attribute on a Subscription Object MUST be a value
   of the "generated-natural-language-supported (1setOf type2
   naturalLanguage)" Printer attribute (see [RFC2911] section 4.4.20).

5.3.8.  notify-lease-duration (integer(0:67108863))

   This attribute specifies the duration of the lease (in seconds)
   associated with the Per-Printer Subscription Object at the time the
   Subscription Object was created or the lease was renewed.  The
   duration of the lease is infinite if the value is 0, i.e., the lease
   never expires.  See section 5.4.3 on "notify-lease-expiration-time
   (integer(0:MAX))" for more details.

   This attribute is not present on a Per-Job Subscription Object
   because the Subscription Object lasts exactly as long as the
   associated Job object.  See discussion of the 'job-completed' event
   in section 5.3.3.4.3 about retention of the Job object after
   completion.

   A Printer MUST support this attribute.

   For a Subscription Object Creation operation of a Per-Job
   Subscription Object, the client MUST NOT supply this attribute.  If
   the client does supply this attribute, the Printer MUST treat it as
   an unsupported attribute.

   For a Subscription Creation Operation of a Per-Printer Subscription
   Object or a Renew-Subscription operation, a client MAY supply this
   attribute.  If the client does not supply this attribute, the Printer
   MUST populate this attribute with its "notify-lease-duration-default"
   (0:67108863) attribute value.  If the client supplies this attribute
   with an unsupported value, the Printer MUST populate this attribute
   with a supported value, and this value SHOULD be as close as possible
   to the value requested by the client.  Note: this rule implies that a
   Printer doesn't assign the value of 0 (infinite) unless the client
   requests it.

   After the Printer has populated this attribute with a supported
   value, the value represents the "granted duration" of the lease in
   seconds and the Printer updates the value of the Subscription
   Object's "notify-lease-expiration-time" attribute as specified in
   section 5.4.3.

   The value of this attribute on a Subscription Object MUST be a value
   of the "notify-lease-duration-supported" (1setOf (integer(0:67108863)
   | rangeOfInteger(0:67108863))) Printer attribute.





Herriot & Hastings          Standards Track                    [Page 32]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   A Printer MAY require authentication in order to return the value of
   0 (the lease never expires) as one of the values of "notify-lease-
   duration-supported", and to allow 0 as a value of the "notify-lease-
   duration" attribute.

   Note:  The maximum value 67,108,863 is 2 raised to the 26 power minus
   1 and is about 2 years in seconds.  The value is considerably less
   than MAX so that there is virtually no chance of an overflow when the
   Printer adds it to the Printer's "printer-up-time" attribute value
   (see [RFC2911] section 4.4.29) to produce the "notify-lease-
   expiration-time" Subscription Description attribute value (see
   section 5.4.3).

5.3.8.1.  notify-lease-duration-default (integer(0:67108863))

   See sections 5.1 and 5.2 for the behavior of "xxx-default"
   Subscription Template Printer attributes.

5.3.8.2. notify-lease-duration-supported (1setOf (integer(0: 67108863) |
         rangeOfInteger(0:67108863)))

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.9.  notify-time-interval (integer(0:MAX))

   The 'job-progress' Event occurs each time that a Printer completes a
   sheet.  Some Notification Recipients do not want to receive an Event
   Notification every time this Event occurs.  This attribute allows a
   Subscribing Client to request how often it wants to receive Event
   Notifications for 'job-progress' Events.  The value of this attribute
   MAY be any nonnegative integer (0,MAX) indicating the minimum number
   of seconds between 'job-progress' Event Notifications.

   The Printer MUST support this attribute if and only if the Printer
   supports the 'job-progress' Event.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in the
   Subscription Creation Operation, the Subscription Object either (1)
   MAY contain the "notify-time-interval" attribute with a '0' value or
   (2) NEED NOT contain this attribute at all.  There is no "notify-
   time-interval-default" Printer attribute.

   There is no "notify-time-interval-supported" Printer attribute.






Herriot & Hastings          Standards Track                    [Page 33]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   If the 'job-progress' Event occurs and a Subscription Object contains
   the 'job-progress' Event as a value of the 'notify-events' attribute,
   there are two cases to consider:

   1. This attribute is not present on the Subscription Object or has
      the value of 0.  The Printer MUST generate and deliver an Event
      Notification (as is the case with other Events).

   2. This attribute is present with a nonzero value of N:

      a) If the Printer has not sent an Event Notification for the
         'job-progress' Event for the associated Subscription Object
         within the past N seconds, the Printer MUST deliver an Event
         Notification for the Event that just occurred.  Note when the
         Printer completes the first page of a Job, this rule implies
         that the Printer delivers an Event Notification for a Per-Job
         Subscription Object.

      b) Otherwise, the Printer MUST NOT generate or deliver an Event
         Notification for the associated Subscription Object.  The
         Printer MUST NOT increase the value of the "notify-sequence-
         number" Subscription Object attribute (i.e., the sequence of
         values of the "notify-sequence-number" attribute counts the
         Event Notifications that the Printer sent and not the Events
         that do not cause an Event Notification to be sent).

   It is RECOMMENDED that a Subscribing Client use this attribute when
   it subscribes to the 'job-progress' Event, and that the value be
   sufficiently large to limit the frequency with which the Printer
   delivers Event Notifications requests.

   This attribute MUST NOT effect any Events other than 'job-progress'.

5.4.  Subscription Description Attributes

   Subscription Description Attributes are those attributes that a
   Printer adds to a Subscription Object at the time of its creation.

   A Printer MUST support all attributes in this Table 2.

   A client MUST NOT supply the attributes in Table 2 in a Subscription
   Template Attributes Group of a Subscription Creation Operation.
   There are no corresponding default or supported attributes.








Herriot & Hastings          Standards Track                    [Page 34]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 2 - Subscription Description Attributes

      Subscription Object attributes:

      notify-subscription-id (integer(1:MAX))
      notify-sequence-number (integer(0:MAX))
      notify-lease-expiration-time (integer(0:MAX))
      notify-printer-up-time (integer(1:MAX))
      notify-printer-uri (uri)
      notify-job-id (integer(1:MAX))
      notify-subscriber-user-name (name(MAX))

5.4.1.  notify-subscription-id  (integer (1:MAX))

   This attribute identifies a Subscription Object instance with a
   number that is unique within the context of the Printer.  The Printer
   generates this value at the time it creates the Subscription Object.

   A Printer MUST support this attribute.

   The Printer MAY assign the value of this attribute sequentially as it
   creates Subscription Objects.  However, if there is no security on
   Subscription objects, sequential assignment exposes the system to a
   passive traffic monitoring threat.

   The Printer SHOULD avoid re-using recent values of this attribute
   during continuous operation of the Printer as well as across power
   cycles.  Then a Subscribing Client is unlikely to find that a stale
   reference accesses a new Subscription Object.

   The 0 value is not permitted in order to allow for compatibility with
   "job-id" and with MIB table index values, which are recommended not
   to be 0.

5.4.2.  notify-sequence-number (integer (0:MAX))

   The value of this attribute indicates the number of times that the
   Printer has generated and attempted to deliver an Event Notification
   for this Subscription object.  When an Event Notification contains
   this attribute, the Notification Recipient can determine whether it
   missed some Event Notifications (i.e., numbers skipped) or received
   duplicates (i.e., same number twice).

   A Printer MUST support this attribute.

   When the Printer creates a Subscription Object, it MUST populate this
   attribute with a value of 0.  This value indicates that the Printer
   has not sent any Event Notifications for this Subscription Object.



Herriot & Hastings          Standards Track                    [Page 35]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Each time the Printer delivers a newly generated Event Notification,
   it MUST increase the value of this attribute by 1.  For some Delivery
   Methods, the Printer MUST include this attribute in each Event
   Notification, and the value MUST be the value after it is increased
   by 1.  That is, the value of this attribute in the first Event
   Notification after Subscription object creation MUST be 1, the second
   MUST be 2, etc.  If a Delivery Method is defined such that the
   Notification Recipient returns a response, the Printer can re-try
   delivering an Event Notification a certain number of times with the
   same sequence number when the Notification Recipient fails to return
   a response.

   If a Subscription Object lasts long enough to reach the value of MAX,
   its next value MUST be 0, i.e., it wraps.

5.4.3.  notify-lease-expiration-time (integer(0:MAX))

   This attribute specifies the time in the future when the lease on the
   Per-Printer Subscription Object will expire, i.e., the "printer-up-
   time" value at which the lease will expire.  If the value is 0, the
   lease never expires.

   A Printer MUST support this attribute.

   When the Printer creates a Per-Job Subscription Object, this
   attribute MUST NOT be present - the Subscription Object lasts exactly
   as long as the associated Job object.  See also the discussion of the
   'job-completed' event in section 5.3.3.4.3 about retention of the Job
   object after completion so that a Notification Recipient can query
   the Job object after receiving the 'job-completed' Event
   Notification.

   When the Printer creates a Per-Printer Subscription Object, it
   populates this attribute with a value that is the sum of the values
   of the Printer's "printer-up-time" attribute and the Subscription
   Object's "notify-lease-duration" attribute with the following
   exception.  If the value of the Subscription Object's "notify-lease-
   duration" attribute is 0 (i.e., no expiration time), then the value
   of this attribute MUST be set to 0 (i.e., no expiration time).

   When the Printer powers up, it MUST populate this attribute in each
   persistent Subscription Object with a value using the algorithm in
   the previous paragraph.

   When the "printer-up-time" equals the value of this attribute, the
   Printer MUST delete the Subscription Object.  A client can extend a
   lease of a Per-Printer Subscription Object with the Renew-
   Subscription operation (see section 11.2.6).



Herriot & Hastings          Standards Track                    [Page 36]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Note: In order to compute the number of seconds remaining in a lease
   for a Per-Printer Subscription Object, a client can subtract the
   Subscription's "notify-printer-up-time" attribute (see section 5.4.4)
   from the Subscription's "notify-lease-expiration-time" attribute.

5.4.4.  notify-printer-up-time (integer(1:MAX))

   This attribute is an alias for the Printer's "printer-up-time"
   attribute " (see [RFC2911] section 4.4.29).  In other words, when
   this attribute is queried with the Get-Subscriptions or Get-
   Subscription-Attributes operations (see sections 11.2.4 and 11.2.5),
   the value returned is the current value of the Printer's "printer-
   up-time" attribute, rather than the time at which the Subscription
   Object was created.

   A Printer MUST support this attribute.

   When the Printer creates a Per-Job Subscription Object, this
   attribute MUST NOT be present.  When the Printer creates a Per-
   Printer Subscription Object, this attribute MUST be present.

   Note: this attribute exists in a Per-Printer Subscription Object so
   that a client using the Get-Subscription-Attributes or Get-
   Subscription operations can convert the Per-Printer Subscription's
   "notify-lease-expiration-time" attribute to wall clock time with one
   request.  If the value of the "notify-lease-expiration-time"
   attribute is not 0 (i.e., no expiration time), then the difference
   between the "notify-lease-expiration-time" attribute and the
   "notify-printer-up-time" is the remaining number of seconds on the
   lease from the current time.

5.4.5.  notify-printer-uri (uri)

   This attribute identifies the Printer object that created this
   Subscription Object.

   A Printer MUST support this attribute.

   During a Subscription Creation Operation, the Printer MUST populate
   this attribute with the value of the "printer-uri" operation
   attribute in the request.  From the Printer URI, the client can, for
   example, determine what security scheme was used.

5.4.6.  notify-job-id (integer(1:MAX))

   This attribute specifies whether the containing Subscription Object
   is a Per-Job or Per-Printer Subscription Object, and for Per-Job
   Subscription Objects, it specifies the associated Job.



Herriot & Hastings          Standards Track                    [Page 37]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   A Printer MUST support this attribute.

   If this attribute is not present, the Subscription Object MUST be a
   Per-Printer Subscription.  If this attribute is present, the
   Subscription Object MUST be a Per-Job Subscription Object and this
   attribute MUST identify the Job with which the Subscription Object is
   associated.

   Note: This attribute could be useful to a Notification Recipient that
   receives an Event Notification generated from a Per-Job Subscription
   Object and caused by a Printer Event.  The Event Notification gives
   access to the Printer and the Subscription Object.  The Event
   Notification gives access to the associated Job only via this
   attribute.  See discussion of the 'job-completed' event in section
   5.3.3.4.3 about retention of the Job object after completion so that
   a Notification Recipient can query the Job object after receiving the
   'job-completed' Event Notification.

5.4.7.  notify-subscriber-user-name (name(MAX))

   This attribute contains the name of the user who performed the
   Subscription Creation Operation.

   A Printer MUST support this attribute.

   The Printer MUST populates this attribute with the most authenticated
   printable name that it can obtain from the authentication service
   over which the Subscription Creation Operation was received.  The
   Printer uses the same mechanism for determining the value of this
   attribute as it does for a Job's "job-originating-user-name" (see
   [RFC2911] section 4.3.6).

   Note:  To help with authentication, a Subscription Object may have
   additional private attributes about the user, e.g., a credential of a
   principal.  Such private attributes are implementation-dependent and
   not defined in this document.

6.  Printer Description Attributes Related to Notification

   This section defines the Printer Description attributes that are
   related to Notification.  Table 3 lists the Printer Description
   attributes, indicates the Printer support required for conformance,
   and whether or not the attribute is READ-ONLY (see section 3.1):








Herriot & Hastings          Standards Track                    [Page 38]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 3 - Printer Description Attributes Associated with Notification

   Printer object attributes:                   REQUIRED     READ-ONLY

   printer-state-change-time (integer(1:MAX))   No           Yes
   printer-state-change-date-time (dateTime)    No           Yes

6.1.  printer-state-change-time (integer(1:MAX))

   This OPTIONAL attribute records the most recent time at which the
   'printer-state-changed' Printer Event occurred whether or not any
   Subscription objects were listening for this event.  This attribute
   helps a client or operator to determine how long the Printer has been
   in its current state.

   A Printer MAY support this attribute and if so, the attribute MUST be
   READ-ONLY.

   On power-up, the Printer MUST populate this attribute with the value
   of its "printer-up-time" attribute, so that it always has a value.
   Whenever the 'printer-state-changed' Printer Event occurs, the
   Printer MUST update this attribute with the value of the Printer's
   "printer-up-time" attribute.

6.2.  printer-state-change-date-time (dateTime)

   This OPTIONAL attribute records the most recent time at which the
   'printer-state-changed' Printer Event occurred whether or not there
   were any Subscription Objects listening for this event.  This
   attribute helps a client or operator to determine how long the
   Printer has been in its current state.

   A Printer MAY support this attribute and if so, the attribute MUST be
   READ-ONLY.

   On power-up, the Printer MUST populate this attribute with the value
   of its "printer-current-time" attribute, so that it always has a
   value (see [RFC2911] section 4.4.30 on "printer-current-time").
   Whenever the 'printer-state-changed' Printer Event occurs, the
   Printer MUST update this attribute with the value of the Printer's
   "printer-current-time" attribute.

7.  New Values for Existing Printer Description Attributes

   This section contains those attributes for which additional values
   are added.





Herriot & Hastings          Standards Track                    [Page 39]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


7.1.  operations-supported (1setOf type2 enum)

   The following "operation-id" values are added in order to support the
   new operations defined in this document:

   Table 4 - Operation-id assignments

   Value       Operation Name

   0x0016      Create-Printer-Subscriptions
   0x0017      Create-Job-Subscriptions
   0x0018      Get-Subscription-Attributes
   0x0019      Get-Subscriptions
   0x001A      Renew-Subscription
   0x001B      Cancel-Subscription

8.  Attributes Only in Event Notifications

   This section contains those attributes that exist only in Event
   Notifications and do not exist in any objects.

8.1.  notify-subscribed-event (type2 keyword)

   This attribute indicates the Subscribed Event that caused the Printer
   to deliver this Event Notification.  This attribute exists only in
   Event Notifications.

   This attribute MUST contain one of the values of the "notify-events"
   attribute in the Subscription Object, i.e., one of the Subscribed
   Event values.  Its value is the Subscribed Event that "matches" the
   Event that caused the Printer to deliver this Event Notification.
   This Subscribed Event value may be identical to the Event or the
   Event may be a sub-value of the Subscribed Event.  For example, the
   'job-completed' Event (which is a sub-event of the 'job-state-
   changed' event) would cause the Printer to deliver an Event
   Notification for either the 'job-completed' or 'job-state-changed'
   Subscribed Events and to deliver the 'job-completed' or 'job-state-
   changed' value for this attribute, respectively.  See section 5.3.3.5
   for the "matching" rules of Subscribed Events and for additional
   examples.

   The Delivery Method Document specifies whether the Printer includes
   the value of this attribute in an Event Notification.








Herriot & Hastings          Standards Track                    [Page 40]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


8.2.  notify-text (text(MAX))

   This attribute contains a Human Consumable text message (see section
   9.2).  This message describes the Event and is encoded as plain text,
   i.e., 'text/plain' with the charset specified by Subscription
   Object's "notify-charset" attribute.

   Note: this attribute contains a text message only and must not
   contain any encoding information, such as 'text/plain'.  The
   'text/plain' encoding is implicit and thus the charset must be
   specified by an alternate mechanism, namely the "notify-charset"
   attribute.

   The Delivery Method Document specifies whether the Printer includes
   this attribute in an Event Notification.

9.  Event Notification Content

   This section defines the Event Notification content that the Printer
   delivers when an Event occurs.

   When an Event occurs, the Printer MUST find each Subscription object
   whose "notify-events" attribute "matches" the Event.  See section
   5.3.3.5 for details on "matching".  For each matched Subscription
   Object, the Printer MUST create an Event Notification with the
   content and format that the Delivery Method Document specifies.  The
   content contains the value of attributes specified by the Delivery
   Method Document.  The Printer obtains the values immediately after
   the Event occurs.  For example, if the "printer-state" attribute
   changes from 'idle' to 'processing', the Event 'printer-state-
   changed' occurs and the Printer puts various attributes into the
   Event Notification, including "printer-up-time" and "printer-state"
   with the values that they have immediately after the Event occurs,
   i.e., the value of  "printer-state" is 'processing'.

   Event Notification Ordering:

   When a Printer delivers Event Notifications, the Event Notifications
   from any given Subscription Object MUST be in time stamp order, i.e.,
   in order of increasing "printer-up-time" attribute value in the Event
   Notification (see Table 5).  These Event Notifications MAY be
   interleaved with those from other Subscription Objects, as long as
   those others are also in time stamp order.  The Printer MUST observe
   these ordering requirements whether delivering multiple pending
   Events as multiple separate Event Notifications or together in a
   single Compound Event Notification.





Herriot & Hastings          Standards Track                    [Page 41]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   If a Subscribing Client wants the Printer to deliver certain Event
   Notifications in time stamp order, the Subscribing Client uses a
   single Subscription Object.  Even so, depending on the underlying
   transport, the actual order that a Notification Recipient receives
   separate Event Notifications may differ from the order sent by the
   Printer (e.g., email).

   Example:  Consider two Per-Printer Subscription Objects: SO1 and SO2.
   SO1 requests 'job-state-changed' events and SO2 requests 'printer-
   state-changed' events.  The number in parens is the time stamp.  The
   following Event Notification sequences are the only ones that conform
   to the ordering requirements for the Printer to deliver the Event
   Notifications:

      (a) SO1: 'job-created' (1000), SO1: 'job-stopped' (1005), SO1:
      'job-completed' (1009), SO2: 'printer-stopped' (1005)

      (b) SO1: 'job-created' (1000), SO1: 'job-stopped' (1005), SO2:
      'printer-stopped' (1005), SO1: 'job-completed' (1009)

      (c) SO1: 'job-created' (1000), SO2: 'printer-stopped' (1005), SO1:
      'job-stopped' (1005), SO1: 'job-completed' (1009)

      (d) SO2: 'printer-stopped (1005), SO1: 'job-created' (1000), SO1:
      'job-stopped' (1005), SO1: 'job-completed' (1009)

   Examples (b) and (c) are interleaved; examples (a) and (d) are not
   interleaved and are not appropriate for some Delivery Methods.

   If two different Events occur simultaneously, or nearly so (e.g.,
   "printer-up-time" has the same value for both), the Printer MUST
   create a separate Event Notification for each Event, even if the
   associated Subscription Object is the same for both Events.  However,
   the Printer MAY combine these distinct Event Notifications into a
   single Compound Event Notification if the Delivery Method supports
   Compound Event Notifications.  For example, suppose that two nearly-
   simultaneously Events represent two successive 'printer-state-
   changed' Events, one from 'idle' to 'processing' and another from
   'processing' to 'stopped'.  These two Events have the same name but
   are different instances of the Event.  Then the Printer MUST create a
   separate Event Notification for each Event and SHOULD accurately
   report the "printer-state" of the first Event as 'processing' and the
   second Event as 'stopped'.

   If a Subscription Object contains more than one Subscribed Event, and
   several Events occur in quick succession each matching a different
   Subscribed Event in the Subscription Object, the Printer MUST NOT
   generate a single Event Notification from several of these Events,



Herriot & Hastings          Standards Track                    [Page 42]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   but MAY combine distinct Event Notifications into a single Compound
   Event Notification if the Delivery Method supports Compound Event
   Notifications.

   After the Printer has created the Event Notification, the Printer
   delivers it via either a:

      Push Delivery Method: The Printer delivers the Event Notification
      shortly after an Event occurs.  For some Push Delivery Methods,
      the Notification Recipient MUST deliver a response; for others it
      MUST NOT deliver a response.

      Pull Delivery Method: The Printer saves Event Notifications for
      some Event Life and expects the Notification Recipient to request
      Event Notifications.  The Printer returns the Event Notifications
      in a response to such a request.

   If an error that meets the following conditions occurs, the Printer
   MUST cancel the Subscription Object.

   a) the error occurs during the delivering of an Event Notification
      generated from Subscription Object S AND

   b) the error would continue to occur every time the Printer delivers
      an Event Notification generated from Subscription Object S in the
      future.

   For example, if the address of the "notify-recipient-uri" of
   Subscription Object A references a non-existent target and the
   Printer determines this fact, it MUST delete Subscription Object A.

   The next two sections describe the values that a Printer delivers in
   the content of Machine Consumable and Human Consumable Event
   Notifications, respectively.

   The tables in the sub-sections of this section contain the following
   columns:

   a) Source Value: the name of the attribute that supplies the value
      for the Event Notification.  Asterisks in this field refer to a
      note below the table.

   b) Delivers: if the Printer supports the value (column 1) on the
      Source Object (column 3) the Delivery Method MUST specify:

         MUST: that the Printer MUST deliver the value.





Herriot & Hastings          Standards Track                    [Page 43]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


         SHOULD: either that the Printer MUST deliver the value or that
         the value is incompatible with the Delivery Method.

         MAY: that the Printer MUST, SHOULD, MAY, MUST NOT, SHOULD NOT,
         or NEED NOT deliver the value.  The Delivery Method specifies
         the level of conformance for the Printer.

   c) Source Object: the object from which the source value comes.  If
      the object is "Event Notification", the Printer fabricates the
      value when it delivers the Event Notification.  See section 8.

9.1.  Content of Machine Consumable Event Notifications

   This section defines the attributes that a Delivery Method MUST
   mention in a Delivery Method Document when specifying the Machine
   Consumable Event Notification's contents.

   This document does not define the order of attributes in Event
   Notifications.  However, Delivery Method Documents MAY define the
   order of some or all of the attributes.

   A Delivery Method Document MUST specify additional attributes (if
   any) that a Printer implementation delivers in a Machine Consumable
   Event Notification.

   Notification Recipients MUST be able to accept Event Notifications
   containing attributes they do not recognize.  What a Notification
   Recipient does with an unrecognized attribute is implementation-
   dependent.  Notification Recipients MAY attempt to display
   unrecognized attributes anyway or MAY ignore them.

   The next three sections define the attributes in Event Notification
   Contents that are:

      1. for all Events

      2. for Job Events only

      3. for Printer Events only

9.1.1.  Event Notification Content Common to All Events

   This section lists the attributes that a Delivery Method Document
   MUST specify for all Events.

   Table 5 lists potential values in each Event Notification.





Herriot & Hastings          Standards Track                    [Page 44]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 5 - Attributes in Event Notification Content

   Source Value                               Delivers   Source Object

   notify-subscription-id (integer(1:MAX))    MUST       Subscription
   notify-printer-uri (uri)                   MUST       Subscription
   notify-subscribed-event (type2 keyword)    MUST       Event
                                                         Notification
   printer-up-time (integer(MIN:MAX))         MUST       Printer
   printer-current-time (dateTime) *          MUST       Printer
   notify-sequence-number (integer (0:MAX))   SHOULD     Subscription
   notify-charset (charset)                   SHOULD     Subscription
   notify-natural-language (naturalLanguage)  SHOULD     Subscription
   notify-user-data (octetString(63)) **      SHOULD     Subscription
   notify-text (text)                         SHOULD     Event
                                                         Notification
   attributes from the "notify-attributes"    MAY        Printer
   attribute ***
   attributes from the "notify-attributes"    MAY        Job
   attribute ***
   attributes from the "notify-attributes"    MAY        Subscription
   attribute ***

   *A Printer MUST deliver this value only if and only if it supports
   the Printer's "printer-current-time" attribute.

   ** If the Subscription Object does not contain a "notify-user-data"
   attribute and the Delivery Method Document REQUIRES the Printer to
   deliver the "notify-user-data" source value in the Event
   Notification, the Printer MUST deliver an octet-string of length 0.

   *** The last three rows represent additional attributes that a client
   MAY request via the  "notify-attributes" attribute.  A Printer MAY
   support the "notify-attributes" attribute.  The Delivery Method MUST
   say that the Printer MUST, SHOULD, MAY, MUST NOT, SHOULD NOT, or NEED
   NOT support the "notify-attributes" attribute and specific values of
   this attribute.  The Delivery Method MAY say that support for the
   "notify-attributes" is conditioned on support of the attribute by the
   Printer or it MAY say that Printer MUST support the "notify-
   attributes" attribute if the Printer supports the Delivery Method.

9.1.2.  Additional Event Notification Content for Job Events

   This section lists the additional attributes that a Delivery Method
   Document MUST specify for Job Events.  See Table 6.






Herriot & Hastings          Standards Track                    [Page 45]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 6 - Additional Event Notification Content for Job Events

   Source Value                                  Delivers  Source
                                                            Object

   job-id (integer(1:MAX))                       MUST      Job
   job-state (type1 enum)                        MUST      Job
   job-state-reasons (1setOf type2 keyword)      MUST      Job
   job-impressions-completed (integer(0:MAX)) *  MUST      Job

   *  The Printer MUST deliver the "job-impressions-completed" attribute
   in an Event Notification only for the combinations of Events and
   Subscribed Events shown in Table 7.

   Table 7 - Combinations of Events and Subscribed Events for "job-
   impressions-completed"

   Job Event              Subscribed Job Event

   'job-progress'         'job-progress'
   'job-completed'        'job-completed'
   'job-completed'        'job-state-changed'

9.1.3.  Additional Event Notification Content for Printer Events

   This section lists the additional attributes that a Delivery Method
   Document MUST specify for Printer Events.  See Table 8.

   Table 8 - Additional Event Notification Content for Printer Events

   Source Value                             Delivers   Source Object

   printer-state (type1 enum)               MUST       Printer
   printer-state-reasons (1setOf type2      MUST       Printer
   keyword)
   printer-is-accepting-jobs (boolean)      MUST       Printer

9.2.  Content of Human Consumable Event Notification

   This section defines the information that a Delivery Method MUST
   mention in a Delivery Method Document when specifying the Human
   Consumable Event Notifications contents or the value of the "notify-
   text" attribute.

   Such a Delivery Method MUST specify the following information and a
   Printer SHOULD deliver it:

   a) the Printer name (see Table 9)



Herriot & Hastings          Standards Track                    [Page 46]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   b) the time of the Event (see Table 11)

   c) for Printer Events only:

      i) the Event (see Table 10) and/or Printer state information (see
         Table 14)

   d) for Job Events only:

      i) the job identity (see Table 12)

      ii) the Event (see Table 10) and/or Job state information (see
          Table 13)

   The subsections of this section specify the attributes that a Printer
   MUST use to obtain this information.

   A Delivery Method Document MUST specify additional information (if
   any) that a Printer implementation delivers in a Human Consumable
   Event Notification or in the "notify-text" attribute.

   A client MUST NOT request additional attributes via the "notify-
   attributes" attribute because this attribute works only for Machine
   Consumable Event Notifications.

   Notification Recipients MUST NOT expect to be able to parse the Human
   Consumable Event Notification contents or the value of the "notify-
   text" attribute.

   The next three sections define the attributes in Event Notification
   Contents that are:

      a) for all Events
      b) for Job Events only
      c) for Printer Events only

9.2.1.  Event Notification Content Common to All Events

   This section lists the source of the information that a Delivery
   Method MUST specify for all Events.

   There is a separate table for each piece of information.  Each row in
   the table represents a source value for the information and the
   values are listed in order of preference, with the first one being
   the preferred one.  An implementation SHOULD use the source value
   from the earliest row in each table.  It MAY use the source value





Herriot & Hastings          Standards Track                    [Page 47]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   from another row instead, or it MAY combine the source values from
   several rows.  An implementation is free to determine the best way to
   present this information.

   In all tables of this section, all rows contain a "MAY" in order to
   state that the Delivery Method specifies the conformance.

   Table 9 lists the source of the information for the Printer Name.
   The "printer-name" is more user-friendly unless the Notification
   Recipient is in a place where the Printer name is not meaningful.
   For example, an implementation could have the intelligence to deliver
   the value of the "printer-name" attribute to a Notification Recipient
   that can access the Printer via value of the "printer-name" attribute
   and otherwise deliver the value of the "notify-printer-uri"
   attribute.

   Table 9 - Printer Name in Event Notification Content

   Source Value                            Delivers   Source Object

   printer-name (name(127))                MAY        Printer
   notify-printer-uri (uri)                MAY        Subscription


   Table 10 lists the source of the information for the Event name.  A
   Printer MAY combine this information with state information described
   for Jobs in Table 13 or for Printers in Table 14.

   Table 10 - Event Name in Event Notification Content

   Source Value                             Delivers    Source Object

   notify-subscribed-event (type2 keyword)  MAY         Subscription

   Table 11 lists the source of the information for the time that the
   Event occurred.  A Printer can deliver this value only if it supports
   the Printer's "printer-current-time" attribute.  If a Printer does
   not support the "printer-current-time" attribute, it MUST NOT deliver
   the "printer-up-time" value instead, since it is not an allowed
   option for human consumable information.

   Table 11 - Event Time in Event Notification Content

   Source Value                            Delivers   Source Object

   printer-current-time (dateTime)         MAY        Printer





Herriot & Hastings          Standards Track                    [Page 48]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


9.2.2.  Additional Event Notification Content for Job Events

   This section lists the source of the additional information that a
   Delivery Method MUST specify for Job Events.

   Table 12 lists the source of the information for the job name.  The
   "job-name" is likely more meaningful to a user than "job-id".

   Table 12 - Job Name in Event Notification Content

   Source Value                           Delivers    Source Object

   job-name (name(MAX))                   MAY         Job
   job-id (integer(1:MAX))                MAY         Job

   Table 13 lists the source of the information for the job state.  If a
   Printer supports the "job-state-message" and "job-detailed-state-
   message" attributes, it SHOULD use those attributes for the job state
   information, otherwise, it should fabricate such information from the
   "job-state" and "job-state-reasons".  For some Events, a Printer MAY
   combine this information with Event information.

   Table 13 - Job State in Event Notification Content

   Source Value                                     Delivers  Source
                                                               Object

   job-state-message (text(MAX))                    MAY       Job
   job-detailed-status-messages (1setOf text(MAX))  MAY       Job
   job-state (type1 enum)                           MAY       Job
   job-state-reasons (1setOf type2 keyword)         MAY       Job

9.2.3.  Additional Event Notification Content for Printer Events

   This section lists the source of the additional information that a
   Delivery Method MUST specify for Printer Events.

   Table 14 lists the source of the information for the printer state.
   If a Printer supports the "printer-state-message", it SHOULD use that
   attribute for the job state information, otherwise it SHOULD
   fabricate such information from the "printer-state" and "printer-
   state-reasons".  For some Events, a Printer MAY combine this
   information with Event information.








Herriot & Hastings          Standards Track                    [Page 49]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 14 - Printer State in Event Notification Content

   Source Value                                    Delivers   Source
                                                               Object

   printer-state-message (text(MAX))               MAY        Printer
   printer-state (type1 enum)                      MAY        Printer
   printer-state-reasons (1setOf type2 keyword)    MAY        Printer
   printer-is-accepting-jobs (boolean)             MAY        Printer

10.  Delivery Methods

   A Delivery Method is the mechanism, i.e., protocol, by which the
   Printer delivers an Event Notification to a Notification Recipient.
   There are several potential Delivery Methods for Event Notifications,
   standardized, as well as proprietary.  This specification REQUIRES
   that the 'ippget' Pull Delivery Method [RFC3996] be supported.
   Conforming implementations MAY support additional Push or Pull
   Delivery Methods as well.  This document does not define any of these
   delivery mechanisms.  Each Delivery Method MUST be defined in a
   Delivery Method Document that is separate from this document.  New
   Delivery Methods will be created as needed using an extension to the
   registration procedures defined in [RFC2911].  Such documents are
   registered with IANA (see section 23.7.3).

   The following sorts of Delivery Methods are possible:

   -  The Notification Recipient polls for Event Notifications at
      intervals directed by the Printer

   -  The Printer delivers Event Notifications to the Notification
      Recipient using http as the transport.

   -  The Printer delivers an email message.

   This section specifies how to define a Delivery Method Document and
   what to put in such a document.

   A Delivery Method Document MUST contain an exact copy of the
   following paragraph, caption and table.  In addition, column 2 of the
   table in the Delivery Method Document MUST contain answers to
   questions in column 1 for the Delivery Method.  Also, the Delivery
   Method document MUST contain a reference to this document and call
   that reference [RFC3995] because the table contains an [RFC3995]
   reference.

   If a Printer supports this Delivery Method, the following are its
   characteristics.



Herriot & Hastings          Standards Track                    [Page 50]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 15 - Information about the Delivery Method

   Document Method Conformance Requirement     Delivery Method
                                               Realization

   1.  What is the URL scheme name for the Push Delivery Method or the
       keyword method name for the Pull Delivery Method?

   2.  Is the Delivery Method REQUIRED, RECOMMENDED, or OPTIONAL for an
       IPP Printer to support?

   3.  What transport and delivery protocols does the Printer use to
       deliver the Event Notification Content, i.e., what is the entire
       network stack?

   4.  Can several Event Notifications be combined into a Compound Event
       Notification?

   5.  Is the Delivery Method initiated by the Notification Recipient
       (pull), or by the Printer (push)?

   6.  Is the Event Notification content Machine Consumable or Human
       Consumable?

   7.  What section in this document answers the following question?
       For a Machine Consumable Event Notification, what is the
       representation and encoding of values defined in section 9.1 of
       [RFC3995] and the conformance requirements thereof?  For a Human
       Consumable Event Notification, what is the representation and
       encoding of pieces of information defined in section 9.2 of
       [RFC3995] and the conformance requirements thereof?

   8.  What are the latency and reliability of the transport and
       delivery protocol?

   9.  What are the security aspects of the transport and delivery
       protocol, e.g., how it is handled in firewalls?

   10.  What are the content length restrictions?

   11.  What are the additional values or pieces of information that a
        Printer delivers in an Event Notification content and the
        conformance requirements thereof?

   12.  What are the additional Subscription Template and/or
        Subscription Description attributes and the conformance
        requirements thereof?




Herriot & Hastings          Standards Track                    [Page 51]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   13.  What are the additional Printer Description attributes and the
        conformance requirements thereof?

11.  Operations for Notification

   This section defines all of the operations for Notification.  Section
   7.1 assigns the "operation-id" for each operation.  The following two
   sub-sections define Subscription Creation Operations, and other
   operations.

11.1.  Subscription Creation Operations

   This section defines the Subscription Creation Operations.  The first
   section on Create-Job-Subscriptions gives most of the information.
   The other Subscription Creation Operations refer to the section on
   Create-Job-Subscriptions, even though the Create-Job-Subscriptions
   operation is the only OPTIONAL operation in this document (see
   section 12).

   A Printer MUST support Create-Printer-Subscriptions and the
   Subscription Template Attributes Group in Job Creation operations.
   It MAY support Create-Job-Subscriptions operations.

11.1.1.  Create-Job-Subscriptions Operation

   The operation creates one or more Per-Job Subscription Objects.  The
   client supplies one or more Subscription Template Attributes Groups
   each containing one or more of Subscription Template Attributes
   (defined in section 5.3).

   Except for errors, the Printer MUST create exactly one Per-Job
   Subscription Object from each Subscription Template Attributes Group
   in the request, even if the newly created Subscription Object would
   have identical behavior to some existing Subscription Object.  The
   Printer MUST associate each newly created Per-Job Subscription Object
   with the target Job, which is specified by the "notify-job-id"
   operation attribute.

   The Printer MUST accept the request in any of the target job's 'not-
   completed' states, i.e., 'pending', 'pending-held', 'processing', or
   'processing-stopped'.  The Printer MUST NOT change the job's "job-
   state" attribute because of this operation.  If the target job is in
   any of the 'completed' states, i.e., 'completed', 'canceled', or
   'aborted, then the Printer MUST reject the request and return the
   'client-error-not-possible' status code; the response MUST NOT
   contain any Subscription Attribute Groups.





Herriot & Hastings          Standards Track                    [Page 52]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Access Rights:  To create Per-Job Subscription Objects, the
   authenticated user (see [RFC2911] section 8.3) performing this
   operation MUST (1) be the job owner, (2) have Operator or
   Administrator access rights for this Printer (see [RFC2911] sections
   1 and 8.5), or (3) be otherwise authorized by the Printer's
   administrator-configured security policy to create Per-Job
   Subscription Objects for the target job.  Otherwise the Printer MUST
   reject the operation and return: the 'client-error-forbidden',
   'client-error-not-authenticated', or 'client-error-not-authorized'
   status code as appropriate.

11.1.1.1.  Create-Job-Subscriptions Request

   The following groups of attributes are part of the Create-Job-
   Subscriptions Request:

   Group 1: Operation Attributes

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.1.

   Target:
      The "printer-uri" attribute which defines the target for this
      operation as described in [RFC2911] section 3.1.5.

   Requesting User Name:
      The "requesting-user-name" attribute SHOULD be supplied by the
      client as described in [RFC2911] section 8.3.

11.1.1.1.1.  notify-job-id (integer(1:MAX))

   The client MUST supply this attribute and it MUST specify the Job
   object to associate the Per-Job Subscription with.  The value of
   "notify-job-id" MUST be the value of the "job-id" of the associated
   Job object.  If the client does not supply this attribute, the
   Printer MUST reject this request with a 'client-error-bad-request'
   status code.

   Group 2-N: Subscription Template Attributes

      For each occurrence of this group:

         The client MUST supply one or more Subscription Template
         Attributes in any order.  See section 5.3 for a description of
         each such attribute.  See section 5.2 for details on processing
         these attributes.




Herriot & Hastings          Standards Track                    [Page 53]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.1.1.2.  Create-Job-Subscriptions Response

   The Printer MUST return to the client the following sets of
   attributes as part of a Create-Job-Subscriptions response:

   Group 1: Operation Attributes

   Status Message:
      In addition to the REQUIRED status code returned in every
      response, the response OPTIONALLY includes a "status-message"
      (text(255)) and/or a "detailed-status-message" (text(MAX))
      operation attribute as described in [RFC2911] sections 13 and
      3.1.6.

      In this group, the Printer can return any status codes defined in
      [RFC2911] and section 12.  The following is a description of the
      important status codes:

      successful-ok: the Printer created all Subscription Objects
         requested (see [RFC2911]).

      successful-ok-ignored-subscriptions: the Printer created some
         Subscription Objects requested but some failed.  The
         Subscription Attributes Groups with a "notify-status-code"
         attribute are the ones that failed (see section 12.1).

      client-error-ignored-all-subscriptions: the Printer created no
         Subscription Objects requested and all failed.  The
         Subscription Attributes Groups with a "notify-status-code"
         attribute are the ones that failed (see section 12.2).

      client-error-not-possible: For this operation and other Per-Job
         Subscription operations, this error can occur because the
         specified Job has already completed (see [RFC2911], whether or
         not the Job is retained in the Job Retention and/or Job History
         phases (see [RFC2911] section 4.3.7.1).

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.2.

   Group 2: Unsupported Attributes

      See [RFC2911] section 3.1.7 for details on returning Unsupported
      Attributes.  This group does not contain any unsupported
      Subscription Template Attributes; they are returned in the
      Subscription Attributes Group (see below).




Herriot & Hastings          Standards Track                    [Page 54]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Group 3-N: Subscription Attributes

      These groups MUST be returned unless the Printer is unable to
      interpret the entire request, e.g., the "status-code" parameter
      returned in Group 1 has the value: 'client-error-bad-request'.

      "notify-status-code" (type2 enum):
         Indicates the status of this subscription (see section 13 for
         the status code definitions).  Section 5.2 defines when this
         attribute MUST be present in this group.

      See section 5.2 for details on the contents of each occurrence of
      this group.

11.1.2.  Create-Printer-Subscriptions operation

   The operation is identical to Create-Job-Subscriptions with
   exceptions noted in this section.

   The operation creates Per-Printer Subscription Objects instead of
   Per-Job Subscription Objects, and associates each newly created Per-
   Printer Subscription Object with the Printer specified by the
   operation target rather than with a specific Job.

   The Printer MUST accept the request in any of its states, i.e.,
   'idle', 'processing', or 'stopped'.  The Printer MUST NOT change its
   "printer-state" attribute because of this operation.

   Access Rights:  To create Per-Printer Subscription Objects, the
   authenticated user (see [RFC2911] section 8.3) performing this
   operation MUST have (1) Operator or Administrator access rights for
   this Printer (see [RFC2911] sections 1 and 8.5), or (2) be otherwise
   authorized by the Printer's administrator-configured security policy
   to create Per-Printer Subscription Objects for this Printer.
   Otherwise, the Printer MUST reject the operation and return: the
   'client-error-forbidden', 'client-error-not-authenticated', or
   'client-error-not-authorized' status code as appropriate.

11.1.2.1.  Create-Printer-Subscriptions Request

   The groups are identical to the Create-Job-Subscriptions (see section
   11.1.1.1) except that the Operation Attributes group MUST NOT contain
   the  "notify-job-id" attribute.  If the client does supply the
   "notify-job-id" attribute, then the Printer MUST treat it as any
   other unsupported Operation attribute and MUST return it in the
   Unsupported Attributes group.





Herriot & Hastings          Standards Track                    [Page 55]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.1.2.2.  Create-Printer-Subscriptions Response

   The groups are identical to the Create-Job-Subscriptions (see section
   11.1.1.2).

11.1.3.  Job Creation Operations - Extensions for Notification

   This document extends the Job Creation operations (see section 3.2)
   to create Subscription Objects as a part of the operation.

   The Job Creation operations are identical to Create-Job-Subscriptions
   operation with exceptions noted in this section.

   Unlike the Create-Job-Subscriptions operation, a Job Creation
   operation associates the newly created Subscription Objects with the
   Job object created by this operation.  The operation succeeds if and
   only if the Job creation succeeds.  If the Printer does not create
   some or all of the requested Subscription Objects, the Printer MUST
   return a  'successful-ok-ignored-subscriptions' status-code instead
   of a 'successful-ok' status-code, but the Printer MUST NOT reject the
   operation because of a failure to create Subscription Objects.

   If the Job Creation operation includes a Job Template group, the
   client MUST supply it after the Operation Attributes group and before
   the first Subscription Template Attributes Group.

   If a Printer does not support this Notification specification, then
   it MUST treat the Subscription Attributes Group like an unknown group
   and ignore it (see [RFC2911] section 5.2.2).  Because the Printer
   ignores the Subscription Attributes Group, it doesn't return them in
   the response either, thus indicating to the client that the Printer
   doesn't support Notification.

   After completion of a successful Job Creation operation, the Printer
   generates a 'job-created' event (see section 5.3.3.4.3).

   Access Rights:  To create Per-Job Subscription Objects, the
   authenticated user (see [RFC2911] section 8.3) performing this
   operation MUST either have permission to create Jobs on the Printer
   or have Operator or Administrator access rights for this Printer (see
   [RFC2911] sections 1 and 8.5).  Otherwise the Printer MUST reject the
   operation and return: the 'client-error-forbidden', 'client-error-
   not-authenticated', or 'client-error-not-authorized' status code as
   appropriate.







Herriot & Hastings          Standards Track                    [Page 56]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.1.3.1.  Job Creation Request

   The groups for this operation are sufficiently different from the
   Create-Job-Subscriptions operation that they are all presented here.
   The following groups of attributes are supplied as part of a Job
   Creation Request:

   Group 1: Operation Attributes

      Same as defined in [RFC2911] for Print-Job, Print-URI, and
      Create-Job requests.

   Group 2: Job Template Attributes

      The client OPTIONALLY supplies a set of Job Template attributes as
      defined in [RFC2911] section 4.2.

   Group 3 to N: Subscription Template Attributes

      The same as Group 2-N in Create-Job-Subscriptions.  See section
      11.1.1.1.

   Group N+1: Document Content  (Print-Job only)

      The client MUST supply the document data to be processed.

11.1.3.2.  Job Creation Response

   The Printer MUST return to the client the following sets of
   attributes as part of a Print-Job, Print-URI, and Create-Job
   Response:

   Group 1: Operation Attributes

      Status Message:

         As defined in [RFC2911] for Print-Job, Print-URI, and Create-
         Job requests.

         In this group, the Printer can return any status codes defined
         in [RFC2911] and section 12.  The following is a description of
         the important status codes:

         successful-ok: the Printer created the Job and all
            Subscription Objects requested (see [RFC2911].

         successful-ok-ignored-subscriptions: the Printer created
            the Job and not all of the Subscription Objects requested



Herriot & Hastings          Standards Track                    [Page 57]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


            (see section 12.1).  This status-code hides 'successful-ok-
            xxx' status-codes that could reveal problems in Job
            creation.  The Printer MUST NOT return the 'client-error-
            ignored-all-subscriptions' status code for Job Creation
            operations because the Printer returns an error status-code
            only when it fails to create a Job.

         Natural Language and Character Set:
            The "attributes-charset" and "attributes-natural-language"
            attributes as described in [RFC2911] section 3.1.4.2.

   Group 2: Unsupported Attributes

      See [RFC2911] section 3.1.7 for details on returning Unsupported
      Attributes.  This group does not contain any unsupported
      Subscription Template Attributes; they are returned in the
      Subscription Attributes Group (see below).

   Group 3: Job Object Attributes

      The "job-id" of the Job Object just created, etc., as defined in
      [RFC2911] for Print-Job, Print-URI, and Create-Job requests.

   Group 4 to N: Subscription Attributes

      These groups MUST be returned if and only if the client supplied
      Subscription Template Attributes and the operation was accepted.

      See section 5.2 for details on the contents of each occurrence of
      this group.

11.2.  Other Operations

   This section defines other operations on Subscription objects.

11.2.1.  Restart-Job Operation - Extensions for Notification

   The Restart-Job operation [RFC2911] is neither a Job Creation
   operation nor a Subscription Creation operation (see section 3.2).

   For the Restart-Job operation, the client MUST NOT supply any Job
   Subscription Attributes Groups.  The Printer MUST treat any supplied
   Job Subscription Attributes as unsupported attributes.

   For this operation, the Printer does not return a job-id or any
   Subscription Attributes groups because the Printer reuses the
   existing Job object with the same job-id and the existing Per-Job
   Subscription Objects with the same subscription-ids.  However, after



Herriot & Hastings          Standards Track                    [Page 58]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   successful completion of this operation, the Printer generates a
   'job-created' event (see section 5.3.3.4.3).

11.2.2.  Validate-Job Operation - Extensions for Notification

   A client can test whether one or more Subscription Objects could be
   created using the Validate-Job operation.  The client supplies one or
   more Subscription Template Attributes Groups (defined in section
   5.3), just as in a Job Creation request.

   A Printer MUST support this extension to this operation.

   The Printer MUST accept requests that are identical to the Job
   Creation request defined in section 11.1.3.1, except that the request
   MUST NOT contain document data.

   The Printer MUST return the same groups and attributes as the Print-
   Job operation (section 11.1.3.1) with the following exceptions.  The
   Printer MUST NOT return a Job Object Attributes Group because no Job
   is created.  The Printer MUST NOT return the "notify-subscription-id"
   attribute in any Subscription Attribute Group because no Subscription
   Object is created.

   If the Printer would succeed in creating a Subscription Object, the
   corresponding Subscription Attributes Group either has no 'status-
   code' attribute or a 'status-code' attribute with a value of
   'successful-ok-too-many-events' or 'successful-ok-ignored-or-
   substituted-attributes' (see sections 5.2 and 13).  The status-codes
   have the same meaning as in Job Creation except the results state
   what "would happen".

   The Printer MUST validate Subscription Template Attributes Groups in
   the same manner as the Job Creation operations.

11.2.3.  Get-Printer-Attributes - Extensions for Notification

   This operation is extended so that it returns Printer attributes
   defined in this document.

   A Printer MUST support this extension to this operation.

   In addition to the requirements of [RFC2911] section 3.2.5, a Printer
   MUST support the following additional values for the "requested-
   attributes" Operation attribute in this operation and return such
   attributes in the Printer Object Attributes group of its response.

   1. Subscription Template Attributes: Each supported attribute in
      column 2 of Table 1.



Herriot & Hastings          Standards Track                    [Page 59]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   2. New Printer Description Attributes: Each supported attribute in
      section 6.

   3. New Group Name: The 'subscription-template' group name, which
      names all supported Subscription Template Attribute in column 2 of
      Table 1.  This group name is also used in the Get-Subscription-
      Attributes and Get-Subscriptions operation with an analogous
      meaning.

   4. Extended Group Name: The 'all' group name, which names all Printer
      attributes according to [RFC2911] section 3.2.5.  In this
      extension 'all' names all attributes specified in [RFC2911] plus
      those named in items 1 and 2 of this list.

11.2.4.  Get-Subscription-Attributes operation

   This operation allows a client to request the values of the
   attributes of a Subscription Object.

   A Printer MUST support this operation.

   This operation is almost identical to the Get-Job-Attributes
   operation (see [RFC2911] section 3.3.4).  The only differences are
   that the operation is directed at a Subscription Object rather than a
   Job object, and the returned attribute group contains Subscription
   Object attributes rather than Job object attributes.

   Access Rights:  The authenticated user (see [RFC2911] section 8.3)
   performing this operation MUST (1) be the Subscription Object owner,
   (2) have Operator or Administrator access rights for this Printer
   (see [RFC2911] sections 1 and 8.5), or (3) be otherwise authorized by
   the Printer's administrator-configured security policy to query the
   Subscription Object for the target job.  Otherwise the Printer MUST
   reject the operation and return: the 'client-error-forbidden',
   'client-error-not-authenticated', or 'client-error-not-authorized'
   status code as appropriate.  Furthermore, the Printer's security
   policy MAY limit which attributes are returned, in a manner similar
   to the Get-Job-Attributes operation (see [RFC2911] end of section
   3.3.4.2).

11.2.4.1.  Get-Subscription-Attributes Request

   The following groups of attributes are part of the Get-Subscription-
   Attributes request:

   Group 1: Operation Attributes

   Natural Language and Character Set:



Herriot & Hastings          Standards Track                    [Page 60]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      The "attributes-charset" and "attributes-natural-language"
      attributes as described in section [RFC2911] 3.1.4.1.

   Target:
      The "printer-uri" attribute which defines the target for this
      operation as described in [RFC2911] section 3.1.5.

   Requesting User Name:
      The "requesting-user-name" attribute SHOULD be supplied by the
      client as described in [RFC2911] section 8.3.

11.2.4.1.1.  "notify-subscription-id" (integer (1:MAX))

   The client MUST supply this attribute.  The Printer MUST support this
   attribute.  This attribute specifies the Subscription Object from
   which the client is requesting attributes.  If the client omits this
   attribute, the Printer MUST reject this request with the 'client-
   error-bad-request' status code.

11.2.4.1.2.  "requested-attributes" (1setOf keyword)

   The client OPTIONALLY supplies this attribute.  The Printer MUST
   support this attribute.  This attribute specifies the attributes of
   the specified Subscription Object that the Printer MUST return in the
   response.  Each value of this attribute is either an attribute name
   (defined in sections 5.3 and 5.4) or an attribute group name.  The
   attribute group names are:

   -  'subscription-template': all attributes that are both defined in
      section 5.3 and present on the specified Subscription Object
      (column 1 of Table 1).

   -  'subscription-description': all attributes that are both defined
      in section 5.4 and present on the specified Subscription Object
      (Table 2).

   -  'all': all attributes that are present on the specified
      Subscription Object.

   A Printer MUST support all these group names.

      If the client omits this attribute, the Printer MUST respond as if
      this attribute had been supplied with a value of 'all'.

11.2.4.2.  Get-Subscription-Attributes Response

   The Printer returns the following sets of attributes as part of the
   Get-Subscription-Attributes Response:



Herriot & Hastings          Standards Track                    [Page 61]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Group 1: Operation Attributes

   Status Message:
      Same as [RFC2911].

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.2.  The
      "attributes-natural-language" MAY be the natural language of the
      Subscription Object, rather than the one requested.

   Group 2: Unsupported Attributes

      See [RFC2911] section 3.1.7 and section 3.2.5.2 for details on
      returning Unsupported Attributes.

      The response NEED NOT contain the "requested-attributes" operation
      attribute with any supplied keyword values that were requested by
      the client but are not supported by the IPP object.  If the
      Printer object does return unsupported attributes referenced in
      the "requested-attributes" operation attribute, the values of the
      "requested-attributes" attribute returned MUST include only the
      unsupported keywords that were requested by the client.  If the
      client had requested a group name, such as 'all', the resulting
      unsupported attributes returned MUST NOT include attribute keyword
      names described in the standard but not supported by the
      implementation.

   Group 3: Subscription Attributes

      This group contains a set of attributes with their current values.
      Each attribute returned in this group:

   a) MUST be specified by the "requested-attributes" attribute in the
      request, AND

   b) MUST be present on the specified Subscription Object AND

   c) MUST  NOT be restricted by the security policy in force.  For
      example, a Printer MAY prohibit a client who is not the creator of
      a Subscription Object from seeing some or all of its attributes.
      See [RFC2911] end of section 3.3.4.2 and section 8.

      The Printer can return the attributes of the Subscription Object
      in any order.  The client MUST accept the attributes in any order.






Herriot & Hastings          Standards Track                    [Page 62]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.2.5.  Get-Subscriptions operation

   This operation allows a client to retrieve the values of attributes
   of all Subscription Objects belonging to a Job or Printer.

   A Printer MUST supported this operation.

   This operation is similar to the Get-Subscription-Attributes
   operation, except that this Get-Subscriptions operation returns
   attributes from possibly more than one object.

   This operation is similar to the Get-Jobs operation (see [RFC2911]
   section 3.2.6), except that the operation returns Subscription
   Objects rather than Job objects.

   Access Rights:  To query Per-Job Subscription Objects of the
   specified job (client supplied the "notify-job-id" operation
   attribute - see section 11.2.5.1.1), the authenticated user (see
   [RFC2911] section 8.3) performing this operation MUST (1) be the
   Subscription Object owner, (2) have Operator or Administrator access
   rights for this Printer (see [RFC2911] sections 1 and 8.5), or (3) be
   otherwise authorized by the Printer's administrator-configured
   security policy to query the Subscription Object for the target job.
   To query Per-Printer Subscription Objects of the Printer (client
   omits the "notify-job-id" operation attribute - see section
   11.2.5.1.1), the authenticated user (see [RFC2911] section 8.3)
   performing this operation MUST (1) have Operator or Administrator
   access rights for this Printer (see [RFC2911] sections 1 and 8.5), or
   (2) be otherwise authorized by the Printer's administrator-configured
   security policy to query Per-Printer Subscription Objects for the
   target Printer.  Otherwise the Printer MUST reject the operation and
   return: the 'client-error-forbidden', 'client-error-not-
   authenticated', or 'client-error-not-authorized' status code as
   appropriate.  Furthermore, the Printer's security policy MAY limit
   which attributes are returned, in a manner similar to the Get-Jobs
   and Get-Printer-Attributes operations (see [RFC2911] end of sections
   3.2.6.2 and 3.2.5.2).

11.2.5.1.  Get-Subscriptions Request

   The following groups of attributes are part of the Get-Subscriptions
   request:

   Group 1: Operation Attributes

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.1.



Herriot & Hastings          Standards Track                    [Page 63]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Target:
      The "printer-uri" attribute which defines the target for this
      operation as described in [RFC2911] section 3.1.5.

   Requesting User Name:
      The "requesting-user-name" attribute SHOULD be supplied by the
      client as described in [RFC2911] section 8.3.

11.2.5.1.1.  "notify-job-id" (integer(1:MAX))

   If the client specifies this attribute, the Printer returns the
   specified attributes of all Per-Job Subscription Objects associated
   with the Job whose "job-id" attribute value equals the value of this
   attribute.  If the client does not specify this attribute, the
   Printer returns the specified attributes of all Per-Printer
   Subscription Objects.  Note: there is no way to get all Per-Job

   Subscriptions known to the Printer in a single operation.  A Get-Jobs
   operation followed by a Get-Subscriptions operation for each Job will
   return all Per-Job Subscriptions.

11.2.5.1.2.  "limit" (integer(1:MAX))

   The client OPTIONALLY supplies this attribute.  The Printer MUST
   support this attribute.  It is an integer value that determines the
   maximum number of Subscription Objects that a client will receive
   from the Printer even if the "my-subscriptions" attribute constrains
   which Subscription Objects are returned.  The limit is a "stateless
   limit" in that if the value supplied by the client is 'N', then only
   the first 'N' Subscription Objects are returned in the Get-
   Subscriptions Response.  There is no mechanism to allow for the next
   'M' Subscription Objects after the first 'N' Subscription Objects.
   If the client does not supply this attribute, the Printer responds
   with all applicable Subscription Objects.

11.2.5.1.3.  "requested-attributes" (1setOf type2 keyword)

   The client OPTIONALLY supplies this attribute.  The Printer MUST
   support this attribute.  This attribute specifies the attributes of
   the specified Subscription Objects that the Printer MUST return in
   the response.  Each value of this attribute is either an attribute
   name (defined in sections 5.3 and 5.4) or an attribute group name
   (defined in section 11.2.4.1).  If the client omits this attribute,
   the Printer MUST respond as if the client had supplied this attribute
   with the one value: 'notify-subscription-id'.






Herriot & Hastings          Standards Track                    [Page 64]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.2.5.1.4.  "my-subscriptions" (boolean)

   The client OPTIONALLY supplies this attribute.  The Printer MUST
   support this attribute.  If the value is 'false', the Printer MUST
   consider the Subscription Objects from all users as candidates.  If
   the value is 'true', the Printer MUST return the Subscription Objects
   created by the requesting user of this request.  If the client does
   not supply this attribute, the Printer MUST respond as if the client
   had supplied the attribute with a value of 'false'.  The means for
   authenticating the requesting user and matching the Subscription
   Objects is similar to that for Jobs which is described in [RFC2911]
   section 8.

11.2.5.2 Get-Subscriptions Response

   The Printer returns the following sets of attributes as part of the
   Get-Subscriptions Response:

   Group 1: Operation Attributes

   Status Message:
      Same as [RFC2911].

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.2.

   Group 2: Unsupported Attributes

      Same as for Get-Subscription-Attributes.

   Groups 3 to N: Subscription Attributes

      The Printer responds with one Subscription Attributes Group for
      each requested Subscription Object (see the "notify-job-id"
      attribute in the Operation Attributes Group of this operation).

      The Printer returns Subscription Objects in any order.

      If the "limit" attribute is present in the Operation Attributes
      group of the request, the number of Subscription Attributes Groups
      in the response MUST NOT exceed the value of the "limit"
      attribute.

      It there are no Subscription Objects associated with the specified
      Job or Printer, the Printer MUST return zero Subscription
      Attributes Groups and it MUST NOT treat this case as an error,




Herriot & Hastings          Standards Track                    [Page 65]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      i.e., the status-code MUST be 'successful-ok' unless something
      else causes the status code to have some other value.

      See the Group 3 response (Subscription Attributes Group) of the
      Get-Subscription-Attributes operation (section 11.2.4.2) for the
      attributes that a Printer returns in this group.

11.2.6.  Renew-Subscription operation

   This operation allows a client to request the Printer to extend the
   lease on a Per-Printer Subscription Object.

   The Printer MUST support this operation.

   The Printer MUST accept this request for a Per-Printer Subscription
   Object in any of the target Printer's states, i.e., 'idle',
   'processing', or 'stopped', but MUST NOT change the Printer's
   "printer-state" attribute.

   The Printer MUST reject this request for a Per-Job Subscription
   Object because it has no lease (see section 5.4.3).  The status code
   returned MUST be 'client-error-not-possible'.

   Access Rights: The authenticated user (see [RFC2911] section 8.3)
   performing this operation MUST (1) be the owner of the Per-Printer
   Subscription Object, (2) have Operator or Administrator access rights
   for the Printer (see [RFC2911] sections 1 and 8.5), or (3) be
   otherwise authorized by the Printer's administrator-configured
   security policy to renew Per-Printer Subscription Objects for the
   target Printer.  Otherwise, the Printer MUST reject the operation and
   return: the 'client-error-forbidden', 'client-error-not-
   authenticated', or 'client-error-not-authorized' status code as
   appropriate.

11.2.6.1.  Renew-Subscription Request

   The following groups of attributes are part of the Renew-Subscription
   Request:

   Group 1: Operation Attributes

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.1.

   Target:
      The "printer-uri" attribute which defines the target for this
      operation as described in [RFC2911] section 3.1.5.



Herriot & Hastings          Standards Track                    [Page 66]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Requesting User Name:
      The "requesting-user-name" (name(MAX)) attribute SHOULD be
      supplied by the client as described in [RFC2911] section 8.3.

11.2.6.1.1.  "notify-subscription-id" (integer (1:MAX))

   The client MUST supply this attribute.  The Printer MUST support this
   attribute.  This attribute specifies the Per-Printer Subscription
   Object whose lease the Printer MUST renew.  If the client omits this
   attribute, the Printer MUST reject this request with the 'client-
   error-bad-request' status code.

   Group 2: Subscription Template Attributes

11.2.6.1.2.  "notify-lease-duration" (integer(0:MAX))

   The client MAY supply this attribute.  It indicates the number of
   seconds to renew the lease for the specified Subscription Object.  A
   value of 0 requests an infinite lease (which MAY require Operator
   access rights).  If the client omits this attribute, the Printer MUST
   use the value of the Printer's "notify-lease-duration-default"
   attribute.  See section 5.3.8 for more details.

11.2.6.2.  Renew-Subscription Response

   The Printer returns the following sets of attributes as part of the
   Renew-Subscription Response:

   Group 1: Operation Attributes

   Status Message:
      Same as [RFC2911].

      The following are some of the status codes returned (see
      [RFC2911]:

         successful-ok: The operation successfully renewed the lease
            on the Subscription Object for the requested duration.

         successful-ok-ignored-or-substituted-attributes: The
            operation successfully renewed the lease on the Subscription
            Object for some duration other than the amount requested.

         client-error-not-possible: The operation failed because the
            "notify-subscription-id" Operation attribute identified a
            Per-Job Subscription Object.





Herriot & Hastings          Standards Track                    [Page 67]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


         client-error-not-found: The operation failed because the
            "notify-subscription-id" Operation attribute identified a
            non-existent Subscription Object.

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.2.  The
      "attributes-natural-language" MAY be the natural language of the
      Subscription Object, rather than the one requested.

   Group 2: Unsupported Attributes

      See [RFC2911] section 3.1.7 for details on returning Unsupported
      Attributes.

   Group 3: Subscription Attributes

      The Printer MUST return the following Subscription Attribute:

11.2.6.2.1.  "notify-lease-duration" (integer(0:MAX))

   The value of this attribute MUST be the number of seconds that the
   Printer has granted for the lease of the Subscription Object (see
   section 5.3.8 for details, such as the value of this attribute when
   the Printer doesn't support the requested value).

11.2.7.  Cancel-Subscription operation

   This operation allows a client to delete a Subscription Object and
   stop the Printer from delivering more Event Notifications.  Once
   performed, there is no way to reference the Subscription Object.

   A Printer MUST supported this operation.

   The Printer MUST accept this request in any of the target Printer's
   states, i.e., 'idle', 'processing', or 'stopped', but MUST NOT change
   the Printer's "printer-state" attribute.

   If the specified Subscription Object is a Per-Job Subscription
   Object, the Printer MUST accept this request in any of the target
   Job's states, but MUST NOT change the Job's "job-state" attribute or
   affect the Job.

   Note:  There is no way to change any attributes on a Subscription
   Object, except the "notify-lease-duration" attribute (using the
   Renew-Subscription operation).  In order to change other attributes,
   a client performs a Subscription Creation Operation and Cancel-
   Subscription operation on the old Subscription Object.  If the client



Herriot & Hastings          Standards Track                    [Page 68]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   wants to avoid missing Event Notifications, it performs the
   Subscription Creation Operation first.  If this order would create
   too many Subscription Objects on the Printer, the client reverses the
   order.

   Access Rights: The authenticated user (see [RFC2911] section 8.3)
   performing this operation MUST (1) be the owner of the Subscription
   Object, (2) have Operator or Administrator access rights for the
   Printer (see [RFC2911] sections 1 and 8.5), or (3) be otherwise
   authorized by the Printer's administrator-configured security policy
   to cancel the target Subscription Object.  Otherwise, the Printer
   MUST reject the operation and return: the 'client-error-forbidden',
   'client-error-not-authenticated', or 'client-error-not-authorized'
   status code as appropriate.

11.2.7.1.  Cancel-Subscription Request

   The following groups of attributes are part of the Cancel-
   Subscription Request:

   Group 1: Operation Attributes

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.1.

   Target:
      The "printer-uri" attribute which defines the target for this
      operation as described in [RFC2911] section 3.1.5.

   Requesting User Name:
      The "requesting-user-name" attribute SHOULD be supplied by the
      client as described in [RFC2911] section 8.3.

11.2.7.1.1.  "notify-subscription-id" (integer (1:MAX))

   The client MUST supply this attribute.  The Printer MUST support this
   attribute.  This attribute specifies the Subscription Object that the
   Printer MUST cancel.  If the client omits this attribute, the Printer
   MUST reject this request with the 'client-error-bad-request' status
   code.










Herriot & Hastings          Standards Track                    [Page 69]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


11.2.7.2.  Cancel-Subscription Response

   The Printer returns the following sets of attributes as part of the
   Cancel-Subscription Response:

   Group 1: Operation Attributes

   Status Message:
      Same as [RFC2911].

         The following are some of the status codes returned (see
         [RFC2911]:

         successful-ok: The operation successfully canceled
            (deleted) the Subscription Object.

         client-error-not-found: The operation failed because the
            "notify-subscription-id" Operation attribute identified a
            non-existent Subscription Object.

   Natural Language and Character Set:
      The "attributes-charset" and "attributes-natural-language"
      attributes as described in [RFC2911] section 3.1.4.2.  The
      "attributes-natural-language" MAY be the natural language of the
      Subscription Object, rather than the one requested.

   Group 2: Unsupported Attributes

      See [RFC2911] section 3.1.7 for details on returning Unsupported
      Attributes.

12.  Status Codes

   The following status codes are defined as extensions for Notification
   and are returned as the value of the "status-code" parameter in the
   Operation Attributes Group of a response (see [RFC2911] section
   3.1.6.1).  Operations in this document can also return the status
   codes defined in section 13 of [RFC2911].  The 'successful-ok' status
   code is an example of such a status code.

12.1.  successful-ok-ignored-subscriptions (0x0003)

   The Subscription Creation Operation was unable to create all
   requested Subscription Objects.

   For a Create-Job-Subscriptions or Create-Printer-Subscriptions
   operation, this status code means that the Printer created one or




Herriot & Hastings          Standards Track                    [Page 70]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   more Subscription Objects, but not all requested Subscription
   Objects.

   For a Job Creation operation, this status code means that the Printer
   created the Job along with zero or more Subscription Objects.  The
   Printer returns this status code even if other job attributes are
   unsupported or in conflict.  That is, if an IPP Printer finds a
   warning that would allow it to return 'successful-ok-ignored-
   subscriptions' and either 'successful-ok-ignored-or-substituted-
   attributes' and/or 'successful-ok-conflicting-attributes', it MUST
   return 'successful-ok-ignored-subscriptions'.

12.2.  client-error-ignored-all-subscriptions (0x0414)

   This status code is the same as 'successful-ok-ignored-subscriptions'
   except that only the Create-Job-Subscriptions and Create-Printer-
   Subscriptions operation return it.  They return this status code only
   when the Printer creates zero Subscription Objects.

13.  Status Codes in Subscription Attributes Groups

   This section contains values of the "notify-status-code" (type2 enum)
   attribute that the Printer returns in a Subscription Attributes Group
   in a response when the corresponding Subscription Object:

   1. is not created or

   2. is created and some of the client-supplied attributes are not
      supported.

   The following sections are ordered in decreasing order of importance
   of the status-codes.

13.1.  client-error-uri-scheme-not-supported (0x040C)

   This status code is defined in [RFC2911].  This document extends its
   meaning and allows it to be in a Subscription Attributes Group of a
   response.

   The scheme of the client-supplied URI in a "notify-recipient-uri"
   Subscription Template Attribute in a Subscription Creation Operation
   is not supported.  See section 5.3.1.

13.2.  client-error-attributes-or-values-not-supported (0x040B)

   This status code is defined in [RFC2911].  This document extends its
   meaning and allows it to be in a Subscription Attributes Group of a
   response.



Herriot & Hastings          Standards Track                    [Page 71]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   The method of the client-supplied keyword in a "notify-pull-method"
   Subscription Template Attribute in a Subscription Creation Operation
   is not supported.  See section 5.3.2.

13.3.  client-error-too-many-subscriptions (0x0415)

   The number of Subscription Objects supported by the Printer would be
   exceeded if this Subscription Object were created (see section 5.2).

13.4.  successful-ok-too-many-events (0x0005)

   The client supplied more Events in the "notify-events" operation
   attribute of a Subscription Creation Operation than the Printer
   supports, as indicated in its "notify-max-events-supported" Printer
   attribute (see section 5.3.3).

13.5.  successful-ok-ignored-or-substituted-attributes (0x0001)

   This status code is defined in [RFC2911].  This document extends its
   meaning to include unsupported Subscription Template Attributes and
   it can appear in a Subscription Attributes Group.

14.  Encodings of Additional Attribute Tags

   This section assigns values to two attributes tags as extensions to
   the encoding defined in [RFC2910]).

   The "subscription-attributes-tag" delimits Subscription Template
   Attributes Groups in requests and Subscription Attributes Groups in
   responses.

   The "event-notification-attributes-tag" delimits Event Notifications
   in Delivery Methods that use an IPP-like encoding.

   The following table specifies the values for the delimiter tags:

      Tag Value (Hex)   Meaning

      0x06              "subscription-attributes-tag"
      0x07              "event-notification-attributes-tag"

15.  Conformance Requirements

   It is OPTIONAL for IPP clients and Printers to implement this Event
   Notification specification.






Herriot & Hastings          Standards Track                    [Page 72]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


15.1.  Conformance requirements for clients

   If this Event Notification specification is implemented by a client,
   the client MUST support the 'ippget' Pull Delivery Method and meet
   the conformance requirements as defined in [RFC3996] for clients.  A
   client MAY support additional Delivery Methods.

15.2.  Conformance requirements for Printers

   If this Event Notification specification is implemented by a Printer,
   the Printer MUST:

   -  meet the Conformance Requirements detailed in section 5 of
      [RFC2911].

   -  support the Subscription Template Attributes Group in requests and
      the Subscription Attributes Group in responses.

   -  support all of the following attributes:

      a. REQUIRED Subscription Object attributes in section 5.
      b. REQUIRED Printer Description object attributes in section 6.
      c. REQUIRED attributes in Event Notification content in section 8.

   -  support the 'ippget' Pull Delivery Method and meet the conformance
      requirements as defined in [RFC3996] for Printers.  The Printer
      MAY support additional Push and Pull Delivery Methods.

   -  deliver Event Notifications that conform to the requirements of
      section 9 and the requirements of the Delivery Method Document for
      each supported Delivery Method (the conformance requirements for
      Delivery Method Documents is specified in section 10).

   -  for all of the Job Creation Operations that the Printer supports,
      MUST support the REQUIRED extensions for notification defined in
      section 11.1.3.

   -  meet the conformance requirements for operations as described in
      Table 16 and meet the requirements for Printers as specified in
      the indicated sub-sections of section 11:











Herriot & Hastings          Standards Track                    [Page 73]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Table 16 - Printer Conformance Requirements for Operations

   Operation                                         Printer
                                                     Conformance
                                                     Requirements

   Create-Printer-Subscriptions (section 11.1.2)     REQUIRED
   Create-Job-Subscriptions (section 11.1.1)         OPTIONAL
   Get-Subscription-Attributes (section 11.2.3)      REQUIRED
   Get-Subscriptions (section 11.2.5)                REQUIRED
   Renew-Subscription (section 11.2.6)               REQUIRED
   Cancel-Subscription (section 11.2.7)              REQUIRED

16.  Model for Notification with Cascading Printers (Informative)

   With this model (see Figure 2 below), there is an intervening Print
   server between the human user and the output-device.  So the system
   effectively has two Printer objects.  There are two cases to
   consider.

   1. When the Printer 1 (in the server) generates Events, the system
      behaves like the client and Printer in Figure 1.  In this case,
      Printer 1 delivers Event Notifications that are shown as Event
      Notifications (A) of  Figure 2.

   2. When the Printer 2 (in the output-device) generates Events, there
      are two possible system configurations:

      a) Printer 1 forwards the client-supplied Subscription Creation
         Operations to the downstream Printer 2 and lets Printer 2
         deliver the Event Notifications directly to the Notification
         Recipients supplied by the Client (Event Notifications(C) in
         the diagram).

      b) Printer 1 performs the client-supplied Subscription Creation
         Operations and also forwards the Subscription Creation
         Operations to Printer 2 with the Notification Recipient changed
         to be the Printer 1.  When an Event occurs in Printer 2,
         Printer 2 delivers the Event Notification (B) to Notification
         Recipient of Printer 1, which relays the received Event
         Notification (B) to the client-supplied Notification Recipient
         (as Event Notifications(A) in the diagram).  Note, when a
         client performs a Subscription Creation Operation, Printer 1
         need not forward the Subscription Creation Operation to Printer
         2 if it would create a duplicate Subscription Object on Printer
         2.





Herriot & Hastings          Standards Track                    [Page 74]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Note: when Printer 1 is forwarding Subscription Creation Operations
   to Printer 2, it may request Printer 2 to create additional
   Subscription Objects (called "piggy-backing").  Piggy-backing is
   useful when:

   -  Device A is configured to accept (IPP or non-IPP) requests from
      other servers.

   -  Server S wants to receive Job Events that the client didn't
      request and Server S wants these Events for jobs it submits and
      not for other jobs.

                              server S                       device A
                           +------------+                 +------------+
                           |            |                 |            |
   +--------+ Subscription | ###########|                 | ###########|
   | client |--Creation ----># Printer #|  Subscription   | # Printer #|
   +--------+  Operation   | # Object 1#|---Creation------|># Object 2#|
                           | ###|#######|   Operation     | ####|#|####|
                           +----|---^---+                 +-----|-|----+
   +--------+     Event         |   |                           | |
   |Notific-|<-Notifications(A)-+   +-- Event Notifications(B)--+ |
   |ation Re|<-------------Event Notifications(C)-----------------+
   |cipient |
   +--------+

         Figure 2 - Model for Notification with Cascading Printers

17.  Distributed Model for Notification (Informative)

   A Printer implementation could use some other remote notification
   server to provide some or most of the service.  For example, the
   remote notification server could deliver Event Notifications using
   Delivery Methods that are not directly supported by the output device
   or Printer object.  Or, the remote notification server could store
   Subscription Objects (passed to it from the output device in response
   to Subscription Creation requests), accept Events, format the Event
   Notification in the natural language of the Notification Recipient,
   and deliver the Event Notifications to the Notification Recipient(s).

   Figure 3 shows this partitioning.  The interface between the output
   device (or Printer object) and the remote notification server is
   outside the scope of this document and is intended to be transparent
   to the client and this document.







Herriot & Hastings          Standards Track                    [Page 75]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


                                            ***********************
                                            *
                                            * Printer in combination
                                            * with the distributed
                                            * Notification Server)
                                            *
                                            * output device or server
                                            * +---------------+
      PDA, desktop, or server               * +  ###########  +
           +--------+                       * |  #         #  |
           | client |---IPP Subscription--------># Printer #  |
           +--------+   Creation operation  * |  # Object  #  |
                                            * |  #####|#####  |
                                            * +-------|-------+
                                            *         | Subscriptions
                                            *         | OR Event
        +------------+                      *         | Notifications
        |Notification|   IPP-defined        *  +------v--------+
        |Recipient   |<--Event Notifications---| Notification  |
        +------------+                      *  | Server        |
                                            *  +---------------+
                                            *
                                            *************************
   *** = Implementation configuration opaque boundary

     Figure 3 - Opaque Use of a Notification Server Transparent to the
                                  Client

18.  Extended Notification Recipient (Informative)

   The model allows for an extended Notification Recipient that is
   itself a notification server that forwards each Event Notification to
   another recipient (called the Ultimate Notification Recipient in this
   section).  The Delivery Method to the Ultimate Recipient is probably
   different from the Delivery Method used by the Printer to the
   extended Notification Recipient.

   This extended Notification Recipient is transparent to the Printer
   but not to the client.

   When a client performs a Subscription Creation Operation, it
   specifies the extended Notification Recipient as it would any
   Notification Recipient.  In addition, the client specifies the
   Ultimate Notification Recipient in the Subscription Creation
   Operation in a manner specified by the extended Notification
   Recipient.  Typically, it is either some bytes in the value of
   "notify-user-data" or some additional parameter in the value of
   "notify-recipient-uri".  The client also subscribes directly with the



Herriot & Hastings          Standards Track                    [Page 76]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   extended Notification Recipient (by means outside this document),
   since it is a notification server in its own right.

   The IPP Printer treats the extended Notification Recipient like any
   other Notification Recipient and the IPP Printer is not aware of the
   forwarding.  The Delivery Method that the extended Notification
   Recipient uses for delivering the Event Notification to the Ultimate
   Notification Recipient is beyond the scope of this document and is
   transparent to the IPP Printer.

   Examples of this extended Notification Recipient are paging,
   immediate messaging services, general notification services, and NOS
   vendors' infrastructure.  Figure 4 shows this approach.

      PDA, desktop, or server                    server or output device
                                                      +---------------+
          +--------+                                  |  ###########  |
          | client |---Subscription Creation -----------># Printer #  |
          +--------+       Operation                  |  # Object  #  |
                                                      |  #####|#####  |
   +------------+     +------------+   IPP-defined    +-------|-------+
   |Ultimate    | any |Notification|<--Event Notifications----+
   |Notification|<----|Recipient   |
   |Recipient   |     +------------+
   +------------+     (Notification Server)

    Figure 4 - Use of an Extended Notification Recipient transparent to
                                the Printer

19.  Object Model for Notification (Normative)

   This section describes the Notification object model that adds a
   Subscription Object which together with the Job and Printer object
   provide the complete Notification semantics.

















Herriot & Hastings          Standards Track                    [Page 77]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   The object relationships can be seen pictorially as:

   Subscription Objects (Per-Printer Subscriptions)     Printer object
   +----+                                               +------------+
   | s1 |<--------------------------------------------->|            |
   +----++                                              |            |
    | s2 |<-------------------------------------------->|     p1     |
    +----++                                             |            |
     | s3 |<------------------------------------------->|            |
     +----+                                             +------------+
                    Job objects
                    +---------+
                    |         |
     +----+         |   j1    |
     | s4 |<------->|         |
     +----+         |         |
                    |         |    s4 is a Per-Job Subscription Object
                    ++--------++
                     |         |
       +----+        |   j2    |
       | s5 |<------>|         |
       +----++       |         |
        | s6 |<----->|         |    s5 and s6 are Per-Job Subscription
        +----+       ++--------++                  Objects
                      |         |
                      |   j3    |
                      |         |
                      |         |         <----> indicates association
                      +---------+

               Figure 5 - Object Model for Notification

   s1, s2, and s3 are Per-Printer Subscription Objects and can identify
   Printer and/or Job Events.

   s4, s5, and s6 are Per-Job Subscription Objects and can identify
   Printer and/or Job Events.

19.1.  Object relationships

   This sub-section defines the object relationships between the
   Printer, Job, and Subscription Objects by example.  Whether Per-
   Printer Subscription Objects are actually contained in a Printer
   object or are just bi-directionally associated with them in some way
   is IMPLEMENTATION DEPENDENT and is transparent to the client.
   Similarly, whether Per-Job Subscription Objects are actually





Herriot & Hastings          Standards Track                    [Page 78]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   contained in a Job object or are just bi-directionally associated
   with them in some way is IMPLEMENTATION DEPENDENT and is transparent
   to the client.  The object relationships are defined as follows:

19.2.  Printer Object and Per-Printer Subscription Objects

   1. The Printer object contains (is associated with) zero or more
      Per-Printer Subscription Objects (p1 contains s1-s3 Per-Printer
      Subscription Objects).

   2. Each Per-Printer Subscription Object (s1, s2, and s3) is contained
      in (or is associated with) exactly one Printer object (p1).

19.3.  Job Object and Per-Job Subscription Objects

   1. A Job object (j1, j2, j3) is associated with zero or more Per-Job
      Subscription Objects (s4-s6).  Job j1 is associated with Per-Job
      Subscription Object s4, Job j2 is associated with Per-Job
      Subscription Objects s5 and s6, and Job j3 is not associated with
      any Per-Job Subscription Object.

   2. Each Per-Job Subscription Object is associated with exactly one
      Job object.

20.  Per-Job versus Per-Printer Subscription Objects (Normative)

   Per-Job and Per-Printer Subscription Objects are quite similar.
   Either type of Subscription Object can subscribe to Job Events,
   Printer Events, or both.  Both types of Subscription Objects can be
   queried using the Get-Subscriptions and Get-Subscription-Attributes
   operations and canceled using the Cancel-Subscription operation.
   Both types of Subscription Objects create Subscription Objects which
   have the same Subscription Object attributes defined.  However, there
   are some semantic differences between Per-Job Subscription Objects
   and Per-Printer Subscription Objects.  A Per-Job Subscription Object
   is established by the client when submitting a job and after creating
   the job using the Create-Job-Subscriptions operation by specifying
   the "job-id" of the Job with the "notify-job-id" attribute.  A Per-
   Printer Subscription Object is established between a client and a
   Printer using the Create-Printer-Subscriptions operation.  Some
   specific differences are:

   1. A client usually creates one or more Per-Job Subscription Objects
      as part of the Job Creation operations (Create-Job, Print-Job, and
      Print-URI), rather than using the OPTIONAL Create-Job-
      Subscriptions operation, especially since Printer implementations
      NEED NOT support the Create-Job-Subscriptions operation, since it
      is OPTIONAL.



Herriot & Hastings          Standards Track                    [Page 79]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   2. For Per-Job Subscription Objects, the Subscription Object is only
      valid while the job is "not-complete" (see sections 5.4.3) while
      for the Per-Printer Subscription Objects, the Subscription Object
      is valid until the time (in seconds) that the Printer returned in
      the "notify-lease-expiration-time" operation attribute.

   3. Job Events in a Per-Job Subscription Object apply only to "one
      job" (the Job created by the Job Creation operation or references
      by the Create-Job-Subscriptions operation) while Job Events in a
      Per-Printer Subscription Object apply to ALL jobs contained in the
      IPP Printer.

21.  Normative References

   [RFC2119]         Bradner, S., "Key words for use in RFCs to Indicate
                     Requirement Levels", BCP 14, RFC 2119 , March 1997.

   [RFC2396]         Berners-Lee, T., Fielding, R., and L. Masinter,
                     "Uniform Resource Identifiers (URI): Generic
                     Syntax", RFC 2396, August 1998.

   [RFC2717]         Petke, R. and I. King, "Registration Procedures for
                     URL Scheme Names", RFC 2717, November 1999.

   [RFC2910]         Herriot, R., Butler, S., Moore, P., and R. Turner,
                     "Internet Printing Protocol/1.1: Encoding and
                     Transport", RFC 2910, September 2000.

   [RFC2911]         deBry, R., Hastings, T., Herriot, R., Isaacson, S.,
                     and P. Powell, "Internet Printing Protocol/1.1:
                     Model and Semantics", RFC 2911, September 2000.

   [RFC3381]         Hastings, T., Lewis, H., and R. Bergman, "IPP: Job
                     Progress Attributes", RFC 3381,  September 2002.

   [RFC3996]         Herriot, R., Hastings, T., and H. Lewis, "Internet
                     Printing Protocol (IPP): The 'ippget' Delivery
                     Method for Event Notifications", RFC 3996, March
                     2005.

22.  Informative References

   [IANA-CON]        Narten, T. and H. Alvestrand, "Guidelines for
                     Writing an IANA Considerations Section in RFCs",
                     BCP 26, RFC 2434, October 1998.






Herriot & Hastings          Standards Track                    [Page 80]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   [RFC2565]         Herriot, R., Butler, S., Moore, P., and R. Turner,
                     "Internet Printing Protocol/1.0: Encoding and
                     Transport", RFC 2565, April 1999.

   [RFC2566]         deBry, R., Hastings, T., Herriot, R., Isaacson, S.,
                     and P. Powell, "Internet Printing Protocol/1.0:
                     Model and Semantics", RFC 2566, April 1999.

   [RFC2567]         Wright, D., "Design Goals for an Internet Printing
                     Protocol", RFC 2567, April 1999.

   [RFC2568]         Zilles, S., "Rationale for the Structure and Model
                     and Protocol for the Internet Printing Protocol",
                     RFC 2568, April 1999.

   [RFC2569]         Herriot, R., Hastings, T., Jacobs, N., and J.
                     Martin, "Mapping between LPD and IPP Protocols",
                     RFC 2569, April 1999.

   [RFC2616]         Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
                     Masinter, L., Leach, P., and T. Berners-Lee,
                     "Hypertext Transfer Protocol - HTTP/1.1", RFC 2616,
                     June 1999.

   [RFC3196]         Hastings, T., Manros, C., Zehler, P., Kugler, C.,
                     and H. Holst, "Internet Printing Protocol/1.1:
                     Implementer's Guide", RFC 3196, November 2001.

   [RFC3997]         Hastings, T., Editor, deBry, R., and H. Lewis,
                     "Internet Printing Protocol (IPP): Requirements for
                     IPP Notifications", RFC 3997, March 2005.

23.  IANA Considerations

   This section contains the registration information that IANA added to
   the IPP Registry according to the procedures defined in RFC 2911
   [RFC2911] section 6 to cover the definitions in this document.  In
   addition, this section defines how Events and Delivery Methods will
   be registered when they are defined in other documents.  The
   resulting registrations have been published in the
   http://www.iana.org/assignments/ipp-registrations registry.










Herriot & Hastings          Standards Track                    [Page 81]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


23.1.  Attribute Registrations

   The following table lists all the attributes defined in this
   document.  These have been registered according to the procedures in
   RFC 2911 [RFC2911] section 6.2.

   Subscription Template attributes:                 Reference  Section
   ---------------------------------                 ---------  -------
   notify-attributes (1setOf type2 keyword)          [RFC3995]  5.3.4
   notify-attributes-supported (1setOf type2 keyword)
                                                     [RFC3995]  5.3.4.1
   notify-charset (charset)                          [RFC3995]  5.3.6
   notify-events (1setOf type2 keyword)              [RFC3995]  5.3.3
   notify-events-default (1setOf type2 keyword)      [RFC3995]  5.3.3.1
   notify-events-supported (1setOf type2 keyword)    [RFC3995]  5.3.3.2
   notify-lease-duration (integer(0:67108863))       [RFC3995]  5.3.8
   notify-lease-duration-default (integer(0:67108863))
                                                     [RFC3995]  5.3.8.1
   notify-lease-duration-supported (1setOf (integer(0: 67108863) |
          rangeOfInteger(0:67108863)))               [RFC3995]  5.3.8.2
   notify-max-events-supported (integer(2:MAX))      [RFC3995]  5.3.3.3
   notify-natural-language (naturalLanguage)         [RFC3995]  5.3.7
   notify-pull-method (type2 keyword)                [RFC3995]  5.3.2
   notify-pull-method-supported (1setOf type2 keyword)
                                                     [RFC3995]  5.3.2.1
   notify-recipient-uri (uri)                        [RFC3995]  5.3.1
   notify-schemes-supported  (1setOf uriScheme)      [RFC3995]  5.3.1.1
   notify-time-interval (integer(0:MAX))             [RFC3995]  5.3.9
   notify-user-data (octetString(63))                [RFC3995]  5.3.5

   Subscription Description Attributes:
   notify-job-id (integer(1:MAX))                    [RFC3995]  5.4.6
   notify-lease-expiration-time (integer(0:MAX))     [RFC3995]  5.4.3
   notify-printer-up-time (integer(1:MAX))           [RFC3995]  5.4.4
   notify-printer-uri (uri)                          [RFC3995]  5.4.5
   notify-sequence-number (integer (0:MAX))          [RFC3995]  5.4.2
   notify-subscriber-user-name (name(MAX))           [RFC3995]  5.4.7
   notify-subscription-id  (integer (1:MAX))         [RFC3995]  5.4.1

   Printer Description Attributes:
   printer-state-change-date-time (dateTime)         [RFC3995]  6.2
   printer-state-change-time (integer(1:MAX))        [RFC3995]  6.1

   Attributes Only in Event Notifications
   notify-subscribed-event (type2 keyword)           [RFC3995]  8.1
   notify-text (text(MAX))                           [RFC3995]  8.2





Herriot & Hastings          Standards Track                    [Page 82]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


23.2.  Additional Enum Attribute Value Registrations within the IPP
       registry

   The following table lists all the new enum attribute values defined
   in this document.  These have been registered within the IPP registry
   according to the procedures in RFC 2911 [RFC2911] section 6.1.

   Attribute
     Value      Name                                 Reference   Section
     ------     -----------------------------        ---------   -------
   operations-supported (1setOf type2 enum)          [RFC2911]   4.4.15
     0x0016     Create-Printer-Subscriptions         [RFC3995]   7.1
     0x0017     Create-Job-Subscriptions             [RFC3995]   7.1
     0x0018     Get-Subscription-Attributes          [RFC3995]   7.1
     0x0019     Get-Subscriptions                    [RFC3995]   7.1
     0x001A     Renew-Subscription                   [RFC3995]   7.1
     0x001B     Cancel-Subscription                  [RFC3995]   7.1

23.3.  Operation Registrations

   The following table lists all of the operations defined in this
   document.  These have been registered according to the procedures in
   RFC 2911 [RFC2911] section 6.4.

   Operation Name                                    Reference   Section
   ---------------------------------                 ---------   -------
   Cancel-Subscription                               [RFC3995]   11.2.7
   Create-Job - Extensions                           [RFC3995]   11.1.3
   Create-Job-Subscriptions                          [RFC3995]   11.1.1
   Create-Printer-Subscriptions                      [RFC3995]   11.1.2
   Get-Printer-Attributes - Extensions               [RFC3995]   11.2.3
   Get-Subscription-Attributes                       [RFC3995]   11.2.4
   Get-Subscriptions                                 [RFC3995]   11.2.5
   Print-Job - Extensions                            [RFC3995]   11.1.3
   Print-URI - Extensions                            [RFC3995]   11.1.3
   Renew-Subscription                                [RFC3995]   11.2.6
   Validate-Job Operation - Extensions               [RFC3995]   11.2.2

23.4.  Status code Registrations

   The following table lists all the status codes defined in this
   document.  These have been registered according to the procedures in
   RFC 2911 [RFC2911] section 6.6.








Herriot & Hastings          Standards Track                    [Page 83]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Value    Status Code Name                        Reference  Section
   -----    ----------------------------            ---------  -------
   0x0000:0x00FF - Successful:
   0x0003   successful-ok-ignored-subscriptions     [RFC3995]  12.1
   0x0005   successful-ok-too-many-events           [RFC3995]  13.4

   0x0400:0x04FF - Client Error:
   0x0414   client-error-ignored-all-subscriptions  [RFC3995]  12.2
   0x0415   client-error-too-many-subscriptions     [RFC3995]  13.3

23.5.  Attribute Group tag Registrations

   The following table lists all the attribute group tags defined in
   this document.  These have been registered according to the
   procedures in RFC 2911 [RFC2911] section 6.5.

   Value    Attribute Group Tag Name                 Reference  Section
   -----    --------------------------------         --------   -------
   0x06     subscription-attributes-tag              [RFC3995]  14
   0x07     event-notification-attributes-tag        [RFC3995]  14

23.6.  Registration of Events

   The following table lists all the Events defined in this document as
   type2 keywords to be used with the "notify-events", "notify-events-
   default", and "notify-events-supported" Subscription Template
   attributes (see section 5.3.3)).  Rather than creating a separate
   section in the IPP Registry for Events, these event keywords have
   been registered according to the procedures of [RFC2911] section 7.1
   as additional keyword attribute values for use with the "notify-
   events" Subscription Template attribute (see section 5.3.3), i.e.,
   registered as keyword values for the "notify-events", "notify-
   events-default", and "notify-events-supported" attributes:

   Attribute (attribute syntax)
     Value                                          Reference  Section
     ---------------------                          ---------  -------
   notify-events (1setOf type2 keyword)             [RFC3995]  5.3.3
   notify-events-default (1setOf type2 keyword)     [RFC3995]  5.3.3.1
   notify-events-supported (1setOf type2 keyword)   [RFC3995]  5.3.3.2
   notify-subscribed-event (type2 keyword)          [RFC3995]  8.1
     No Events:
       none                                         [RFC3995]  5.3.3.4.1
     Printer Events:
       printer-state-changed                        [RFC3995]  5.3.3.4.2
       printer-restarted                            [RFC3995]  5.3.3.4.2
       printer-shutdown                             [RFC3995]  5.3.3.4.2
       printer-stopped                              [RFC3995]  5.3.3.4.2



Herriot & Hastings          Standards Track                    [Page 84]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


       printer-config-changed                       [RFC3995]  5.3.3.4.2
       printer-media-changed                        [RFC3995]  5.3.3.4.2
       printer-finishings-changed                   [RFC3995]  5.3.3.4.2
       printer-queue-order-changed                  [RFC3995]  5.3.3.4.2
     Job Events:
       job-state-changed                            [RFC3995]  5.3.3.4.3
       job-created                                  [RFC3995]  5.3.3.4.3
       job-completed                                [RFC3995]  5.3.3.4.3
       job-stopped                                  [RFC3995]  5.3.3.4.3
       job-config-changed                           [RFC3995]  5.3.3.4.3
       job-progress                                 [RFC3995]  5.3.3.4.3

23.7.  Registration of Event Notification Delivery Methods

   This section describes the requirements and procedures for
   registration and publication of Event Notification Delivery Methods
   and for the submission of such proposals.

23.7.1.  Requirements for Registration of Event Notification Delivery
         Methods

   Registered IPP Event Notification Delivery Methods are expected to
   follow a number of requirements described below.

23.7.1.1.  Required Characteristics

   A Delivery Method Document MUST either (1) contain all of the
   semantics of the Delivery Method or (2) contain the IPP Delivery
   Method registration requirements and a profile of some other protocol
   that in combination is the Delivery Method (e.g., mailto).  The
   Delivery Method Document (and any documents it requires) MUST define
   either (1) a URL for a Push Delivery Method that the meets the
   requirements of [RFC2717].  or (2) a keyword for a Pull Delivery
   method.

   IPP Event Notification Delivery Method Documents MUST meet the
   requirements of this document (see sections 9 and 10).

   In addition, a Delivery Method Document MUST contain the following
   information:

      Type of registration:  IPP Event Notification Delivery Method
      Name of this delivery method:
      Proposed URL scheme name of this Push Delivery Method or the
      keyword name of this Pull Delivery Method:
      Name of proposer:
      Address of proposer:




Herriot & Hastings          Standards Track                    [Page 85]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      Email address of proposer:
      Is this delivery method REQUIRED or OPTIONAL for conformance to
      the IPP Event Notification and Subscriptions document:
      Is this delivery method defining Machine Consumable and/or Human
      Consumable content:

23.7.1.2.  Naming Requirements

   Exactly one (URL scheme or keyword) name MUST be assigned to each
   Delivery Method.

   Each assigned name MUST uniquely identify a single Delivery Method.
   All Push Delivery Method names MUST conform to the rules for URL
   scheme names, according to [RFC2396] and [RFC2717] for schemes in the
   IETF tree.  All Pull Delivery Method names MUST conform to the rules
   for keywords according to [RFC2911].

23.7.1.3.  Functionality Requirements

   Delivery Methods MUST function as a protocol that is capable of
   delivering (push or pull) IPP Event Notifications to Notification
   Recipients.

23.7.1.4.  Usage and Implementation Requirements

   Use of a large number of Delivery Methods may hamper
   interoperability.  However, the use of a large number of undocumented
   and/or unlabeled Delivery Methods hampers interoperability even more.

   A Delivery Method should therefore be registered ONLY if it adds
   significant functionality that is valuable to a large community, OR
   if it documents existing practice in a large community.  Note that
   Delivery Methods registered for the second reason should be
   explicitly marked as being of limited or specialized use and should
   only be used with prior bilateral agreement.

23.7.1.5.  Publication Requirements

   Delivery Method Documents MUST be published in a standards track,
   informational, or experimental RFCs.

23.7.2.  Registration Procedure

   The IPP WG is developing a small number of Delivery Methods which are
   intended to be published as standards track RFCs.  However, some
   parties may wish to register additional Delivery Methods in the
   future.  This section describes the procedures for these additional
   Delivery Methods.



Herriot & Hastings          Standards Track                    [Page 86]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


23.7.2.1.  Present the proposal to the Community

   First the Delivery Method Document MUST be an Internet-Draft with a
   target category of standards track, informational, or experimental.
   The same MUST be true for any documents that it references.

   Deliver the proposed Delivery Method Document proposal to the
   "ipp@pwg.org" mailing list.  This mailing list has been established
   by [RFC2911] for reviewing proposed registrations and discussing
   other IPP matters.  Proposed Delivery Method Documents are not
   formally registered and MUST NOT be used until approved.

   The intent of the public posting is to solicit comments and feedback
   on the definition and suitability of the Delivery Method and the name
   chosen for it over a four week period.

23.7.2.2.  Delivery Method Reviewer

   The Delivery Method Reviewer is the same person who has been
   appointed by the IETF Application Area Director(s) as the IPP
   Designated Expert according to [RFC2911] and [IANA-CON].  When the
   four week period is over and the IPP Designated Expert is convinced
   that consensus has been achieved, the IPP Designated Expert either
   approves the request for registration or rejects it.  Rejection may
   occur because of significant objections raised on the list or
   objections raised externally.

   Decisions made by the Reviewer must be posted to the ipp@pwg.org
   mailing list within 14 days.  Decisions made by the Reviewer may be
   appealed to the IESG.

23.7.2.3.  IANA Registration

   Provided that the Delivery Method registration proposal has either
   passed review or has been successfully appealed to the IESG, the IANA
   will be notified by the delivery method reviewer and asked to
   register the Delivery Method and make it available to the community.

23.7.3.  Delivery Method Document Registrations

   Each Push Delivery Method Document defines a URI scheme.  Such a URI
   scheme is used in a URI value of the "notification-recipient" (uri)
   Subscription Template attribute (see section 5.3.1) and the uriScheme
   value of the "notify-schemes-supported" (1setOf uriScheme 5.3.1.1)
   Printer attribute(see section ).  Rather than creating a separate
   section in the IPP Registry for Delivery Methods, Push Delivery
   Methods will be registered as an additional value of the "notify-
   schemes-supported" Printer attribute.  These uriScheme values will be



Herriot & Hastings          Standards Track                    [Page 87]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   registered according to the procedures of [RFC2911] section 7.1 for
   additional attribute values.  Therefore, the IPP Registry entry for a
   Push Delivery Method will be of the form:

   Attribute
     Value                                        Ref.       Section
     ---------------------                        --------   -------
   notify-schemes-supported (1setOf uriScheme)    [RFC3995]  5.3.1.1
     <scheme name>                                RFC xxxx   m.n

   Each Pull Delivery Method Document defines a keyword method which is
   registered as an additional value of the "notify-pull-method" and
   "notify-pull-method-supported" Printer attributes.  These keyword
   values will be registered according to the procedures of [RFC2911]
   section 7.1 for additional attribute values.  Therefore, the IPP
   Registry entry for a Pull Delivery Method will be of the form:

   Attribute
     Value                                        Ref.       Section
     ---------------------                        --------   -------
   notify-pull-method (type2 keyword)             [RFC3995]  5.3.2
   notify-pull-method-supported (1setOf type2 keyword)
                                                  [RFC3995]  5.3.2.1
     <method keyword name>                        RFC xxxx    m.n

23.7.4.  Registration Template

   To: ipp@pwg.org
   Subject: Registration of a new Delivery Method

   Delivery Method name:

   (All Push Delivery Method names must be suitable for use as the value
   of a URL scheme in the IETF tree and all Pull Delivery Method names
   must be suitable IPP keywords according to [RFC2911])

   Published specification(s):

   (A specification for the Delivery Method must be openly available
   that accurately describes what is being registered.)

   Person & email address to contact for further information:









Herriot & Hastings          Standards Track                    [Page 88]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


24.  Internationalization Considerations

   This IPP Notification specification continues support for the
   internationalization of [RFC2911] of attributes containing text
   strings and names.  Allowing a Subscribing Client to specify a
   different natural language and charset for each Subscription Object
   increases the internationalization support.

   The Printer MUST be able to localize the content of Human Consumable
   Event Notifications and to localize the value of "notify-text"
   attribute in Machine Consumable Event Notifications that it delivers
   to Notification Recipients.  For localization, the Printer MUST use
   the value of the "notify-charset" attribute and the "notify-natural-
   language" attribute in the Subscription Object supplied by the
   Subscribing Client.

25.  Security Considerations

   Clients submitting Notification requests to the IPP Printer have the
   same security issues as submitting an IPP/1.1 print job request (see
   [RFC2911] section 3.2.1 and section 8).  The same mechanisms used by
   IPP/1.1 can therefore be used by the client Notification submission.
   Operations that require authentication can use the HTTP
   authentication.  Operations that require privacy can use the HTTP/TLS
   privacy.  As with IPP/1.1 Print Job Objects, if there is no security
   on Subscription Objects, sequential assignment of subscription-ids
   exposes the system to a passive traffic monitoring threat.

25.1.  Client access rights

   The Subscription Object access control model is the same as the
   access control model for Job objects.  The client MUST have the
   following access rights for the indicated Subscription operations:

   1. Create-Job-Subscriptions (see section 11.1.1):  A Per-Job
      Subscription object is associated with a Job.  To create Per-Job
      Subscription Objects, the authenticated user (see [RFC2911]
      section 8.3) performing this operation MUST (1) be the job owner,
      (2) have Operator or Administrator access rights for this Printer
      (see [RFC2911] sections 1 and 8.5), or (3) be otherwise authorized
      by the Printer's administrator-configured security policy to
      create Per-Job Subscription Objects for the target job.

   2. Create-Printer-Subscriptions (see section 11.1.2):  A Per-Printer
      Subscription object is associated with the Printer.  To create
      Per-Printer Subscription Objects, the authenticated user (see
      [RFC2911] section 8.3) performing this operation MUST (1) have
      Operator or Administrator access rights for this Printer (see



Herriot & Hastings          Standards Track                    [Page 89]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


      [RFC2911] sections 1 and 8.5) or (2) be otherwise authorized by
      the Printer's administrator-configured security policy to create
      Per-Printer Subscription Objects for this Printer.

   3. Get-Subscription-Attributes (see section 11.2.4):  The access
      control model for this operation is the same as that of the Get-
      Job-Attributes operation (see [RFC2911] section 3.3.4).  The
      primary difference is that a Get-Subscription-Attributes operation
      is directed at a Subscription Object rather than at a Job object,
      and a returned attribute group contains Subscription Object
      attributes rather than Job object attributes.  To query the
      specified Subscription Object, the authenticated user (see
      [RFC2911] section 8.3) performing this operation MUST (1) be the
      Subscription Object owner, (2) have Operator or Administrator
      access rights for this Printer (see [RFC2911] sections 1 and 8.5),
      or (3) be otherwise authorized by the Printer's administrator-
      configured security policy to query the Subscription Object for
      the target job.  Furthermore, the Printer's security policy MAY
      limit which attributes are returned, in a manner similar to the
      Get-Job-Attributes operation (see [RFC2911] end of section
      3.3.4.2).

   4. Get-Subscriptions (see section 11.2.5):  The access control model
      for this operation is the same as that of the Get-Jobs operation
      (see [RFC2911] section 3.2.6).  The primary difference is that the
      operation is directed at Subscription Objects rather than at Job
      objects, and the returned attribute groups contain Subscription
      Object attributes rather than Job object attributes.  To query
      Per-Job Subscription Objects of the specified job (client supplied
      the "notify-job-id" operation attribute - see section 11.2.5.1.1),
      the authenticated user (see [RFC2911] section 8.3) performing this
      operation MUST (1) be the Subscription Object owner, (2) have
      Operator or Administrator access rights for this Printer (see
      [RFC2911] sections 1 and 8.5), or (3) be otherwise authorized by
      the Printer's administrator-configured security policy to query
      the Subscription Object for the target job.  To query Per-Printer
      Subscription Objects of the Printer (client omits the "notify-
      job-id" operation attribute - see section 11.2.5.1.1), the
      authenticated user (see [RFC2911] section 8.3) performing this
      operation MUST (1) have Operator or Administrator access rights
      for this Printer (see [RFC2911] sections 1 and 8.5), or (2) be
      otherwise authorized by the Printer's administrator-configured
      security policy to query Per-Printer Subscription Objects for the
      target Printer.  Furthermore, the Printer's security policy MAY
      limit which attributes are returned, in a manner similar to the
      Get-Job-Attributes operation (see [RFC2911] end of section
      3.2.6.2).




Herriot & Hastings          Standards Track                    [Page 90]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   5. Renew-Subscriptions (see section 11.2.6):  The authenticated user
      (see [RFC2911] section 8.3) performing this operation MUST (1) be
      the owner of the Per-Printer Subscription Object, (2) have
      Operator or Administrator access rights for the Printer (see
      [RFC2911] sections 1 and 8.5), or (3) be otherwise authorized by
      the Printer's administrator-configured security policy to renew
      Per-Printer Subscription Objects for the target Printer

   6. Cancel-Subscription (see section 11.2.7):  The authenticated user
      (see [RFC2911] section 8.3) performing this operation MUST (1) be
      the owner of the Subscription Object, (2) have Operator or
      Administrator access rights for the Printer (see [RFC2911]
      sections 1 and 8.5), or (3) be otherwise authorized by the
      Printer's administrator-configured security policy to cancel the
      target Subscription Object.

   The standard security concerns (delivery to the right user, privacy
   of content, tamper proof content) apply to each Delivery Method.
   Some Delivery Methods are more secure than others.  Each Delivery
   Method Document MUST discuss its Security Considerations.

25.2.  Printer security threats

   Notification trap door:  If a Printer supports the OPTIONAL "notify-
   attributes" Subscription Template attribute (see section 5.3.4) where
   the client can request that the Printer return any specified Job,
   Printer, and Subscription object attributes, the Printer MUST apply
   the same security policy to these requested attributes in the Get-
   Notifications request as it does for the Get-Jobs, Get-Job-
   Attributes, Get-Printer-Attributes, and Get-Subscription-Attributes
   requests.

25.3.  Notification Recipient security threats

   Unwanted Events Notifications (spam):  For any Push Delivery Method,
   by far the biggest security concern is the abuse of notification:
   delivering unwanted Event Notifications to third parties (i.e.,
   spam).  The problem is made worse by notification addresses that may
   be redistributed to multiple parties.  There exist scenarios where
   third party notification is used (see Scenario #2 and #3 in
   [RFC3997]).  Any fully secure solution would require active agreement
   of all recipients before delivering anything.









Herriot & Hastings          Standards Track                    [Page 91]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


26.  Description of the base IPP documents (Informative)

   The base set of IPP documents includes:

   Design Goals for an Internet Printing Protocol [RFC2567]
   Rationale for the Structure and Model and Protocol for the Internet
      Printing Protocol [RFC2568]
   Internet Printing Protocol/1.1: Model and Semantics [RFC2911]
   Internet Printing Protocol/1.1: Encoding and Transport [RFC2910]
   Internet Printing Protocol/1.1: Implementer's Guide [RFC3196]
   Mapping between LPD and IPP Protocols [RFC2569]

   The "Design Goals for an Internet Printing Protocol" document takes a
   broad look at distributed printing functionality, and it enumerates
   real-life scenarios that help to clarify the features that need to be
   included in a printing protocol for the Internet.  It identifies
   requirements for three types of users: end users, operators, and
   administrators.  It calls out a subset of end user requirements that
   are satisfied in IPP/1.0 [RFC2566, RFC2565].  A few OPTIONAL operator
   operations have been added to IPP/1.1 [RFC2911, RFC2910].

   The "Rationale for the Structure and Model and Protocol for the
   Internet Printing Protocol" document describes IPP from a high level
   view, defines a roadmap for the various documents that form the suite
   of IPP specification documents, and gives background and rationale
   for the IETF IPP working group's major decisions.

   The "Internet Printing Protocol/1.1: Model and Semantics" document
   describes a simplified model with abstract objects, their attributes,
   and their operations.  The model introduces a Printer and a Job.  The
   Job supports multiple documents per Job.  The model document also
   addresses how security, internationalization, and directory issues
   are addressed.

   The "Internet Printing Protocol/1.1: Encoding and Transport" document
   is a formal mapping of the abstract operations and attributes defined
   in the model document onto HTTP/1.1 [RFC2616].  It also defines the
   encoding rules for a new Internet MIME media type called
   "application/ipp".  This document also defines the rules for
   transporting over HTTP a message body whose Content-Type is
   "application/ipp".  This document defines the 'ipp' scheme for
   identifying IPP printers and jobs.

   The "Internet Printing Protocol/1.1: Implementer's Guide" document
   gives insight and advice to implementers of IPP clients and IPP
   objects.  It is intended to help them understand IPP/1.1 and some of
   the considerations that may assist them in the design of their client
   and/or IPP object implementations.  For example, a typical order of



Herriot & Hastings          Standards Track                    [Page 92]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   processing requests is given, including error checking.  Motivation
   for some of the specification decisions is also included.

   The "Mapping between LPD and IPP Protocols" document gives some
   advice to implementers of gateways between IPP and LPD (Line Printer
   Daemon) implementations.

27.  Contributors

   The following people made significant contributions to the design and
   review of this specification:

   Scott A.  Isaacson
   Novell, Inc.
   122 E 1700 S
   Provo, UT  84606

   Phone: 801-861-7366
   Fax:   801-861-2517
   EMail: sisaacson@novell.com


   Roger deBry
   Utah Valley State College
   Orem, UT 84058

   Phone: 801-863-8848
   EMail: debryro@uvsc.edu


   Jay Martin
   Underscore Inc.
   9 Jacqueline St.
   Hudson, NH 03051-5308

   Phone: 603-889-7000
   Fax:   775-414-0245
   EMail: jkm@underscore.com


   Michael Shepherd
   Xerox Corporation
   800 Phillips Road  MS 128-51E
   Webster, NY  14450

   Phone: 716-422-2338
   Fax:   716-265-8871
   EMail: mshepherd@usa.xerox.com



Herriot & Hastings          Standards Track                    [Page 93]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


   Ron Bergman
   Ricoh Printing Systems America
   1757 Tapo Canyon Road
   Simi Valley, CA 93063-3394

   Phone: 805-578-4421
   Fax:   805-578-4001
   EMail: ron.bergman@rpsa.ricoh.com

Authors' Addresses

   Robert Herriot
   Global Workflow Solutions
   706 Colorado Ave.
   Palo Alto, CA 94303

   Phone:  650-324-4000
   EMail:  bob@herriot.com


   Tom Hastings
   Xerox Corporation
   701 S Aviation Blvd, ESAE 242
   El Segundo, CA  90245

   Phone: 310-333-6413
   Fax:   310-333-6342
   EMail: hastings@cp10.es.xerox.com























Herriot & Hastings          Standards Track                    [Page 94]
^L
RFC 3995       IPP: Event Notifications and Subscriptions     March 2005


Full Copyright Statement

   Copyright (C) The Internet Society (2005).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM 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.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at ietf-
   ipr@ietf.org.

Acknowledgement

   Funding for the RFC Editor function is currently provided by the
   Internet Society.







Herriot & Hastings          Standards Track                    [Page 95]
^L